چگونه چیپ GPU طراحی کنیم
Chapter 4 Gpu Memory System Design

فصل 4: طراحی سیستم حافظه GPU

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

ساختارهای حافظه سطح اول

ساختارهای حافظه سطح اول در یک GPU مسئول ارائه دسترسی سریع به داده های مورد استفاده مکرر و کاهش تعداد دسترسی ها به سطوح پایین تر سلسله مراتب حافظه هستند. این ساختارها معمولاً شامل حافظه اسکرچ پد، حافظه نهان L1 داده و حافظه نهان L1 بافت هستند.

حافظه اسکرچ پد و حافظه نهان L1 داده

حافظه اسکرچ پد، که در مدل برنامه نویسی CUDA NVIDIA به عنوان حافظه مشترک شناخته می شود یا در OpenCL به عنوان حافظه محلی شناخته می شود، یک فضای حافظه با تأخیر کم و مدیریت شده توسط نرم افزار است که توسط تمام رشته ها در یک آرایه رشته همکار (CTA) یا گروه کاری به اشتراک گذاشته می شود. حافظه اسکرچ پد معمولاً با استفاده از یک ساختار SRAM بانکی پیاده سازی می شود تا دسترسی موازی توسط چندین رشته را امکان پذیر کند.

شکل 4.1 یک سازماندهی حافظه نهان L1 داده و حافظه اسکرچ پد یکپارچه را نشان می دهد، مشابه با طراحی مورد استفاده در معماری های Fermi و Kepler NVIDIA [Minkin et al., 2012].

                                    آدرس کراسبار
                                          |
                                          v
                        آرایه داده (قابل پیکربندی به عنوان اسکرچ پد یا حافظه نهان)
                                          |
                                          v  
                                    کراسبار داده
                                          |
                                          v
                                 واحد بارگذاری/ذخیره
