چگونه چیپ GPU طراحی کنیم
Chapter 1 Introduction to Gpu Chip Design

فصل 1: معرفی طراحی چیپ GPU

GPUها چیستند و چگونه از CPUها متفاوت هستند

واحدهای پردازش گرافیکی (GPUها) مدارهای الکترونیکی تخصصی هستند که برای دستکاری و تغییر سریع حافظه طراحی شدهاند تا ایجاد تصاویر در یک بافر فریم را برای خروجی به یک دستگاه نمایش تسریع کنند. GPUها در ابتدا برای بارگذاری رندرینگ گرافیکی دو بعدی و سه بعدی از CPU توسعه یافتند، که باعث افزایش چشمگیر عملکرد برای برنامههای مبتنی بر گرافیک مانند بازیهای ویدیویی میشود.

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

تفاوتهای معماری کلیدی بین CPUها و GPUها شامل موارد زیر است:

  • تعداد هسته: GPUها تعداد زیادی هسته کوچک (صدها تا هزاران) دارند، در حالی که CPUها تعداد کمی هسته بزرگ و قدرتمند (2-64) دارند.
  • سلسله مراتب حافظه پنهان: CPUها دارای حافظه پنهان بزرگ برای کاهش تأخیر هستند، در حالی که GPUها دارای حافظه پنهان کوچکتر هستند و بیشتر به پهنای باند بالا برای جبران تأخیر متکی هستند.
  • منطق کنترل: CPUها قابلیتهای پیچیده پیشبینی شاخه و اجرای خارج از ترتیب دارند. GPUها منطق کنترلی بسیار ساده‌تری دارند.
  • مجموعه دستورات: CPUها مجموعه دستورات گسترده‌ای برای محاسبات کلی پشتیبانی میکنند. مجموعه دستورات GPU محدودتر و برای گرافیک بهینه شده است.
  • پهنای باند حافظه: GPUها دارای پهنای باند حافظه بسیار بالا (تا 1 ترابایت بر ثانیه) برای تغذیه هزاران هسته خود هستند. CPUها پهنای باند پایینتری (50-100 گیگابایت بر ثانیه) دارند.
  • عملکرد اعداد ممیز شناور: GPUها قادر به عملکرد اعداد ممیز شناور بسیار بالاتری هستند، که آنها را برای کارهای HPC و AI مناسب میکند.

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

کاربردهای کلیدی و اهمیت GPU‌ها

در طول دو دهه گذشته، GPU‌ها به یکی از مهم‌ترین انواع فناوری محاسباتی تبدیل شده‌اند، زیرا ساختار بسیار موازی آن‌ها باعث می‌شود که در الگوریتم‌هایی که بلوک‌های بزرگ داده را به طور موازی پردازش می‌کنند، کارآمدتر از CPU‌های چندمنظوره باشند. برخی از حوزه‌های کاربردی کلیدی که پیشرفت سریع فناوری GPU را محرک کرده‌اند عبارتند از:

گرافیک رایانه‌ای و بازی‌ها

رایج‌ترین استفاده از GPU‌ها، تسریع ایجاد تصاویر در یک بافر فریم برای خروجی به یک دستگاه نمایش است. GPU‌ها در دستکاری گرافیک رایانه‌ای و پردازش تصویر تبحر دارند، و ساختار بسیار موازی آن‌ها باعث می‌شود که در الگوریتم‌هایی که بلوک‌های بزرگ داده به طور موازی پردازش می‌شوند، کارآمدتر از CPU‌های چندمنظوره باشند. آن‌ها یک جزء استاندارد در کنسول‌های بازی و رایانه‌های بازی مدرن هستند.

محاسبات با عملکرد بالا (HPC)

قابلیت‌های پردازش موازی GPU‌ها باعث می‌شود که برای کاربردهای محاسبات علمی که شامل پردازش مجموعه‌های داده بسیار بزرگ با الگوریتم‌های موازی هستند، مناسب باشند. GPU‌ها در ابررایانه‌ها و خوشه‌های HPC به طور گسترده‌ای مورد استفاده قرار گرفته‌اند، جایی که در کنار CPU‌ها برای تسریع بارهای کاری بسیار موازی مانند پیش‌بینی آب و هوا، شبیه‌سازی دینامیک مولکولی و تحلیل لرزه‌ای استفاده می‌شوند.

