مسئله: زمان بیکاری در انتظار عملیاتهای کند
حتی با پایپلاینینگ و موازیسازی سطح دستور، که هر دو پیشتر در این مجموعه بحث شدند، یک هسته پردازنده مکرراً متوقف میشود در حالی که منتظر تکمیل یک عملیات کند است، مانند یک cache miss که نیازمند واکشی داده از حافظه اصلی است. در طول این توقفها، سختافزار اجرایی که در غیر این صورت میتوانست کار مفیدی انجام دهد بیکار میماند.
ایده اصلی: چند رشته که یک هسته را به اشتراک میگذارند
Hardware Multithreading اجازه میدهد یک هسته پردازنده فیزیکی واحد، وضعیت چند Thread مستقل (جریانهای جداگانه دستورات) را بهطور همزمان نگه دارد، و بین آنها جابهجا شود تا سختافزار اجرایی را حتی وقتی یک رشته منتظر یک عملیات حافظه کند است، مشغول نگه دارد.
Fine-Grained Multithreading
Fine-Grained Multithreading بین رشتهها در هر سیکل ساعت جابهجا میشود، و بهصورت round-robin در رشتههای موجود چرخش میکند. این رویکرد میتواند بهطور مؤثری تأخیر ناشی از توقفهای کوتاه را پنهان کند، چون دستور یک رشته دیگر میتواند در همان سیکل بعدی صادر شود، اما سرعت اجرای هر رشته منفرد در حال اجرای مجزا را کمی کاهش میدهد، چون آن رشته فقط کسری از سیکلها را دریافت میکند.
Coarse-Grained Multithreading
Coarse-Grained Multithreading رشتهها را فقط زمانی جابهجا میکند که رشته در حال اجرای فعلی با یک توقف پرهزینه مواجه شود، مانند یک cache miss که نیازمند دسترسی به حافظه اصلی است. این کار از سربار کوچک هر-سیکل جابهجایی هر سیکل اجتناب میکند، اما به توقفهای کوتاهتر کندتر واکنش نشان میدهد، چون یک تأخیر کوتاه ممکن است ارزش هزینه یک جابهجایی کامل رشته را نداشته باشد.
Simultaneous Multithreading: صدور از چند رشته بهطور همزمان
Simultaneous Multithreading (SMT)، ترکیبشده با سختافزار سوپراسکالر و صدور چندگانه که پیشتر در این مجموعه بحث شد، فراتر میرود با صادر کردن دستورات از چند رشته مختلف درون همان سیکل ساعت، و پر کردن اسلاتهای صدور در غیر این صورت استفادهنشدهای که یک رشته بهتنهایی نمیتوانست بهطور کامل اشغال کند.
بدون SMT (یک رشته):
سیکل 1: 2 از 4 اسلات صدور استفادهشده، 2 بیکار
با SMT (دو رشته که هسته را به اشتراک میگذارند):
سیکل 1: رشته A از 2 اسلات استفاده میکند،
رشته B از 2 اسلات در غیر این صورت-بیکار استفاده میکندچرا این با افزودن هستههای بیشتر متفاوت است
Hardware multithreading همان رویکرد چندهستهای که پیشتر در این مجموعه بحث شد نیست. Multithreading همان منابع اجرایی فیزیکی، مانند ALU ها، را بین چند رشته درون یک هسته واحد به اشتراک میگذارد، در حالی که طرحهای چندهستهای کل هستهها را تکرار میکنند. Multithreading معمولاً از نظر مساحت تراشه ارزانتر است اما بهبود کارایی متوسطتری فراهم میکند، چون رشتههای روی همان هسته همچنان برای منابع مشترکی مانند فضای کش رقابت میکنند.
چرا این تکنیک برای پردازندههای امروزی اهمیت دارد
Hardware multithreading بهطور گسترده در پردازندههای تجاری پیادهسازی میشود بهطور خاص چون بارهای کاری دنیای واقعی مکرراً روی دسترسی حافظه توقف میکنند، که پیشتر در این مجموعه درباره سلسلهمراتب حافظه بحث شد، و multithreading راهی نسبتاً کمهزینه برای بازیابی بخش معناداری از آن ظرفیت اجرایی در غیر این صورت هدررفته فراهم میکند.