نحوه موازی کردن یک حلقه for بوسیله openMP - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

نحوه موازی کردن یک حلقه for بوسیله openMP

+2 امتیاز
سلام دوستان میشه یک نفر ساده توضیح بده چطور میشه یک حلقه for رو موازی اجرا کرد ؟ من چیزایی که توی وب بود رو خوندم هیچی نفهمیدم :)
سوال شده شهریور 3, 1393  بوسیله ی sailent (امتیاز 355)   16 44 59
دوباره تگ گذاری شد شهریور 3, 1393 بوسیله ی sailent

1 پاسخ

+1 امتیاز
 
بهترین پاسخ

خیلی سخت نیست . برای نمونه : 

int size =20;
std::vector<int> a(size);
std::vector<int> b(size);
///read a,b ...
std::vector<int> res(size);

#pragma omp parallel
#pragma omp for
for(i = 0; i < size ; i++)
{
    res[i] =  a[i] - b[i];
}

 

کاری که openmp میکنه اینه که  for رو به چند قسمت میشکنه و هر thread یک قسمت از حلقه رو اجرا میکنه (مثلا 0 تا 5 یک thread و 5 تا 10 یک thread دیگه و... ) و نهایتا وقتی که همه thread ها کارشون تموم شد برنامه از حلقه for خارج میشه .

پاسخ داده شده دی 9, 1397 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
انتخاب شد دی 12, 1397 بوسیله ی مصطفی ساتکی
...