معماری پردازشگر گرافیکی (GPU)
واحد پردازشگر گرافیکی (GPU) یک پردازشگر با توان عملیاتی بالا و موازیسازی گسترده است که از هستههای ساده متعدد ساخته شده است. این واحد هزاران رشته (thread) را برای پنهان کردن تأخیر حافظه اجرا میکند، که در ابتدا برای گرافیک و اکنون به طور گسترده برای محاسبات عمومی و یادگیری ماشین استفاده میشود.
Definition
معماری GPU یک طراحی پردازشگر بسیار موازی است که از هستههای سبکوزن متعدد تشکیل شده است. این هستهها در چندپردازندهها گروهبندی شدهاند و تعداد زیادی رشته را در گروههای همگام اجرا میکنند. این معماری برای توان عملیاتی محاسباتی بالا و پنهان کردن تأخیر بهینه شده است، نه برای سرعت تک رشتهای.
Scope
این موضوع سازماندهی سختافزاری GPU را پوشش میدهد: چندپردازندههای جریانی (streaming multiprocessors)، مدل اجرای تک دستورالعمل چند رشتهای (SIMT)، وارپها (warps) و بلوکهای رشتهای (thread blocks)، سلسلهمراتب حافظه شامل ثباتها (registers)، حافظه مشترک (shared memory) و حافظه سراسری (global memory)، و چگونگی پنهان کردن تأخیر توسط GPU از طریق چندرشتهایسازی گسترده. این موضوع GPUها را به عنوان معماری موازی بررسی میکند. این شامل افزونههای SIMD پردازنده مرکزی (SIMD و پردازندههای برداری) و چارچوبهای نرمافزاری برای برنامهنویسی GPU فراتر از پیامدهای معماری نمیشود.
Core questions
- چگونه GPUها با هستههای ساده متعدد به جای تعداد کمی هسته پیچیده، به توان عملیاتی بالا دست مییابند؟
- مدل اجرای تک دستورالعمل چند رشتهای (SIMT) چیست و وارپها چگونه کار میکنند؟
- چگونه چندرشتهایسازی گسترده تأخیر حافظه را پنهان میکند؟
- سلسلهمراتب حافظه GPU برای بارهای کاری موازی چگونه سازماندهی شده است؟
Key concepts
- چندپردازنده جریانی
- تک دستورالعمل چند رشتهای (SIMT)
- وارپها و بلوکهای رشتهای
- چندرشتهایسازی گسترده
- پنهان کردن تأخیر
- حافظه مشترک، سراسری و ثبات
- تجمیع حافظه
- طراحی مبتنی بر توان عملیاتی
Key theories
- پنهان کردن تأخیر از طریق چندرشتهایسازی گسترده
- به جای به حداقل رساندن تأخیر برای یک رشته، یک GPU هزاران رشته را در حال اجرا نگه میدارد و هر زمان که برخی از آنها در حافظه متوقف میشوند، بین گروههای آماده سوئیچ میکند، بنابراین موازیسازی فراوان، واحدهای محاسباتی متعدد را مشغول نگه میدارد و تأخیرهای طولانی حافظه را پنهان میکند.
Mechanisms
یک GPU از چندین چندپردازنده جریانی تشکیل شده است که هر یک گروههایی از رشتهها (وارپها) را به صورت همگام تحت مدل SIMT اجرا میکنند. رشتهها در بلوکهایی سازماندهی میشوند که حافظه سریع روی تراشه را به اشتراک میگذارند و به صورت محلی همگامسازی میشوند. سختافزار بسیاری از وارپها را زمانبندی میکند و با سربار تقریباً صفر بین آنها سوئیچ میکند، بنابراین هنگامی که یک وارپ منتظر حافظه است، وارپ دیگری اجرا میشود و واحدهای محاسباتی را مشغول نگه میدارد؛ الگوهای دسترسی به حافظه تجمیعشده (coalesced) استفاده از پهنای باند را به حداکثر میرساند.
Clinical relevance
GPUها در محاسبات با کارایی بالا و هوش مصنوعی محوری شدهاند: طراحی آنها که بر توان عملیاتی متمرکز است، آنها را به پلتفرم غالب برای آموزش و اجرای شبکههای عصبی عمیق، و همچنین برای شبیهسازی علمی و تحلیل دادهها تبدیل کرده است. معماری آنها به الگوریتمهای موازی داده و دسترسی تجمیعشده به حافظه پاداش میدهد و نحوه نوشتن نرمافزارهای حیاتی برای عملکرد را شکل میدهد.
History
GPUها از خطوط لوله گرافیکی با عملکرد ثابت در دهه ۱۹۹۰ به سایهزنهای قابل برنامهریزی و سپس به پردازندههای چند هستهای کاملاً قابل برنامهریزی تکامل یافتند. معرفی چارچوبهای محاسباتی GPU عمومی در اواخر دهه ۲۰۰۰ آنها را برای بارهای کاری علمی و دادهای باز کرد، و توان عملیاتی آنها آنها را به موتور عصر یادگیری عمیق از دهه ۲۰۱۰ به بعد تبدیل کرد.
Debates
- عمومیت GPU در مقابل شتابدهندههای تخصصی
- GPUها موتورهای انعطافپذیر با توان عملیاتی بالا هستند، اما شتابدهندههای تخصصیتر (مانند واحدهای تنسور و ماتریس) کارایی بالاتری را برای بارهای کاری خاص ارائه میدهند؛ طراحان قابلیت برنامهریزی و کاربرد گسترده GPU را در مقابل کارایی سختافزار اختصاصی میسنجند.
Key figures
- David B. Kirk
- Wen-mei Hwu
- John L. Hennessy
- David A. Patterson
Related topics
Seminal works
- hennessy2019
- kirk2016
Frequently asked questions
- چرا GPUها برای یادگیری عمیق بسیار مناسب هستند؟
- آموزش و اجرای شبکههای عصبی عمدتاً شامل عملیات ماتریسی و تنسوری متراکم با موازیسازی داده فراوان است. هستههای متعدد و پهنای باند حافظه بالای یک GPU این عملیات را با توان عملیاتی بسیار بالا اجرا میکنند که در چنین بارهای کاری منظم و موازی، بسیار فراتر از پردازندههای مرکزی عمومی است.
- وارپ در اجرای GPU چیست؟
- وارپ گروهی از رشتهها (معمولاً ۳۲) است که تحت مدل SIMT، یک دستورالعمل یکسان را به صورت همگام اجرا میکنند. گروهبندی رشتهها در وارپها به سختافزار اجازه میدهد تا کنترل دستورالعمل را در بین بسیاری از عناصر داده تقسیم کند، اگرچه شاخههای واگرا در یک وارپ کارایی را کاهش میدهند.