PDA

View Full Version : آموزش: موازی سازی حلقه های تو در تو در OpenMP نسخه 2.0



sibooy
یک شنبه 20 مرداد 1392, 16:35 عصر
با توجه به اینکه نسخه 2010 ویژوال استودیو C++‎‎ از کتابخانه OpenMP نسخه 2.0 فقط خارجی ترین حلقه رو می تونه موازی کنه. ولی یه راه هست.
***(در نسخه 3.0 و بعد تر با اضافه کردن عبارت colaps(i) به عبارت pragma omp for می شه عمق موازی سازی رو مشخص کرد. بجای i باید عدد بذاریم مثلا 3. یعنی تا عمق 3 حلقه های تو در تو رو موازی اجرا کنه)****
طریقه ایجاد حلقه تو در تو در OpenMP نسخه 2.0 (از نسخه 3.0 به بعد حلقه های تو در تو پشتیبانی می شن.)
یک راه جالب توی کتاب OpenMP پیدا کردم دوتا حلقه تو در تو رو می شه به یکی از این دو شیوه موازی کرد نمی دونم حلقه سوم رو هم با همین شیوه می شه موازی کرد یا نه اما همینم غنیمته.
شیوه اول:

#pragma omp parallel default (shared)
{
#pragma omp for
for(i=0;i<n;i++)
{
#pragma omp parallel shared(i,n)
{
#pragma omp for
for(j=0;j<n;j++)
work(i,j);
}
}
}

شیوه دوم:

#pragma omp parallel default (shared)
{
#pragma omp for
for(i=0;i<n;i++)
work1(i,n);
}

void work1(int 1, int n)
{
int j;
#pragma omp for
for(j=0;j<n;j++)
work2(i,j);
}

راه اندازی openMP رو در ویژوال استودیو C++‎ 2010 از این لینک ببینید
http://barnamenevis.org/showthread.php?395000-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D9%85%D9%88%D8%A7%D8%B2%DB%8C-%D8%AF%D8%B1-vs-c-2010-%D8%A8%D9%87-%D9%88%D8%B3%DB%8C%D9%84%D9%87-OPENMP

omidshaman
دوشنبه 21 مرداد 1392, 13:11 عصر
مطالبی که فکر می کنی مهم هستن رو تو این تاپیک بزار تعداد افراد بیشتری استفاده کنن
C++‎‎‎0x/C++‎‎‎11 استاندارد جدید زبان ++C ! (http://barnamenevis.org/showthread.php?408677-C-0x-C-11-%D8%A7%D8%B3%D8%AA%D8%A7%D9%86%D8%AF%D8%A7%D8%B1%D 8%AF-%D8%AC%D8%AF%DB%8C%D8%AF-%D8%B2%D8%A8%D8%A7%D9%86-C-!)
به زودی اسم تاپیک عوض میشه .