میکرو-ریسه‌ها

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو

میکرو-ریسه‌ها (به انگلیسی:Micro-Threads) در پردازنده‌های چندهسته‌ای یک روش برای کاهش تاخیر حافظه مانند معماریهای چندریسمانی است. اگرچه این تکنیک در پردازنده‌های چندهسته‌ای برای کاهش تاخیر مربوط به حافظه و عملیات ورودی/خروجی به صورت نرم‌افزاری مانند CellBroadbandEngine پیاده می‌شود.[۱]

معرفی[ویرایش]

میکرو-ریسه یک چهارچوب کاری (به انگلیسی:framework) می‌باشد که تحت نرم‌افزار بوده و یک سری ریسه کوچک درون پردازنده‌های چندهسته‌ای یا چندپردازشی می‌سازد. هر هسته دارای دو یا چند ریسه کوچک می‌باشد که زمان بیکاری پردازنده را بهینه می‌کند. این تکنیک شبیه فراریسمانی (به انگلیسی:hyper-treading) می‌باشد که توسط شرکت اینتل ساخته شد یا شبیه معماری‌های عمومی چندریسمانی در پردازنده‌های چندهسته‌ای می‌باشد. این تکنیک شما را قادر می‌سازد تا با یک هسته مشابه یک یا چند ریسه اجرا شوند بدون اینکه هزینه سرباری برای حافظه اصلی سیستم به خاطر تعویض متن داشته باشیم حتی اگر این هسته دارای سخت‌افزاری منطقی برای چندپردازندگی نداشته باشد. میکرو-ریسه به صورت اساسی تاخیر حافظه را با همزمان کردن محاسبات مربوط به دسترسی حافظه درون هر هسته کاهش می‌دهد. مهم‌ترین فرق بین میکرو-ریسه و مدلهای امروزی این است که تعویض متن برای میکرو-ریسه سربار خیلی کمی دارد برای مثال سربار پیاده‌سازی میکرو-ریسه بر روی Cell Broadband Engine، حدود ۱۶۰ نانوثانیه طول می‌کشد در حالیکه سربار تعویض متن برای SPE در حدود ۲۰۰۰ میکروثانیه می‌باشد. کم بودن این سربار به خاطر ۳ فاکتور مهم و اساسی است:

  • میکرو-ریسه‌ها خیلی کوچک هستند. هر میکرو-ریسه در یک یا دو جز ساده (اما بحرانی) اجرا می‌شود.
  • تعویض متن میکرو-ریسه‌ها فقط شامل رجیستر فایل مربوط به میکرو-ریسه در حال اجرا می‌باشد.
  • در میکرو-ریسه‌ها تعویض متن به حافظه پنهان اختصاصی هر هسته انجام می‌شود که این باعث افزایش سرعت و کارایی پردازش می‌شود.

پیش زمینه[ویرایش]

