Dariush Amini nahad
34 یادداشت منتشر شدهواحدهای پردازنده
واحدهای پردازنده
همه محاسبات الکترونیکی یکسان نیستند. اجرای یک برنامه عمومی، پردازش یک جریان پیوسته از نمونه های سیگنال، رندر تصویر و اجرای یک شبکه عصبی، الگوی محاسباتی متفاوتی دارند. به همین دلیل معماری رایانه های جدید به جای تکیه بر یک نوع واحد پردازشی، از چند نوع واحد با معماری و مسیر داده متفاوت استفاده می کند. تفاوت اصلی این واحدها در تعداد هسته ها نیست؛ بلکه در نوع عملیات، میزان موازی سازی، شکل داده، حافظه موردنیاز، الگوی دسترسی به داده، تاخیر، توان مصرفی و قابلیت برنامه ریزی است.
✓ CPU — واحد پردازش مرکزی
CPU پردازنده عمومی سامانه است و برای اجرای طیف وسیعی از دستورها طراحی می شود. ویژگی مهم CPU انعطاف پذیری بالای آن است. معمولا دارای هسته هایی با منطق کنترل نسبتا پیچیده، حافظه های نهان چندسطحی، پیش بینی انشعاب، اجرای خارج از ترتیب و سازوکارهای مدیریت حافظه است.
CPU برای کارهایی مناسب است که:
• منطق اجرایی پیچیده دارند؛
• شاخه های شرطی فراوان دارند؛
• الگوی محاسباتی از پیش مشخص نیست؛
• نیازمند پاسخ سریع به رخدادهای مختلف هستند؛
• یا به انعطاف پذیری بالا نیاز دارند.
نقطه ضعف آن در محاسبات بسیار تکراری و موازی است؛ زیرا بخش قابل توجهی از سخت افزار آن برای کنترل و انعطاف پذیری مصرف می شود.
✓ GPU — واحد پردازش گرافیکی و موازی
GPU برای اجرای تعداد زیادی عملیات مشابه به صورت هم زمان طراحی شده است. در معماری آن، تعداد زیادی واحد محاسباتی نسبتا ساده تر وجود دارد که می توانند روی مجموعه بزرگی از داده ها عملیات مشابه انجام دهند. این ساختار برای پردازش تصویر، گرافیک، شبیه سازی، جبر خطی و آموزش یا اجرای برخی مدل های یادگیری ماشین بسیار مناسب است. تفاوت بنیادی GPU با CPU این است که GPU تلاش می کند موازی سازی داده ای گسترده ایجاد کند، درحالی که CPU منابع بیشتری را برای اجرای انعطاف پذیر و سریع جریان های محاسباتی پیچیده اختصاص می دهد.
✓ DSP — پردازنده سیگنال
DSP برای عملیات تکرارشونده روی دنباله های داده طراحی شده است. ساختار آن معمولا برای عملیات هایی مانند ضرب و جمع پیاپی، پردازش جریان داده، فیلترگذاری، تبدیل های عددی و پردازش سیگنال بهینه شده است. ویژگی مهم DSP توانایی اجرای عملیات عددی با زمان بندی قابل پیش بینی و انتقال کارآمد داده است. در مخابرات، صوت، اندازه گیری، کنترل و سامانه های نهفته، DSP می تواند بسیار کارآمدتر از یک پردازنده عمومی باشد؛ به ویژه زمانی که الگوریتم به صورت پیوسته روی جریان نمونه ها اجرا می شود.
✓ NPU — شتاب دهنده هوش مصنوعی
NPU برای اجرای عملیات موردنیاز شبکه های عصبی طراحی می شود. تمرکز اصلی آن معمولا بر عملیات تکراری مانند ضرب ماتریسی، جمع، عملیات برداری و محاسبات تنسوری است. برخلاف CPU، هدف NPU اجرای عمومی هر نوع برنامه نیست. سخت افزار آن برای یک مجموعه محدودتر اما بسیار پرتکرار از عملیات طراحی شده است. مزیت اصلی توان پردازشی بالا نسبت به مصرف انرژی برای الگوریتم های هوش مصنوعی است. به همین دلیل NPU در سامانه هایی که اجرای محلی هوش مصنوعی اهمیت دارد، می تواند بخشی از بار CPU یا GPU را حذف کند.
✓ TPU — شتاب دهنده اختصاصی محاسبات تنسوری
TPU را باید یک مفهوم تخصصی تر در خانواده شتاب دهنده های هوش مصنوعی دانست که تمرکز اصلی آن بر محاسبات تنسوری و عملیات ماتریسی بزرگ مقیاس است. تفاوت TPU با تعریف عمومی NPU این است که TPU معمولا معماری بسیار مشخص تری برای بارهای محاسباتی تنسوری دارد. در چنین معماری هایی، آرایه هایی از واحدهای محاسباتی می توانند داده را به صورت منظم میان خود حرکت دهند و عملیات ماتریسی را با بهره وری بالا انجام دهند.
✓ VPU — پردازنده ویدئو
VPU برای پردازش اختصاصی داده های تصویری و ویدئویی ساخته می شود.
وظایف آن می تواند شامل:
• رمزگذاری ویدئو
• رمزگشایی ویدئو
• تبدیل قالب تصویر
• پردازش جریان تصویری
• مقیاس گذاری تصویر
• برخی عملیات پیش پردازش تصویری
باشد.
دلیل استفاده از VPU این است که اجرای این عملیات روی CPU می تواند منابع محاسباتی و انرژی زیادی مصرف کند. در نتیجه، VPU یک نمونه روشن از انتقال یک کار پرتکرار و ساختاریافته از پردازنده عمومی به سخت افزار تخصصی است.
✓ DPU — پردازنده داده و زیرساخت
DPU برای پردازش وظایف مرتبط با حرکت، مدیریت و حفاظت از داده در زیرساخت های محاسباتی طراحی می شود. در سامانه های بزرگ، CPU نباید تمام زمان خود را صرف وظایفی مانند انتقال داده، مدیریت شبکه، ذخیره سازی و برخی عملیات حفاظتی کند. DPU می تواند بخشی از این بار را مستقل از CPU انجام دهد.در نتیجه، نقش DPU فقط «محاسبه سریع تر» نیست؛ بلکه جداکردن وظایف زیرساختی از پردازش اصلی است. این مفهوم به ویژه در مراکز داده و سامانه های محاسباتی بزرگ اهمیت دارد.
✓ FPU — واحد محاسبات ممیز شناور
FPU از نظر طبقه بندی، با CPU، GPU یا NPU هم سطح نیست. FPU یک واحد محاسباتی تخصصی در داخل یک پردازنده یا شتاب دهنده است که عملیات عددی روی اعداد ممیز شناور را انجام می دهد. وجود FPU باعث می شود عملیات هایی مانند جمع، ضرب، تقسیم یا محاسبات ترکیبی ممیز شناور بدون شبیه سازی نرم افزاری طولانی اجرا شوند. FPU می تواند داخل CPU، میکروکنترلر، DSP یا برخی پردازنده های دیگر قرار گیرد. بنابراین CPU یک پردازنده است؛ FPU یک واحد اجرایی درون معماری پردازنده است. این تفاوت معماری بسیار مهم است.