هوش مصنوعی و یادگیری ماشینی

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

استخراج ارز دیجیتال

GPUها همچنین به طور گسترده برای استخراج ارز دیجیتال مورد استفاده قرار گرفتهاند، زیرا قابلیتهای پردازش موازی آنها آنها را برای الگوریتمهای هش رمزنگاری مورد استفاده در ارزهای دیجیتال مبتنی بر اثبات کار مانند بیت‌کوین مناسب میکند. GPUهای پرقدرت AMD و Nvidia در طول رونق ارزهای دیجیتال در سال 2017 بسیار تقاضا داشتند.

محاسبات شتاب‌یافته و AI لبه

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

موازی‌سازی گسترده و پهنای باند حافظه بالای GPUها آنها را به یکی از مهمترین پلتفرمهای محاسباتی امروز تبدیل کرده است، با کاربردهایی که به دور از گرافیک رایانه‌ای گسترش یافته است. همانطور که به محدودیتهای پردازندههای کلی‌منظوره برخورد میکنیم، چیپهای تخصصی مانند GPUها، FPGAها و شتاب‌دهندههای AI به موتورهای محاسباتی آینده تبدیل میشوند.

چشم‌انداز شتاب‌دهندههای محاسباتی

همانطور که بهبودهای عملکرد از پردازندههای کلی‌منظوره CPU در سالهای اخیر کند شده است، روند فزاینده‌ای به سمت چیپهای شتاب‌دهنده تخصصی که میتوانند بارهای کاری خاصی را سرعت بخشند وجود داشته است. GPUها یکی از برجسته‌ترین مثال‌های شتاب‌دهندهها هستند، اما دستههای مهم دیگری نیز وجود دارند:

آرایههای دروازه‌های قابل برنامه‌ریزی (FPGAها)

FPGAها دستگاههای نیمه‌هادی هستند که بر اساس یک ماتریس از بلوکهای منطقی قابل پیکربندی (CLBها) متصل از طریق اتصالات قابل برنامه‌ریزی ساخته شده‌اند. FPGAها میتوانند پس از ساخت به نیازهای کاربرد یا عملکرد مورد نظر برنامه‌ریزی مجدد شوند، که گزینه انعطاف‌پذیرتری نسبت به ASICها ارائه میدهد. آنها به طور معمول در هوافضا و دفاع، نمونه‌سازی ASIC، تصویربرداری پزشکی واینجا ترجمه فارسی فایل مارک‌داون است:

مدارهای مجتمع اختصاصی برنامه‌ای (ASIC)

ASIC‌ها مدارهای مجتمع سفارشی‌سازی شده برای یک استفاده خاص هستند، نه برای استفاده عمومی مانند پردازنده‌های مرکزی. ASIC‌های مدرن اغلب شامل یک پردازنده 32 یا 64 بیتی کامل، بلوک‌های حافظه شامل ROM، RAM، EEPROM، حافظه فلش و سایر بلوک‌های ساختمانی بزرگ هستند. ASIC‌ها به طور معمول در استخراج بیت‌کوین، شتاب‌دهنده‌های هوش مصنوعی، ارتباطات بی‌سیم 5G و دستگاه‌های اینترنت اشیا استفاده می‌شوند.

شتاب‌دهنده‌های هوش مصنوعی

شتاب‌دهنده‌های هوش مصنوعی چیپ‌های تخصصی هستند که برای افزایش سرعت بار کاری هوش مصنوعی، به ویژه آموزش و استنتاج شبکه‌های عصبی طراحی شده‌اند. نمونه‌هایی شامل واحدهای پردازش تنسور (TPU) گوگل، پردازنده‌های شبکه عصبی Nervana (NNP) اینتل و تعدادی از استارت‌آپ‌ها که چیپ‌های هوش مصنوعی را از ابتدا می‌سازند. این چیپ‌ها از ریاضیات دقت کاهش یافته، مدارهای ضرب ماتریس کارآمد و یکپارچگی نزدیک محاسبات و حافظه برای دستیابی به عملکرد بسیار بالاتر در هر وات نسبت به GPU‌ها یا CPU‌ها در بارهای کاری هوش مصنوعی استفاده می‌کنند.

