اطلاعیه

Collapse
No announcement yet.

پردازش با چند هسته

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    پردازش با چند هسته

    سلام
    چطور میتونیم کاری کنیم برنامه هایی که مینویسیم تو چند هسته پردازش بشن؟
    من با(c++) Microsoft Visual Studio 2010 کار میکنم
    برای متلب هم راهی هست؟
    نــــ_ـــمـــ_ــــیــــ_ـــدونـــــ_ــم.....

    #2
    پاسخ : پردازش با چند هسته

    چیزی وجود داره بنام AffinityMask. باید برای هر پروسس اینو مقدار بدی. یک عدد 32 بیتی هست که به ازای هر هسته مجاز برای استفاده یک بیتش (متناظر با شماره هسته) ست میشه. دستورش هم برای پروسس و thread اینه:

    SetProcessAffinityMask و SetThreadAffinityMask.

    اما یک مورد بسیار بسیار بسیار.... مهم:

    چون thread ها با این روش میتونن روی هسته های متفاوت اجرا بشن الزاما برای مواردی که ممکنه thread ها احتیاج به همزمانی داشته باشن و هسته های مورد استفاده این thread ها متفاوت باشه؛ میبایستی از توابع خاصی استفاده بشه که ریسک عملیاتی نداشته باشه و این یعنی دردسر. عموما (و نه همیشه) برنامه ها برای پرهیز از این دردسر ها حالتی رو انتخاب میکنن که کل thread های یک پروسس فقط از یک هسته استفاده کنن.

    برای اطلاع بیشتر از این مورد میتونین توضیحات مربوط به توابع Interlocked رو در MSDN ببینین. ولی عمده اش اینه که مثلا فرض کنین دو thread از mutex برای همزمانی استفاده میکنن. و این object بر اساس دسترسی به حافظه استواره. وقتی یک هسته بیشتر درگیر نباشه چون time sharing استفاده میشه هیچ وقت دو تا thread در یک لحظه (کوانتوم) برای گرفتن تعلق mutex چک نمیشن. اما اگر دو هسته باشه میبایستی از تکنیک های bus lock استفاده بشه که این کار برای موارد عمومی باعث کاهش سرعت میشه بنابراین استفاده نمیشه و بخاطر همین ممکنه دو thread بطور همزمان (چون time sharing فعال نیست) به این mutex برای گرفتن تعلق دسترسی پیدا کنن و هر دو در یک لحظه mutex رو آزاد ببینن و کارشونو ادامه بدن. در صورتی که فقط یک Thread باید کارشو ادامه بده. و این یعنی یک باگ اساسی که معلوم نیست کی پیش بیاد.

    دیدگاه

    لطفا صبر کنید...
    X