```اینجا ترجمه فارسی فایل مارک‌داون داده شده است. برای کد، فقط نظرات ترجمه شده‌اند و خود کد ترجمه نشده است.

شکل 4.1: سازماندهی حافظه پشتیبان و حافظه کش داده L1 یکپارچه.

اجزای کلیدی این طراحی عبارتند از:

1. **آرایه داده**: ساختار SRAM با بانک‌های زیاد که می‌تواند به عنوان حافظه پشتیبان یا حافظه کش داده L1 پیکربندی شود. هر بانک 32 بیت عرض دارد و دکدر مستقل برای دسترسی مستقل دارد.

2. **صلیب‌آرایی آدرس**: آدرس‌های حافظه را از واحد بارگذاری/ذخیره به بانک‌های مناسب در آرایه داده توزیع می‌کند.

3. **صلیب‌آرایی داده**: داده را از بانک‌ها به واحد بارگذاری/ذخیره هدایت می‌کند، که سپس داده را به فایل ثبت می‌نویسد.

4. **واحد بارگذاری/ذخیره**: آدرس‌های حافظه را محاسبه می‌کند، قوانین ادغام را اعمال می‌کند و دسترسی‌های حافظه را به دسترسی‌های ادغام شده فردی تقسیم می‌کند.

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

حافظه کش داده L1 برای ذخیره بخشی از فضای آدرس حافظه جهانی استفاده می‌شود. دسترسی‌ها به حافظه کش داده L1 شامل جستجوی برچسب برای تعیین اینکه آیا داده درخواست شده موجود است یا خیر. اندازه بلوک کش 128 بایت است که می‌تواند به بخش‌های 32 بایتی تقسیم شود تا با حداقل اندازه داده که می‌تواند در یک دسترسی از DRAM گرافیکی (مانند GDDR5) خوانده شود، مطابقت داشته باشد.

### حافظه کش بافت L1

حافظه بافت یک فضای حافظه فقط‌خواندنی است که برای محلیت فضایی بهینه‌سازی شده و معمولاً در کارهای گرافیکی استفاده می‌شود. حافظه کش بافت L1 طراحی شده است تا محلیت فضایی 2D موجود در دسترسی‌های بافت را بهره‌برداری کند.

شکل 4.2 یک سازماندهی حافظه کش بافت L1 معمول را نشان می‌دهد.فایل مارک‌داون زیر را به فارسی ترجمه کنید. برای کد، فقط توضیحات را ترجمه کنید، نه کد:

                                  |
                                  v
                           پردازش تصویر بافت
                                  |
                                  v
                           بافت‌های فیلتر شده

شکل 4.2: سازماندهی کش بافت L1.

اجزای اصلی کش بافت L1 عبارتند از:

  1. نگاشت آدرس: تبدیل مختصات بافت به آدرس‌های کش.

  2. آرایه برچسب: ذخیره برچسب‌های هر خط کش برای تعیین اینکه داده درخواست شده موجود است یا خیر.

  3. آرایه داده: ذخیره داده‌های بافت واقعی.

  4. پردازش تصویر بافت: انجام عملیات درون‌یابی و فیلترینگ بر روی داده‌های بافت بازیابی شده برای تولید بافت‌های فیلتر شده نهایی.

کش بافت L1 معمولاً از سازماندهی مبتنی بر تایل برای بهره‌گیری از محلیت فضایی استفاده می‌کند. کش به تایل‌های کوچک‌تر (مثلاً 4x4 یا 8x8 بافت) تقسیم می‌شود و هر تایل به صورت پیوسته ذخیره می‌شود تا تعداد خطوط کش دسترسی یافته برای یک بازیابی بافت داده کاهش یابد.

کش داده و بافت یکپارچه

معماری‌های اخیر GPU، مانند Maxwell و Pascal نویدیا، یک کش داده و بافت یکپارچه را معرفی کرده‌اند تا بهره‌وری کش را بهبود بخشند و اثر کلی کش را کاهش دهند [Heinrich et al., 2017]. در این طراحی، کش داده L1 و کش بافت L1 به یک کش فیزیکی واحد ادغام می‌شوند، با قابلیت تخصیص پویای ظرفیت بین آن‌ها بر اساس نیازهای بار کاری.

شکل 4.3 سازماندهی کش داده و بافت یکپارچه را نشان می‌دهد.

                                درخواست‌های حافظه
                                       |
                                       v
                                  کنترلر کش
                                 /             \
                                /               \
                               /                 \
                              v                   v
                      بخش کش داده   بخش کش بافت
                              |اینجا ترجمه فارسی فایل مارک‌داون داده شده است:

شکل ۴.۳: سازمان‌دهی متحد کش داده و بافت.

اجزای اصلی طراحی کش متحد عبارتند از:

۱. **کنترلر کش**: دریافت درخواست‌های حافظه و تعیین اینکه آیا باید توسط بخش کش داده یا بخش کش بافت پردازش شوند.

۲. **بخش کش داده**: مدیریت دسترسی‌ها به فضای حافظه جهانی، مشابه با کش داده L1 مستقل.

۳. **بخش کش بافت**: مدیریت دسترسی‌های حافظه بافت، مشابه با کش بافت L1 مستقل.

۴. **آرایه داده**: یک آرایه داده مشترک که هم داده‌های حافظه جهانی و هم داده‌های بافت را ذخیره می‌کند.

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

## شبکه ارتباطی درون‌تراشه

شبکه ارتباطی درون‌تراشه مسئول اتصال هسته‌های GPU (که به عنوان چندپردازنده‌های جریان یا واحدهای محاسباتی نیز نامیده می‌شوند) به واحدهای بخش حافظه است. اینترکانکت باید پهنای باند بالا و تأخیر پایین را برای پشتیبانی از موازی‌سازی گسترده در بارهای کاری GPU فراهم کند.

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

شکل ۴.۴ نمونه‌ای از اینترکانکت شبکه در یک GPU را نشان می‌دهد.

هسته هسته هسته هسته | | | |
—— —— —— —— | |

        هسته   هسته   هسته   هسته
         |      |      |      |
        ——     ——     ——     ——  
         |      |      |      |
        هسته   هسته   هسته   هسته
         |      |      |      |
        ——     ——     ——     ——
         |      |      |      |  
        حافظه  حافظه  حافظه  حافظه
        بخش   بخش   بخش   بخش

شکل 4.4: شبکه مش در یک GPU.

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

واحد بخش حافظه

واحد بخش حافظه مسئول رسیدگی به درخواست های حافظه از هسته های GPU و مدیریت DRAM خارج از چیپ است. هر بخش حافظه معمولاً شامل یک حافظه پنهان L2، پشتیبانی از عملیات اتمی و یک برنامه ریز دسترسی به حافظه است.

حافظه پنهان L2

حافظه پنهان L2 یک حافظه پنهان مشترک است که بین هسته های GPU و DRAM خارج از چیپ قرار دارد. هدف اصلی آن کاهش تعداد دسترسی ها به DRAM با انرژی بالا و تأخیر بالا با ذخیره سازی داده های دسترسی مکرر است.

حافظه پنهان L2 GPU معمولاً به عنوان یک حافظه پنهان نویس برگشت پذیر با ظرفیت بالا (مثلاً 2-4 مگابایت) و پهنای باند بالا طراحی شده است. حافظه پنهان L2 در سراسر چندین بخش حافظه تقسیم می شود تا دسترسی موازی و بهبود پهنای باند را امکان پذیر کند.

شکل 4.5 سازماندهی یک حافظه پنهان L2 در یک بخش حافظه GPU را نشان می دهد.

                            درخواست های حافظه
                                   |
                                   v
                             کنترلر حافظه پنهان L2
                                   |
                                   v
                              آرایه برچسب
                                   |
                                   v
                              آرایه داده
                                   |
                                   v
                             برنامه ریز حافظه
```اینجا ترجمه فارسی فایل مارک‌داون داده شده است. برای کد، فقط نظرات ترجمه شده‌اند و خود کد تغییر نکرده است.