واحدهای پردازش بینایی (VPU)

VPU‌ها چیپ‌های تخصصی هستند که برای شتاب‌دهی به بارهای کاری بینایی رایانه‌ای و پردازش تصویر طراحی شده‌اند. آنها اغلب شامل سخت‌افزار اختصاصی برای وظایفی مانند پردازش سیگنال تصویر، بینایی استریو و شناسایی شیء مبتنی بر CNN هستند. VPU‌ها به طور معمول در کاربردهایی مانند ADAS خودرو، پهپادها، هدست‌های AR/VR، دوربین‌های هوشمند و سایر دستگاه‌های لبه‌ای که به پردازش بصری با تأخیر کم نیاز دارند، استفاده می‌شوند.

چیپ‌های نورومورفیک و کوانتومی

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

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

مبانی سخت‌افزاری GPU

یک GPU مدرن از چندین مؤلفه سخت‌افزاری کلیدی تشکیل شده است:

Streaming Multiprocessors (SMs)

SM پایه‌ای ساختاری NVIDIA GPU است. هر SM شامل مجموعه‌ای از هسته‌های CUDA (معمولاً 64 تا 128) است که منطق کنترل و کش دستورالعمل را به اشتراک می‌گذارند. هر هسته CUDA دارای یک واحد منطقی حسابی (ALU) و واحد نقطه‌ای شناور (FPU) است که به طور کامل لوله‌ای هستند. معمولاً یک چیپ GPU بین 16 تا 128 SM دارد، که منجر به هزاران هسته CUDA می‌شود.

کش بافت/L1

هر SM یک کش بافت و کش L1 اختصاصی دارد تا عملکرد را بهبود بخشد و ترافیک حافظه را کاهش دهد. کش بافت برای بهینه‌سازی موضعیت فضایی طراحی شده است و برای بارهای کاری گرافیکی بسیار مؤثر است. کش L1 عملیات حافظه (بارگذاری، ذخیره) را مدیریت می‌کند و دسترسی سریع به داده با تأخیر کم را فراهم می‌کند.

حافظه اشتراکی

حافظه اشتراکی یک حافظه سریع و درون‌تراشه‌ای است که بین هسته‌های CUDA در یک SM به اشتراک گذاشته می‌شود. می‌توان از آن به عنوان یک کش قابل برنامه‌ریزی استفاده کرد، که باعث افزایش پهنای باند و کاهش تأخیر دسترسی به داده‌های مکرراً استفاده شده می‌شود. حافظه اشتراکی به ماژول‌های حافظه (بانک‌ها) با اندازه مساوی تقسیم شده است که می‌توانند به طور همزمان توسط هسته‌ها دسترسی پیدا کنند.

فایل ثبت

هر SM یک فایل ثبت بزرگ دارد که ذخیره‌سازی با تأخیر کم برای عملوندها را فراهم می‌کند. فایل ثبت بین رشته‌های مقیم در یک SM تقسیم می‌شود و به هر رشته مجموعه‌ای از ثبات‌های اختصاصی را ارائه می‌دهد. دسترسی به یک ثبات معمولاً صفر سیکل ساعت اضافی در هر دستورالعمل را می‌گیرد، اما تأخیرها ممکن است به دلیل وابستگی‌های خواندن-پس-از-نوشتن ثبات و تضاد بانک‌های حافظه ثبات رخ دهد.

زمان‌بند وارپ

زمان‌بند وارپ مسئول مدیریت و زمان‌بندی وارپ‌ها در یک SM است. وارپ یک گروه از 32 رشته است که به طور همزمان در هسته‌های CUDA اجرا می‌شوند.اینجا ترجمه فارسی فایل مارک‌داون است. برای کد، فقط نظرات را ترجمه کرده‌ایم، نه خود کد.

شبکه اینترکانکت

شبکه اینترکانکت SMs را به کش L2 مشترک و کنترلرهای حافظه GPU متصل می‌کند. معمولاً به صورت یک سوئیچ کراسبار پیاده‌سازی می‌شود که به چندین SM امکان دسترسی همزمان به کش L2 و DRAM را می‌دهد.

کنترلرهای حافظه

کنترلرهای حافظه تمام درخواست‌های خواندن و نوشتن به DRAM GPU را مدیریت می‌کنند. آنها مسئول بهینه‌سازی الگوهای دسترسی به DRAM برای حداکثر سازی استفاده از پهنای باند هستند. GPU‌های مدرن دارای رابط‌های DRAM بسیار پهن (256 بیت تا 4096 بیت) و پشتیبانی از فناوری‌های حافظه پرپهنای باند مانند GDDR6 و HBM2 هستند.

هسته‌های RT و هسته‌های Tensor

GPU‌های مدرن NVIDIA همچنین دارای واحدهای سخت‌افزاری تخصصی برای شتاب‌دهی به ردیابی پرتو (هسته‌های RT) و هوش مصنوعی/یادگیری عمیق (هسته‌های Tensor) هستند. هسته‌های RT شتاب‌دهی به عبور از سلسله‌مراتب جعبه‌های محیطی (BVH) و آزمون‌های برخورد پرتو-مثلث را انجام می‌دهند، در حالی که هسته‌های Tensor عملیات ضرب ماتریس و عملیات卐های卐 را با پهنای باند بالا فراهم می‌کنند.

این اجزای سخت‌افزاری با هم کار می‌کنند تا به GPU‌ها امکان دستیابی به پهنای باند محاسباتی و حافظه بسیار بالا را بدهند، که آنها را برای کارهای موازی در گرافیک، HPC و هوش مصنوعی مناسب می‌کند. معماری موازی بسیار بالا و واحدهای سخت‌افزاری تخصصی GPU‌های مدرن به آنها امکان می‌دهد که در برخی کارها عملکردی چندین برابر بیشتر از CPU‌های کلی‌منظوره ارائه دهند.

تاریخچه مختصری از GPU‌ها

تاریخچه GPU‌ها را می‌توان به روزهای اولیه شتاب‌دهی گرافیک سه‌بعدی در دهه 1990 بازگرداند:

  • دهه 1990: شتاب‌دهنده‌های سه‌بعدی اولیه مانند 3dfx Voodoo و NVIDIA RIVA TNT در اواسط دهه 1990 ظاهر شدند تا رندرینگ گرافیک سه‌بعدی را از CPU بردارند. این دستگاه‌ها دارای عملکرد ثابت و بهینه‌شده برای مجموعه خاصی از API‌های گرافیکی بودند و قابلیت برنامه‌پذیری نداشتند.

  • 1999: NVIDIA GeForce 256 را معرفی کرد، اولین GPU که عملیات تبدیل و نورپردازی (T&L) را در سخت‌افزار پیاده‌سازی کرد، به علاوه رندرینگ سه‌بعدی استاندارد.اینجا ترجمه فارسی فایل مارک‌داون است:

پایپلاین این می‌توانست 10 میلیون چندضلعی را در هر ثانیه پردازش کند، که یک دستاورد بزرگ در عملکرد گرافیک مصرف‌کننده بود.

  • 2001: NVIDIA GeForce 3 را راه‌اندازی کرد، که برنامه‌پذیری رأس و پیکسل را معرفی کرد و راه را برای جلوه‌های بصری واقع‌گرایانه‌تر و پویاتر باز کرد. این نقطه‌عطفی در انتقال از پایپلاین گرافیکی ثابت‌کارکرد به برنامه‌پذیر بود.

  • 2006: انتشار GeForce 8800 GTX از NVIDIA نقطه‌عطف مهمی بود، زیرا اولین GPU بود که از مدل برنامه‌نویسی CUDA پشتیبانی می‌کرد و به توسعه‌دهندگان امکان استفاده از GPU برای محاسبات عمومی (GPGPU) فراتر از گرافیک را می‌داد. این GPU 128 هسته CUDA داشت و می‌توانست بیش از 500 گیگافلاپس عملکرد ارائه دهد.

  • 2008: اپل، AMD، Intel و NVIDIA گروه کاری OpenCL را تشکیل دادند تا یک استاندارد باز برای برنامه‌نویسی موازی در سیستم‌های ناهمگن توسعه دهند. OpenCL جایگزین بدون وابستگی به تولیدکننده برای CUDA ارائه کرد، اگرچه CUDA همچنان پلتفرم GPGPU استفاده‌شده در سطح گسترده‌تری بود.

  • 2010: NVIDIA معماری Fermi را راه‌اندازی کرد که تا 512 هسته CUDA، سلسله‌مراتب حافظه کش یکپارچه L1/L2، پشتیبانی از حافظه ECC و بهبود عملکرد دقت دو را داشت. این GPUها را برای طیف گسترده‌تری از کاربردهای HPC و محاسبات علمی مناسب کرد.

  • 2016: NVIDIA معماری Pascal را با Tesla P100 معرفی کرد که حافظه HBM2 با پهنای باند بالا، تا 3584 هسته CUDA و هسته‌های تخصصی FP16 برای یادگیری عمیق داشت. P100 می‌توانست بیش از 10 ترافلاپس عملکرد ارائه دهد و GPUها را به عنوان پلتفرم انتخابی برای آموزش هوش مصنوعی تثبیت کرد.

  • 2018: NVIDIA معماری Turing را راه‌اندازی کرد که هسته‌های RT برای ردیابی پرتو در زمان واقعی و هسته‌های Tensor برای تسریع استنتاج هوش مصنوعی را معرفی کرد. Turing نقطه‌عطف مهمی در معماری GPU بود، زیرا قابلیت‌های GPU را فراتر از رسترسازی و GPGPU به تکنیک‌های پیشرفته رندرینگ و شتاب‌دهی هوش مصنوعی گسترش داد.

نتیجه‌گیری

در طول دو دهه گذشته، GPUها از شتاب‌دهنده‌های گرافیکی ثابت‌کارکرد به پردازنده‌های برنامه‌پذیر پیشرفته تکامل یافته‌اند.اینجا ترجمه فارسی فایل مارک‌داون است. برای کد، فقط نظرات را ترجمه کنید، نه کد را:

mmable، موتورهای محاسباتی کم‌مصرف انرژی که نقش بسیار مهمی در طیف گسترده‌ای از کاربردها از بازی‌ها و تصویرسازی تا محاسبات با عملکرد بالا و هوش مصنوعی ایفا می‌کنند. نوآوری‌های کلیدی معماری که این تحول را امکان‌پذیر کرده‌اند عبارتند از:

  • معرفی سایه‌پردازی برنامه‌پذیر با پشتیبانی از شاخه‌بندی و حلقه‌ها
  • معماری‌های شیدر یکپارچه که به همان واحدهای پردازشی اجازه می‌دهد برای انجام وظایف سایه‌پردازی مختلف استفاده شوند
  • افزودن پشتیبانی از مدل‌های برنامه‌نویسی کلی‌منظوره مانند CUDA و OpenCL
  • افزایش کارایی انرژی از طریق استفاده گسترده از چندرشته‌ای برای پنهان کردن تأخیر حافظه و نگه‌داشتن واحدهای حسابی مورد استفاده
  • بهبودهای مداوم در پهنای باند حافظه و معرفی فناوری‌های حافظه با پهنای باند بالا مانند GDDR6 و HBM2
  • ادغام واحدهای عملکرد ثابت برای ردیابی پرتو و پردازش تنسور برای تسریع رندرینگ و بارهای کاری هوش مصنوعی

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

در همین حال، کاربرد شتاب‌دهی GPU همچنان در حال گسترش است زیرا بیشتر و بیشتر بارهای کاری در محاسبات علمی، تحلیل داده‌ها و یادگیری ماشینی، نوع موازی‌سازی ظریف را که GPU‌ها در آن تبحر دارند، نشان می‌دهند. با توانایی آن‌ها در شتاب‌دهی این و سایر کاربردهای نوظهور، GPU‌ها در موقعیتی قرار دارند تا نقش فزاینده‌ای در محرک آینده پیشرفت‌های محاسباتی ایفا کنند. درک معماری آن‌ها کلید بالاتر بردن پتانسیل کامل آن‌ها است.