✓ تفاوت بنیادی این واحدها
می توان منطق انتخاب آنها را چنین خلاصه کرد:
CPU: انعطاف پذیری و اجرای عمومی
GPU: موازی سازی گسترده روی داده های متعدد
DSP: پردازش پیوسته و تکراری سیگنال
NPU: اجرای کارآمد شبکه های عصبی
TPU: محاسبات بسیار تخصصی تنسوری
VPU: پردازش تخصصی جریان های تصویری و ویدئویی
DPU: پردازش داده و وظایف زیرساختی
FPU: اجرای سخت افزاری محاسبات ممیز شناور

✓ معماری ناهمگون؛ جهت اصلی طراحی جدید
در سامانه های پیشرفته، این واحدها معمولا رقیب یکدیگر نیستند؛ بلکه در کنار یکدیگر کار می کنند.
یک سامانه می تواند چنین تقسیم کاری داشته باشد:
CPU → کنترل و اجرای منطق اصلی
GPU → محاسبات موازی سنگین
DSP → پردازش جریان سیگنال
NPU → اجرای شبکه عصبی
VPU → رمزگذاری و رمزگشایی ویدئو
DPU → مدیریت ارتباط و جابه جایی داده
FPU → محاسبات ممیز شناور موردنیاز واحد اصلی
این ساختار را می توان معماری ناهمگون دانست؛ یعنی سامانه به جای استفاده از یک نوع واحد محاسباتی، هر بار مناسب ترین بخش سخت افزار را برای یک نوع بار کاری به کار می گیرد.

✓ نکته کلیدی در مقایسه
مهم ترین معیار، صرفا تعداد عملیات در ثانیه نیست. یک شتاب دهنده ممکن است در یک نوع محاسبه بسیار سریع باشد، اما برای کاری دیگر به دلیل انتقال داده، دسترسی به حافظه یا سربار هماهنگ سازی عملکرد ضعیفی داشته باشد.
بنابراین ارزیابی واقعی باید هم زمان شامل:
سرعت محاسبه + تاخیر + مصرف انرژی + پهنای باند حافظه + ظرفیت حافظه + قابلیت برنامه ریزی + هزینه سخت افزار
باشد.
در بسیاری از سامانه های جدید، انتقال داده میان حافظه و واحد پردازشی می تواند به اندازه خود محاسبه یا حتی بیشتر محدودکننده باشد.
✓ آخر سر
این هشت مورد را نباید یک فهرست ساده از «انواع پردازنده» دانست؛ زیرا از نظر معماری در یک سطح قرار ندارند.
CPU، GPU، DSP، NPU، TPU، VPU و DPU عمدتا به رده های مختلف پردازنده یا شتاب دهنده اشاره می کنند، درحالی که FPU یک واحد محاسباتی تخصصی درون یک معماری پردازنده است. روند اصلی معماری سامانه های محاسباتی نیز از یک پردازنده همه کاره به سمت تقسیم بار کاری میان واحدهای تخصصی حرکت کرده است. اصل مهندسی پشت این روند ساده است هرچه الگوی محاسبه مشخص تر و تکرارشونده تر باشد، امکان ساخت سخت افزار تخصصی تر، سریع تر و کم مصرف تر بیشتر می شود؛ هرچه مسئله نامنظم تر و متغیرتر باشد، انعطاف پذیری CPU ارزش بیشتری پیدا می کند. در نهایت، مسئله اصلی طراحی این نیست که «کدام پردازنده قوی تر است»، بلکه این است که هر بخش از بار محاسباتی باید در کدام معماری اجرا شود تا بهترین توازن میان سرعت، انرژی، حافظه، هزینه و انعطاف پذیری حاصل شود.