شکل 4.5: سازماندهی کش L2 در یک بخش حافظه GPU.

کنترلر کش L2 درخواست‌های حافظه را از هسته‌های GPU دریافت می‌کند و آرایه برچسب را بررسی می‌کند تا تعیین کند آیا داده درخواست‌شده در کش موجود است یا خیر. در صورت وجود در کش (cache hit)، داده از آرایه داده بازیابی و به هسته درخواست‌کننده ارسال می‌شود. در صورت عدم وجود در کش (cache miss)، درخواست به برنامه‌ریز حافظه ارسال می‌شود که سپس داده را از DRAM بازیابی می‌کند.

عملیات اتمی

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

عملیات اتمی معمولاً در واحدهای بخش حافظه پیاده‌سازی می‌شوند تا اجرای با تأخیر کم و پهنای باند بالا را تضمین کنند. واحدهای سخت‌افزاری اختصاصی مانند واحدهای عملیات اتمی (AOUs) برای مدیریت کارآمد درخواست‌های اتمی استفاده می‌شوند.

شکل 4.6 نمونه‌ای از یک واحد عملیات اتمی در یک بخش حافظه GPU را نشان می‌دهد.

                            درخواست‌های اتمی
                                   |
                                   v
                          واحد عملیات اتمی
                                   |
                                   v
                            کش L2/DRAM

شکل 4.6: واحد عملیات اتمی در یک بخش حافظه GPU.

AOU درخواست‌های اتمی را از هسته‌های GPU دریافت می‌کند و عملیات درخواست‌شده را بر روی موقعیت حافظه هدف انجام می‌دهد. اگر موقعیت حافظه در کش L2 موجود باشد، AOU داده کش را مستقیماً به‌روز می‌کند. اگر موقعیت حافظه در کش ذخیره نشده باشد، AOU داده را از DRAM بازیابی می‌کند، عملیات اتمی را انجام می‌دهد و سپس نتیجه را به DRAM بازمی‌نویسد.

برنامه‌ریز دسترسی به حافظه

برنامه‌ریز دسترسی به حافظه مسئول مدیریت جریاناینجا ترجمه فارسی فایل مارک‌داون داده شده است:

درخواست‌های حافظه به DRAM خارج از چیپ. هدف اصلی آن بیشینه‌سازی استفاده از پهنای باند DRAM در حالی که کمینه‌سازی تأخیر دسترسی به حافظه است.

برنامه‌ریزان حافظه GPU از الگوریتم‌های برنامه‌ریزی مختلف و بهینه‌سازی‌ها برای دستیابی به عملکرد بالا استفاده می‌کنند. برخی از تکنیک‌های رایج عبارتند از:

  1. برنامه‌ریزی خارج از ترتیب: مرتب‌سازی مجدد درخواست‌های حافظه برای بیشینه‌سازی اصابت‌های بافر ردیف و کمینه‌سازی هزینه پیش‌شارژ و فعال‌سازی DRAM.

  2. موازی‌سازی سطح بانک: بهره‌گیری از موازی‌سازی موجود در میان چندین بانک DRAM برای فعال‌سازی دسترسی همزمان به مناطق حافظه مختلف.

  3. بهینه‌سازی تغییر جهت نوشتن به خواندن: کمینه‌سازی تأخیر ناشی از تغییر بین عملیات نوشتن و خواندن در DRAM.

  4. چیدمان آدرس: توزیع دسترسی‌های حافظه در میان کانال‌ها، رتبه‌ها و بانک‌های مختلف برای بیشینه‌سازی موازی‌سازی و اجتناب از رقابت.

شکل 4.7 نمای کلی از یک برنامه‌ریز دسترسی به حافظه در یک بخش حافظه GPU را نشان می‌دهد.

                            درخواست‌های حافظه
                                   |
                                   v
                           برنامه‌ریز حافظه
                                   |
                                   v
                    کانال   کانال   کانال   کانال
                      |         |         |         |
                      v         v         v         v
                    رتبه      رتبه      رتبه      رتبه
                      |         |         |         |
                      v         v         v         v  
                    بانک      بانک      بانک      بانک

شکل 4.7: برنامه‌ریز دسترسی به حافظه در یک بخش حافظه GPU.

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

تحقیقبه عنوان معماری های GPU همچنان در حال تکامل هستند و تقاضاهای بار کاری موازی رو به افزایش است، چندین جهت تحقیقاتی به منظور بهبود عملکرد و کارایی سیستم های حافظه GPU وجود دارد. برخی از حوزه های تحقیقاتی کلیدی شامل موارد زیر است:

###排程存取内存和互连网络设计 随着GPU中核心数量和内存分区的不断增加,内存访问调度程序和互连网络的设计对于实现高性能至关重要。这一领域的研究集中在开发新颖的调度算法和互连拓扑,以有效处理GPU工作负载的大规模并行性和复杂的内存访问模式。

例如,Jia等人[2012]提出了一种称为"分阶段内存调度"(SMS)的内存调度算法,旨在提高DRAM银行级并行性并减少内存访问延迟。SMS将内存请求队列划分为两个阶段:批处理形成和批处理调度。在批处理形成阶段,请求根据它们的银行和行地址进行分组,以利用行局部性。在批处理调度阶段,根据批次的年龄和关键性对批次进行优先级排序,以确保公平性并减少停顿。

另一个例子是Kim等人[2012]的工作,他们为GPU提出了一种高带宽内存(HBM)架构。HBM将多个DRAM芯片堆叠在彼此之上,并通过硅通孔(TSV)进行连接,从而相比传统的GDDR内存实现了更高的带宽和更低的延迟。作者还提出了一种新颖的内存控制器设计,可以有效管理HBM的增加的并行性和复杂性。

缓存有效性

GPU采用各种缓存机制来减少离线内存访问的数量并提高性能。然而,这些缓存的有效性可能会根据工作负载的特性和缓存设计而显著不同。اینجا ترجمه فارسی فایل مارک‌داون داده شده است. برای کد، تنها توضیحات را ترجمه کرده‌ایم و خود کد را ترجمه نکرده‌ایم.

تحقیقات در این زمینه به دنبال بهبود اثربخشی کش‌های GPU از طریق تکنیک‌هایی مانند دور زدن کش، فشرده‌سازی کش و مدیریت تطبیقی کش هستند.

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

مثال دیگر کار Vijaykumar و همکاران [2015] است که یک معماری کش فشرده برای GPU‌ها پیشنهاد می‌کند. نویسندگان مشاهده کردند که بسیاری از برنامه‌های GPU دارای افزونگی داده قابل توجهی هستند که می‌توان از آن برای افزایش ظرفیت موثر کش‌ها استفاده کرد. آنها یک طرح فشرده‌سازی جدید پیشنهاد می‌دهند که می‌تواند نسبت‌های فشرده‌سازی بالایی را با حداقل هزینه تاخیر به دست آورد.

اولویت‌بندی درخواست‌های حافظه و دور زدن کش

