نمایش نتایج 1 تا 2 از 2

نام تاپیک: اجرای موازی در openmp با چند thread

  1. #1
    کاربر تازه وارد
    تاریخ عضویت
    خرداد 1390
    محل زندگی
    مشهد
    پست
    39

    اجرای موازی در openmp با چند thread

    سلام
    من می خوام یک حلقه تودرتو رو بصورت موازی با تعدادی ترد انجام بدم که هر ترد قسمت خاصی رو اجرا کنه:
    for(i=0;i<(size/2);i++)
    for(j=0;j<(size/2);j++)
    for(k=0;k<(size/2);k++)
    {
    D1[i][j]+=A1[i][k]*B1[k][j];
    D2[i][j]+=A1[i][k]*B2[k][j];
    D3[i][j]+=A2[i][k]*B3[k][j];
    D4[i][j]+=A2[i][k]*B4[k][j];
    D5[i][j]+=A3[i][k]*B1[k][j];
    D6[i][j]+=A3[i][k]*B2[k][j];
    D7[i][j]+=A4[i][k]*B3[k][j];
    D8[i][j]+=A4[i][k]*B4[k][j];
    }
    تو این کد هر کدوم از این Dها (از D1 تا D8) توسط یک ترد انجام بشه یعنی 8 تا ترد باید تعریف کنیم و هر ترد منتسب به یک D باشه. چطور این کار رو بکنم؟

  2. #2

    نقل قول: اجرای موازی در openmp با چند thread

    نقل قول نوشته شده توسط 8502803 مشاهده تاپیک
    سلام
    من می خوام یک حلقه تودرتو رو بصورت موازی با تعدادی ترد انجام بدم که هر ترد قسمت خاصی رو اجرا کنه:
    for(i=0;i<(size/2);i++)
    for(j=0;j<(size/2);j++)
    for(k=0;k<(size/2);k++)
    {
    D1[i][j]+=A1[i][k]*B1[k][j];
    D2[i][j]+=A1[i][k]*B2[k][j];
    D3[i][j]+=A2[i][k]*B3[k][j];
    D4[i][j]+=A2[i][k]*B4[k][j];
    D5[i][j]+=A3[i][k]*B1[k][j];
    D6[i][j]+=A3[i][k]*B2[k][j];
    D7[i][j]+=A4[i][k]*B3[k][j];
    D8[i][j]+=A4[i][k]*B4[k][j];
    }
    تو این کد هر کدوم از این Dها (از D1 تا D8) توسط یک ترد انجام بشه یعنی 8 تا ترد باید تعریف کنیم و هر ترد منتسب به یک D باشه. چطور این کار رو بکنم؟
    دوست عزیز!!
    موازی سازی و استفاده از نخ ها یک مسئله متفاوت هستند !
    ولی اگر بخواهید از نخ استفاده کنید خوب چون مشکل race condition دارید در زمان نوشتن ماتریس A1 , B1 , A2,B2 ,A3,B3 A4,B4 باید در زمان ایجاد هر نخ برای هر قسمت از ماتریس های D باید از قفل های سطح کرنل مثل mutex استفاده کنید یعنی به ازای هر ناحیه بحرانی برای جلوگیری از تداخل در نوشتن در ماتریس های A,B باید یک قفل تهیه کنید و بعد از محاسبه هر قسمت قفل هارو آزاد کنید تا به آخر این تکنیک میشه همزمانی و استفاده از چند نخ برای محاسبه.
    ولی برای موازی سازی باید هر پردازه را به صورت پارالل محاسبه کنید و از تکنیک های divide by conquer استفاده کنید برای پخش کردن محاسبات بر روی هسته های پردازشگر و در عین حال هم باید نکات thread safety را هم که در بالا اشاره شد رعایت کنید.
    به هرحال بحث موازی سازی میتونه خیلی پیچیده باشه و کلافه کننده برای استفاده از نخ ها و همزمانی و موازی سازی حتما باید درباره نخ و پردازه و حوضچه های نخ و پارالل کردن پردازه و قفل های کرنلی و قفل های کاربری و هسته ها و تکنیک های تقسیم وظایف و... خیلی چیزهای دیگه اطلاع داشته باشید.
    استفاده از نخ ها همون قدر که جذاب هست همون قدر هم طاقت فرسا و خیلی خیلی سخت دیباگ میشن.

تاپیک های مشابه

  1. پاسخ: 20
    آخرین پست: چهارشنبه 14 آذر 1397, 09:06 صبح
  2. سوال: مشکل در ارتباط با چند جدول در یک دیتابیس
    نوشته شده توسط IT_Developer در بخش C#‎‎
    پاسخ: 1
    آخرین پست: شنبه 18 تیر 1390, 23:18 عصر
  3. مشکل در کار با چند فرم
    نوشته شده توسط saeidgab در بخش C#‎‎
    پاسخ: 9
    آخرین پست: چهارشنبه 13 مرداد 1389, 16:42 عصر
  4. چند سوال در رابطه با چند تا پروژه بانک اطلاعاتی
    نوشته شده توسط nokhodi در بخش برنامه نویسی در 6 VB
    پاسخ: 11
    آخرین پست: چهارشنبه 15 اسفند 1386, 10:22 صبح
  5. اجرای کریستال در webpage با دیتابیس sql server
    نوشته شده توسط salimy در بخش ASP.NET Web Forms
    پاسخ: 2
    آخرین پست: سه شنبه 05 آبان 1383, 03:45 صبح

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •