دیوار توان و گذار به سمت پردازنده‌های چندهسته‌ای

برای دهه‌ها، پردازنده‌ها عمدتاً با افزایش سرعت ساعت سریع‌تر می‌شدند. این رویکرد به یک محدودیت فیزیکی مرتبط با مصرف توان و گرما برخورد کرد و کل صنعت را مجبور کرد جهت خود را به‌سمت چند هسته پردازشی تغییر دهد. این مقاله توضیح می‌دهد چرا دیوار توان اتفاق افتاد، صنعت چگونه با چندپردازنده‌ای پاسخ داد، اعداد بنچمارک واقعی چه چیزی درباره ادعاهای کارایی نشان می‌دهند، و چه تصورات غلط رایجی باید در استدلال درباره کارایی سخت‌افزار کنار گذاشته شوند.

دیوار توانپردازنده‌های چندهسته‌ایبنچمارک کارایی

~4 دقیقه مطالعه · آخرین به‌روزرسانی ۱۵ شهریور ۱۴۰۵

چرا سرعت ساعت متوقف شد: دیوار توان

افزایش فرکانس ساعت یک پردازنده باعث می‌شود عملیات بیشتری در ثانیه انجام دهد، اما هم‌زمان میزان توان الکتریکی مصرفی تراشه و به‌تبع آن گرمای تولیدشده را نیز افزایش می‌دهد. این رابطه اغلب Power Wall نامیده می‌شود.

مصرف توان در مدارهای دیجیتال تقریباً با رابطه زیر رشد می‌کند:

Power ≈ Capacitive Load × Voltage² × Frequency

از آنجا که توان با توان دوم ولتاژ رشد می‌کند، حتی افزایش‌های کوچک هم‌زمان در سرعت ساعت و ولتاژ منجر به افزایش نامتناسب بزرگی در گرمای تولیدی می‌شود. فراتر از یک نقطه مشخص، گرمای تولیدشده دیگر نمی‌تواند با روش‌های خنک‌سازی عملی و مقرون‌به‌صرفه دفع شود، و به همین دلیل سازندگان در نهایت از افزایش قابل‌توجه سرعت ساعت تک‌هسته‌ای دست کشیدند.

تغییر بزرگ: حرکت از تک‌هسته به چندهسته

وقتی افزایش سرعت ساعت غیرعملی شد، صنعت استراتژی خود را تغییر داد: به‌جای سریع‌تر کردن یک هسته پردازشی، تراشه‌ها شروع به شامل‌شدن چند هسته مستقل روی یک قطعه سیلیکون کردند. این تغییر گاهی The Sea Change از تک‌پردازنده‌ای به Multicore Microprocessors نامیده می‌شود.

این تغییر پیامد بزرگی برای توسعه‌دهندگان نرم‌افزار داشت. در گذشته، یک برنامه تک‌رشته‌ای به‌طور خودکار روی نسل جدید پردازنده سریع‌تر اجرا می‌شد، صرفاً به این دلیل که ساعت سریع‌تر شده بود. با تراشه‌های چندهسته‌ای، یک برنامه فقط زمانی از هسته‌های اضافه بهره می‌برد که به‌صراحت طوری نوشته شده باشد که کار خود را بین آن‌ها تقسیم کند — تکنیکی به نام Parallel Programming. نرم‌افزاری که نمی‌تواند به این شکل تقسیم شود، فایده کمی یا هیچ فایده‌ای از داشتن هسته‌های بیشتر نمی‌بیند.

واقعیت‌های عملی: بنچمارک کردن یک پردازنده واقعی چه نشان می‌دهد

اعداد بازاریابی و ارقام کارایی نظری اوج، اغلب تفاوت قابل‌توجهی با آنچه یک پردازنده روی بارهای کاری واقعی به دست می‌آورد دارند. بنچمارک کردن یک تراشه واقعی، مانند Intel Core i7، در برابر یک مجموعه استاندارد از برنامه‌های نماینده نشان می‌دهد کارایی چگونه بسته به نوع وظیفه تغییر می‌کند: برخی بارهای کاری با سرعت جابه‌جایی داده در حافظه محدود می‌شوند، برخی دیگر با تعداد عملیات محاسباتی که هسته می‌تواند در هر سیکل صادر کند محدود می‌شوند، و نتایج حتی روی سخت‌افزار یکسان می‌تواند بین برنامه‌های مختلف به‌طور قابل‌توجهی متفاوت باشد.

به همین دلیل، تکیه بر یک عدد کارایی منفرد، بدون دانستن اینکه چه بار کاری آن را تولید کرده، تصویری ناقص و گاهی گمراه‌کننده از توانایی واقعی ارائه می‌دهد.

مغالطات و دام‌های رایج در استدلال درباره کارایی

برخی فرضیات نادرست درباره کارایی به‌اندازه‌ای تکرار می‌شوند که ارزش نام بردن صریح دارند.

  • فرض اینکه فرکانس ساعت بالاتر به‌تنهایی کارایی بهتر را تضمین می‌کند، بدون در نظر گرفتن تعداد سیکل‌هایی که هر دستور واقعاً نیاز دارد.
  • فرض اینکه دو برابر کردن تعداد هسته‌ها به‌طور خودکار سرعت واقعی اپلیکیشن را دو برابر می‌کند، بدون در نظر گرفتن بخشی از برنامه که قابل موازی‌سازی نیست.
  • استفاده از ارقام کارایی نظری اوج به‌گونه‌ای که گویی نشان‌دهنده توان عملیاتی پایدار واقعی هستند.
  • مقایسه دو سیستم با استفاده از بنچمارک‌ها یا بارهای کاری متفاوت و رفتار با آن مقایسه به‌عنوان مقایسه‌ای منصفانه.

جمع‌بندی

گذاری که در این فصل توصیف شد — از هسته‌های تک و سریع محدودشده توسط دیوار توان، به هسته‌های چندگانه که نیازمند نرم‌افزار موازی صریح هستند — تقریباً هر تصمیم معماری بعدی را شکل داد. درک این تغییر پیش‌نیاز استدلال درست درباره این است که چرا سخت‌افزار و نرم‌افزار امروزی به این شکل طراحی شده‌اند.

نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

سخت‌افزار چگونه تقسیم انجام می‌دهد: خارج‌قسمت، باقیمانده و موارد خاص

تقسیم سخت‌افزارطلب‌ترین عملیات محاسباتی پایه است، که شامل تفریق و مقایسه تکراری است نه یک مدار تک‌مرحله‌ای. این مقاله الگوریتم مفهومی تقسیم طولانی که سخت‌افزار دنبال می‌کند را توضیح می‌دهد، خارج‌قسمت و باقیمانده چگونه با هم تولید می‌شوند را شرح می‌دهد، و موارد خاصی مانند تقسیم بر صفر که سخت‌افزار باید صراحتاً مدیریت کند را پوشش می‌دهد.

ادامه

سخت‌افزار چگونه اعداد را ضرب می‌کند: از منطق ساده تا مدارهای واقعی

ضرب بسیار سخت‌افزارطلب‌تر از جمع است، چون اساساً شامل جمع تکراری و شیفت است. این مقاله الگوریتم مفهومی که سخت‌افزار برای ضرب اعداد باینری استفاده می‌کند را مرور می‌کند، توضیح می‌دهد چرا نتیجه به دو برابر عرض بیتی ورودی‌ها نیاز دارد، و نحوه تفاوت ضرب علامت‌دار با حالت بدون‌علامت را پوشش می‌دهد.

ادامه

سخت‌افزار چگونه جمع و تفریق انجام می‌دهد و سرریز را تشخیص می‌دهد

سخت‌افزار چگونه جمع و تفریق انجام می‌دهد و سرریز را تشخیص می‌دهد

ادامه

آرایه‌ها در مقابل اشاره‌گرها در سطح سخت‌افزار

در C، آرایه‌ها و اشاره‌گرها اغلب قابل‌تعویض به‌نظر می‌رسند، و بسیاری از برنامه‌نویسان با آن‌ها به‌عنوان یک چیز واحد رفتار می‌کنند. با این حال در سطح سخت‌افزار، آن‌ها به توالی‌های دستوری قابل‌توجهی متفاوت با ویژگی‌های کارایی متفاوت کامپایل می‌شوند. این مقاله این دو رویکرد را با استفاده از اسمبلی RISC-V مقایسه می‌کند تا دقیقاً نشان دهد چرا کد مبتنی بر اشاره‌گر اغلب سریع‌تر است.

ادامه

از کد منبع تا یک فرآیند در حال اجرا: ترجمه و یک مثال کامل مرتب‌سازی

تبدیل یک برنامه C به چیزی که سیستم‌عامل واقعاً بتواند اجرا کند شامل چندین مرحله ترجمه مجزاست، که هرکدام یک فایل میانی متفاوت تولید می‌کنند. این مقاله کل این خط لوله را از کامپایلر تا loader مرور می‌کند، سپس مفاهیم این فصل را روی یک مثال کامل و واقعی به‌کار می‌برد: ترجمه گام‌به‌گام یک روال مرتب‌سازی C به اسمبلی RISC-V.

ادامه

مدیریت آدرس‌های بزرگ و همگام‌سازی در RISC-V

یک دستور ۳۲ بیتی نمی‌تواند یک ثابت بزرگ یا یک آدرس حافظه دور را مستقیماً درون خودش جا دهد، و چند پردازنده‌ای که حافظه را به اشتراک می‌گذارند نمی‌توانند بدون هماهنگی، یک داده یکسان را با امنیت به‌روزرسانی کنند. این مقاله توضیح می‌دهد RISC-V چگونه مقادیر فوری و آدرس‌های بزرگ را از قطعات کوچک‌تر می‌سازد، و دستورات اتمیک چگونه اجازه می‌دهند برنامه‌های موازی با امنیت همگام شوند.

ادامه