در GPU‌ها، درخواست‌های حافظه از وارپ‌ها و رشته‌های مختلف می‌توانند سطوح متفاوتی از بحرانی بودن و تأثیر بر عملکرد کلی داشته باشند. اولویت‌بندی درخواست‌های بحرانی و دور زدن درخواست‌های غیربحرانی می‌تواند به کاهش تأخیر حافظه و بهبود استفاده از منابع کمک کند.

تحقیقات در این زمینه به دنبال تکنیک‌هایی برای شناسایی و اولویت‌بندی درخواست‌های حافظه بحرانی، همچنین مکانیزم‌هایی برای دور زدن انتخابی کش‌ها هستند.

به عنوان مثال، Jog و همکاران [2013] یک طرح اولویت‌بندی درخواست‌های حافظه به نام "شتاب‌دهی وارپ آگاه از بحرانی بودن" (CAWA) پیشنهاد می‌کنند. CAWA وارپ‌های بحرانی که احتمالاً خط‌لوله را متوقف می‌کنند را شناسایی کرده و درخواست‌های حافظه آنها را نسبت به وارپ‌های غیربحرانی اولویت می‌دهد. این طرح از ترکیبی از اطلاعات ایستا و پویا مانند تعداد دستورات وابسته و سن وارپ برای تعیین بحرانی بودن استفاده می‌کند.

Lee و همکاران [2015] یک طرح دور زدن کش برای GPU‌ها پیشنهاد می‌کنند که به دنبال کاهش آلودگی کش و بهبود به موقع بودن دسترسی‌های حافظه است. این طرح از یک ابزار مبتنی بر PC برای تعیین اینکه کدام درخواست‌های حافظه باید در کش ذخیره شوند و کدام باید دور زده شوند، استفاده می‌کند.اینجا ترجمه فارسی فایل مارک‌داون است. برای کد، فقط توضیحات را ترجمه کرده‌ام و خود کد را ترجمه نکرده‌ام:

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

بهره‌برداری از ناهمگنی بین وارپ‌ها

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

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

به عنوان مثال، Kayıran و همکاران [2014] یک طرح مدیریت کش آگاه از تفاوت وارپ را پیشنهاد می‌دهند که به طور پویا سیاست‌های تخصیص و جایگزینی کش را بر اساس ویژگی‌های تفاوت هر وارپ تطبیق می‌دهد. وارپ‌های با تفاوت بالا به منابع کش بیشتری اختصاص داده می‌شوند تا تفاوت حافظه را کاهش دهند، در حالی که وارپ‌های با تفاوت کم به منابع کمتری اختصاص داده می‌شوند تا بهره‌وری کش بهبود یابد.

مثال دیگر کار Sethia و همکاران [2015] است که طراحی کنترلر حافظه‌ای را پیشنهاد می‌دهد که از ناهمگنی بین وارپ‌ها برای بهبود موازی‌سازی سطح بانک DRAM بهره می‌برد. نویسندگان مشاهده می‌کنند که وارپ‌های مختلف می‌توانند درجات متفاوتی از موازی‌سازی سطح بانک داشته باشند و یک الگوریتم زمان‌بندی حافظه آگاه از وارپ را پیشنهاد می‌دهند که وارپ‌های با موازی‌سازی سطح بانک بالا را اولویت می‌دهد تا تداخل حافظه را کاهش داده و پهنای باند سیستم را بهبود بخشد.

دور زدن هماهنگ شده کش

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

تحقیق در این زمینه تکنیک‌هایی را بررسی می‌کند کهاینجا ترجمه فارسی فایل مارک‌داون است. برای کد، فقط نظرات را ترجمه کرده‌ایم:

برای هماهنگ کردن تصمیمات دور زدن کش در سراسر GPU به منظور بهبود عملکرد کلی سیستم و استفاده از منابع.

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

مدیریت کش سازگار

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

تحقیقات در این زمینه تکنیک‌هایی را برای تطبیق پذیری پویای پیکربندی کش و سیاست‌های مدیریت آن بر اساس رفتار زمان اجرای برنامه کاربردی بررسی می‌کند.