هرچقدر که ریزپردازنده‌ها سریعتر می‌شوند به دلیل افزایش تعداد هسته‌ها در هر چند ماه محدودهٔ تاخیر حافظه وسیعتر می‌شود. در سال ۱۹۸۰ میلادی تاخیر حافظه چند سیکل بود ولی امروزه به ۱۰۰۰ سیکل رسیده است. اگر ریزپردازنده به تعداد کافی هسته داشته باشد و در حالت خوشبینانه در زمان مشابه درخواستی برای دسترسی به حافظه اصلی نداشته باشند ما شاهد کاهش عمده‌ای از تاخیر حافظه خواهیم بود. وقتی که بقیه هسته‌ها در انتظار پاسخ حافظه هستند بعضی از این هسته‌ها باید در حال اجرا باشند. این تکنیک بهترین جانشین برای چندهسته‌ای نمی‌باشد. با مشغول نگه داشتن همه هسته‌ها در همه زمانها کارایی بالای محاسباتی حاصل می‌شود. بنابراین اگر هر هسته‌ای در تمام مدت مشغول باشد یک کارایی کامل (۱۰۰ درصد) برای کل پردازنده ممکن خواهد بود. ساختن نرم‌افزارهایی براساس ریسه‌ها این مساله را حل نخواهد کرد. تعویض متن به حافظه اصلی در مقایسه با تاخیر حافظه یک عملیات خیلی گران می‌باشد. برای مثال در Cell Broadband تعویض متن در بهترین حالت هر ریسه در هسته‌ها ۲۰۰۰ میکروثانیه طول می‌کشد. بعضی از تکنیک‌ها مانند چند بافری ممکن است بتواند مشکل تاخیر حافظه را حل کنند اگرچه آنها می‌توانند در جاهایی که می‌دانند قطعه بعدی‌ای که از حافظه می‌آید کدام است از الگوریتمهای منظم استفاده کنند. در این حالت وقتی که حافظه درخواست داده قبلی را پردازش می‌کند یک درخواست به حافظه ارسال می‌شود. اگرچه این تکنیک اگر داده بعدی را ندانیم کدام است کار نخواهد کرد. به عبارت دیگر این تکنیک در الگوریتمهای ترکیبی مانند: پیمایش درخت - رنکینگ تصادفی لیستها کارنخواهد کرد. علاوه بر این تکنیک چند بافری فرض می‌کند که تاخیر حافظه ثابت است و می‌توان آن را بصورت ایستا نشان داد اما حقیقت نشان می‌دهد که تاخیر حافظه از یک app به app دیگر تغییر می‌کند و به بارگذاری کلی روی منابع ریزپردازنده‌ها مانند نرخ درخواست حافظه مشترک برای ارتباطات مشترک بستگی دارد.

پیاده سازی فعلی[ویرایش]

امروزه میکرو-ریسه‌ها بر روی Cell Broadband پیاده سازی شده است که می‌تواند کارایی را ۳ تا ۵ برابر افزایش دهد. جدیداً این تکنیک برای الگوریتمهای منظم و ترکیبی آزمایش شده‌است. تلاشهای دیگری هم برای اثبات امکان استفاده آن برای الگوریتمهای علمی نیز در حال انجام است.

کارایی[ویرایش]

میکرو-ریسه بهترین راه حل برای کاهش تاخیر حافظه بر اساس کارایی ریزپردازنده در زمان اجرا می‌باشد. برای مثال اگر تاخیر حافظه در مقایسه با زمان تعویض متن و زمان پردازش بزرگ باشد می‌توان میکرو-ریسه‌های بیشتری اضافه کرد. این اتفاق زمانی می‌افتد که قطعات بزرگ داده از حافظه درخواست می‌شود یا زمانی که حافظه دارای نقاط hot spot (نقاط حساس) زیادی باشد. اگر این مقدار کم باشد میکرو-ریسه‌های کمتری می‌توانند در یک زمان اجرا شوند که به فاکتورهای مرتبط با پیاده‌سازی appها و فاکتورهای مرتبط با زمان اجرای سیستم مربوط است.

انتقادات[ویرایش]

اگرچه میکرو-ریسه یک مدل امیدبخش را برای کاهش تاخیر حافظه برای چندپردازنده‌ای فراهم می‌کند اما چند نکته وجود دارد که باید به آن توجه داشت:

  • این تکنیک احتیاج به پشتیبانی سخت‌افزار نیاز دارد. هر هسته باید امکان وقفه محلی برای زمان‌بندی میکرو-ریسه‌ها داشته باشد. اگر سیاست زمان‌بندی غیرانحصاری دنبال شود سیاست وقفه درون ساختی احتیاج نیست.
  • این تکنیک زمانی بهترین کارایی را دارد که حافظه پنهان محلی هر هسته به صورت دستی توسط برنامه‌نویس مدیریت شود.
  • اضافه کردن میکروریسه‌های زیاد در هسته به صورت چشمگیری بار منابع اشتراکی را افزایش می‌دهد. درخواست حافظه بیشتر و همگام سازی باعث تراکم بر روی منابع اشتراکی می‌شود البته این مسئله با کنترل زمان اجرای سیستم برای نقاط بحرانی مانند تاخیر حافظه و کاهش زمان همگانی اجرا با هرگونه کاهش میکرو-ریسه یا بهبود سیاست زمان‌بندی کاهش می‌یابد.

جستارهای وابسته[ویرایش]

منابع[ویرایش]