NVIDIA CCCL 3.1 کنترلهای قطعیت اعشاری را برای محاسبات GPU اضافه میکند
کارولین بیشاپ 1405/12/14 17:46
CCCL 3.1 شرکت NVIDIA سه سطح قطعیت را برای کاهشهای موازی معرفی میکند و به توسعهدهندگان اجازه میدهد عملکرد را با قابلیت تکرارپذیری در محاسبات GPU معاوضه کنند.
NVIDIA کنترلهای قطعیت را در کتابخانههای محاسباتی هسته CUDA (CCCL) نسخه 3.1 عرضه کرده است و به یک دغدغه مداوم در محاسبات موازی GPU پرداخته است: به دست آوردن نتایج یکسان از عملیات اعشاری در اجراهای متعدد و سختافزارهای مختلف.
این بهروزرسانی سه سطح قطعیت قابل پیکربندی را از طریق API تک فاز جدید CUB معرفی میکند و به توسعهدهندگان کنترل صریح بر معاوضه تکرارپذیری در مقابل عملکرد میدهد که سالهاست برنامههای GPU را آزار میداده است.
چرا قطعیت اعشاری مهم است
مشکل این است: جمع اعشاری کاملاً جابجایی نیست. به دلیل گرد کردن در دقت محدود، (a + b) + c همیشه برابر با a + (b + c) نیست. وقتی رشتههای موازی مقادیر را به ترتیب غیرقابل پیشبینی ترکیب میکنند، در هر اجرا نتایج کمی متفاوت به دست میآورید. برای بسیاری از برنامهها—مدلسازی مالی، شبیهسازیهای علمی، محاسبات بلاک چین، آموزش یادگیری ماشین—این عدم ثبات مشکلات واقعی ایجاد میکند.
API جدید به توسعهدهندگان اجازه میدهد دقیقاً مشخص کنند چقدر تکرارپذیری نیاز دارند از طریق سه حالت:
قطعیت تضمین نشده سرعت خام را در اولویت قرار میدهد. از عملیات اتمی استفاده میکند که به هر ترتیبی که رشتهها اجرا میشوند، کاهشها را در یک راهاندازی هسته واحد تکمیل میکند. نتایج ممکن است بین اجراها کمی متفاوت باشد، اما برای برنامههایی که پاسخهای تقریبی کافی است، بهبود عملکرد قابل توجه است—به ویژه در آرایههای ورودی کوچکتر که سربار راهاندازی هسته غالب است.
قطعیت اجرا به اجرا (پیشفرض) خروجیهای یکسان را هنگام استفاده از همان ورودی، پیکربندی هسته و GPU تضمین میکند. NVIDIA این کار را با ساختاردهی کاهشها به عنوان درختهای سلسله مراتبی ثابت به جای اتکا به اتمیکها انجام میدهد. عناصر ابتدا در داخل رشتهها ترکیب میشوند، سپس در سراسر warpها از طریق دستورالعملهای shuffle، سپس در سراسر بلوکها با استفاده از حافظه اشتراکی، با یک هسته دوم که نتایج نهایی را جمعآوری میکند.
قطعیت GPU به GPU سختگیرانهترین تکرارپذیری را فراهم میکند و نتایج یکسان را در GPUهای مختلف NVIDIA تضمین میکند. پیادهسازی از یک انباشتگر اعشاری قابل تکرار (RFA) استفاده میکند که مقادیر ورودی را در محدودههای توان ثابت گروهبندی میکند—به طور پیشفرض به سه بخش—برای مقابله با مسائل غیر جابجایی که هنگام جمع اعداد با مقادیر مختلف ایجاد میشود.
معاوضههای عملکرد
معیارهای NVIDIA در GPUهای H200 هزینه تکرارپذیری را کمی میکنند. قطعیت GPU به GPU زمان اجرا را 20٪ تا 30٪ برای اندازههای مسئله بزرگ در مقایسه با حالت آزاد افزایش میدهد. قطعیت اجرا به اجرا بین دو حد قرار دارد.
پیکربندی سه بخشی RFA آنچه را که NVIDIA "پیشفرض بهینه" مینامد ارائه میدهد که دقت و سرعت را متعادل میکند. بخشهای بیشتر دقت عددی را بهبود میبخشند اما جمعهای میانی را اضافه میکنند که اجرا را کند میکنند.
جزئیات پیادهسازی
توسعهدهندگان از طریق cuda::execution::require() به کنترلهای جدید دسترسی پیدا میکنند، که یک شیء محیط اجرا را میسازد که به توابع کاهش منتقل میشود. نحو ساده است—قطعیت را به not_guaranteed، run_to_run یا gpu_to_gpu بسته به نیازها تنظیم کنید.
این ویژگی فقط با API تک فاز CUB کار میکند؛ API قدیمی دو فاز محیطهای اجرا را نمیپذیرد.
پیامدهای گستردهتر
تکرارپذیری اعشاری بین پلتفرمی یک چالش شناخته شده در محاسبات با کارایی بالا و برنامههای بلاک چین بوده است، جایی که کامپایلرهای مختلف، پرچمهای بهینهسازی و معماریهای سختافزاری میتوانند نتایج متفاوتی از عملیات ریاضی یکسان تولید کنند. رویکرد NVIDIA در قرار دادن صریح قطعیت به عنوان یک پارامتر قابل پیکربندی به جای پنهان کردن جزئیات پیادهسازی، یک راهحل عملی را نشان میدهد.
شرکت قصد دارد کنترلهای قطعیت را فراتر از کاهشها به ابتداییهای موازی اضافی گسترش دهد. توسعهدهندگان میتوانند پیشرفت را دنبال کنند و الگوریتمهای خاص را از طریق مخزن GitHub شرکت NVIDIA درخواست کنند، جایی که یک مسئله باز نقشه راه قطعیت گسترده را دنبال میکند.
منبع تصویر: Shutterstock- nvidia
- محاسبات gpu
- cccl
- قطعیت اعشاری
- cuda