به عنوان مثال، Wang و همکاران [2016] یک طرح مدیریت کش سازگار برای GPU پیشنهاد می‌دهند که به طور پویا اندازه بخش‌های کش و سیاست‌های جایگزینی را بر اساس الگوهای دسترسی به حافظه برنامه کاربردی تنظیم می‌کند. این طرح از ترکیبی از تکنیک‌های سخت‌افزاری و نرم‌افزاری برای پایش رفتار کش و انجام تنظیمات پویا به منظور بهبود استفاده از کش و عملکرد استفاده می‌کند.

مثال دیگر کار Dai و همکاران [2018] است که یک رویکرد مبتنی بر یادگیری ماشین برای مدیریت سازگار کش در GPU پیشنهاد می‌دهد. نویسندگان از یادگیری تقویتی برای یادگیری خودکار پیکربندی بهینه کش برای هر برنامه کاربردی بر اساس رفتار زمان اجرای آن استفاده می‌کنند. سیاست‌های یاد گرفته شده سپس با استفاده از یک معماری کش قابل پیکربندی که می‌تواند با نیازهای خاص هر برنامه کاربردی تطبیق پیدا کند، پیاده‌سازی می‌شوند.

اولویت‌بندی کش

در GPU، انواع مختلفی ازاینجا ترجمه فارسی فایل مارک‌داون است:

درخواست‌های حافظه مانند بارگیری، ذخیره‌سازی و درخواست‌های بافت می‌توانند نیازهای مختلفی در مورد تأخیر و پهنای باند داشته باشند. اولویت‌بندی برخی از انواع درخواست‌ها بر روی دیگران می‌تواند به بهبود عملکرد کلی سیستم و استفاده بهینه از منابع کمک کند.

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

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

جایگذاری صفحه حافظه مجازی

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

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

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

مثال دیگر کار Ganguly و همکاران [2019] است که یک طرح مدیریت حافظه مجازی برای GPU‌ها پیشنهاد می‌دهد که هدف آن کاهش هزینه ترجمه آدرس است. این طرح از ترکیبی از تکنیک‌های سخت‌افزاری و نرم‌افزاری استفاده می‌کند.اینجا ترجمه فارسی فایل مارک‌داون ارائه شده است. برای کد، تنها توضیحات را ترجمه کرده‌ایم، نه خود کد.

جایگذاری داده‌ها

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

تحقیقات در این زمینه به دنبال بررسی تکنیک‌های بهینه‌سازی جایگذاری داده‌ها در GPU‌ها بر اساس الگوهای دسترسی به حافظه و نیازهای منابع برنامه کاربردی هستند.

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

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

GPU‌های چند-تراشه‌ای

با افزایش نیازهای عملکرد و توان GPU‌ها، طراحی‌های تک‌تراشه‌ای سنتی ممکن است نتوانند با این تقاضا همگام شوند. طراحی‌های چند-تراشه‌ای (MCM)، که در آن چندین تراشه GPU در یک بسته واحد ادغام می‌شوند، به عنوان راه‌حل امیدوارکننده‌ای برای این مشکل ظهور کرده‌اند.

تحقیقات در این زمینه به بررسی طراحی و بهینه‌سازی GPU‌های MCM، از جمله معماری سیستم حافظه، طراحی اتصال‌ها و مدیریت منابع می‌پردازند.

به عنوان مثال، Arunkumar و همکاران [2017] یک طراحی GPU MCM را پیشنهاد می‌کنند که از یک اتصال با پهنای باند بالا و تأخیر کم برای اتصال چندین تراشه GPU استفاده می‌کند. همچنین، این نویسندگان یک معماری سیستم حافظه را پیشنهاد می‌کنند که ازاینجا ترجمه فارسی فایل مارک‌داون است:

این طرح MCM می‌تواند از افزایش پهنای باند و ظرفیت برای بهبود عملکرد و کارایی انرژی استفاده کند.

مثال دیگر کار Milic و همکاران [2018] است که یک طرح مدیریت منابع برای GPU های MCM پیشنهاد می‌دهد که هدف آن بهبود استفاده از منابع و کاهش بار ارتباطات بین‌چیپی است. این طرح از ترکیبی از تکنیک‌های سخت‌افزاری و نرم‌افزاری برای پایش استفاده از منابع و الگوهای ارتباطی برنامه و تصمیم‌گیری پویا در تخصیص منابع استفاده می‌کند.

نتیجه‌گیری

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

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

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