اگر از عیبیابی خطاهای Segmentation Fault در CUDA C++ خسته شدهاید، جریان کاری شما از امروز تغییر میکند. در ۱۶ ژوئن ۲۰۲۶، NVlabs سیستم cuTile Rust (cutile-rs) را منتشر کرد؛ سیستمی که امنیت سختگیرانه حافظه و پیشگیری از تداخل دادهها (Data-race prevention) در زبان راست را مستقیماً به برنامهنویسی کرنلهای GPU میآورد.
نوشتن کرنلهای GPU همیشه یک معاملهی دشوار بود: یا از C++ سطح پایین برای حداکثر سرعت استفاده میکردید و با ریسک خطاهای فاجعهبار حافظه دستوپنجه نرم میکردید، یا از انتزاعهای سطح بالا بهره میبردید که سرعت را میکشتند. cuTile Rust این دوگانگی را میشکند و نظم مالکیت (Ownership discipline) زبان راست را به آن سوی مرز اجرای GPU گسترش میدهد. طبق مستندات گیتهاب این پروژه، این سیستم تضمین میکند که تانسورهای تغییرپذیر پیش از اجرا به قطعات مجزا (Disjoint pieces) تقسیم شوند تا تداخل دادهها که کابوس توسعهدهندگان GPU است، کاملاً حذف شود.
همانطور که در تحلیلهای قبلی ما دربارهی امنیت مدلهای بازمتن اشاره کردیم، انتقال کنترلهای امنیتی به لایههای زیرین، پایداری کل سیستم را تضمین میکند. در این ابزار، استنتاج (Inference) — که شبیه لحظهی واقعی آشپزی است، نه دورهی آموزش آشپز — با سرعت حداکثری و بدون ترس از کرش کردن انجام میشود.
سازوکار فنی
این سیستم از یک خط لوله تخصصی برای تبدیل کد راست به ماشینکد با کارایی بالا استفاده میکند:
- ضبط AST: ماکروی
#[cutile::module]یک درخت نحو انتزاعی (AST) از کد راست را ضبط کرده و درون فایل باینری میزبان جایگذاری میکند. - کامپایل JIT: هنگام فراخوانی یک کرنل، cuTile Rust این AST را از طریق CUDA Tile IR به یک فایل cubin برای GPU تبدیل (JIT-compile) میکند.
- حفظ مالکیت: لانچرهای تولیدشده، مالکیت دادهها را هنگام اجرای عملیات در GPU حفظ میکنند. این قابلیت از اجرای همگام (Synchronous)، خط لولههای ناهمگام (Asynchronous pipelines) و بازپخش گرافهای CUDA (CUDA graph replay) پشتیبانی میکند.
معماری و جریان کاری
هدف cuTile Rust، کرنلهای مبتنی بر تایل (Tile-based) هستند که از طریق CUDA Tile IR پایین آورده میشوند. APIهای این سیستم بهطور خاص برای تقسیمبندی تانسورها و عملیاتهای متمرکز بر هستههای تانسور (Tensor-core-oriented) طراحی شدهاند. با این حال، در حالی که سیستم بر امنیت تأکید دارد، امکان Opt-out محلی برای توسعهدهندگانی که به کنترل سطح پایینتر روی سختافزار نیاز دارند، فراهم شده است.
ساختار پروژه به صورت یک Workspace شامل چندین کریت (Crate) مجزا برای تفکیک وظایف است:
cutile: کریت اصلی و کاربر-محور برای نوشتن و اجرای کرنلهای تایل.cutile-compiler: مدیریت کامپایل کرنلهای راست به فایلهای اجرایی با استفاده ازcutile-ir(که یک سازنده Pure Rust برای Tile IR و نویسنده بایتکد است).cuda-async: ارائه قابلیت اجرای ناهمگام CUDA از طریق Async Rust.cuda-coreوcuda-bindings: ارائه یک API امن و اصیل (Idiomatic) برای CUDA و همچنین رابطهای زیرساختی (Bindings) به NVIDIA CUDA.
بنچمارکهای عملکرد
به نقل از گزارشهای NVlabs، آزمایشها روی NVIDIA B200 نشان میدهد که امنیت حافظه لزوماً به معنای کاهش سرعت نیست. پروژه معیارهای زیر را گزارش کرده است:
- عملیاتهای تکعنصری (Element-wise): رسیدن به ۷ ترابایت بر ثانیه، که تقریباً ۹۱٪ از حداکثر پهنای باند حافظه است.
- ضرب ماتریسی (GEMM): دستیابی به ۲ پتافلاپس (PFlop/s)، معادل ۹۲٪ از توان حداکثری B200 در حالت f16 متراکم. این نتیجه به عنوان رقابتی با cuBLAS ذکر شده است.
- سربار امنیتی: میکرو-بنچمارکها نشان میدهند که GEMM امن و پایدار در راست، در ابعاد M=N=K=8192 به سرعت ۲.۰۷ پتافلاپس میرسد که تنها ۰.۳٪ با نسخهی سطح پایین Tile IR فاصله دارد.
کاربرد واقعی: پروژه Grout
برای اثبات کارایی و قابلیت اطمینان سیستم، NVlabs با همکاری Hugging Face موتور استنتاج Grout را برای مدل Qwen3 ساخت. نتایج نشاندهنده عملکرد رقابتی در سطح State-of-the-art در وظایف محدود به حافظه (Memory-bound) است، که توسط تحلیل HBM roofline اندازهگیری شده است:
- Qwen3-4B: رسیدن به ۱۷۱ توکن بر ثانیه روی NVIDIA GeForce RTX 5090 در حالت Decode با Batch-1.
- Qwen3-32B: رسیدن به ۸۲ توکن بر ثانیه روی B200.
الزامات و راهاندازی
برای شروع به GPU انویدیا با قابلیت Compute Capability sm_80 یا بالاتر نیاز دارید. تیم توسعه برای بهرهگیری از قابلیتهایی مثل FP4 packing و block-scaled MMA، استفاده از CUDA 13.3 را توصیه میکند. پشتیبانی از معماریها به شرح زیر است:
- sm_80: حداقل معماری پشتیبانیشده.
- sm_100+: پشتیبانی شده توسط CUDA 13.1+.
- sm_8x: پشتیبانی در CUDA 13.2 اضافه شده است.
- sm_90: پشتیبانی در CUDA 13.3 اضافه شده است.
این نرمافزار به Rust 1.89+ نیاز دارد و در حال حاضر روی Ubuntu 24.04 تست شده است. برای نصب ساده و سریع، پروژه یک Nix flake ارائه داده است که کتابخانههای درایور انویدیا را بهطور خودکار در هر دو سیستم NixOS و غیر NixOS شناسایی میکند.
تجربه توسعهدهنده
توسعهدهندگان میتوانند از امضاهای ساده برای توابع (مانند تابع add) استفاده کنند، جایی که نظم دسترسی مستقیماً در کد تعبیه شده است. برای مثال، تانسور خروجی تغییرپذیر z به عنوان یک خروجی انحصاری (Exclusive output) در نظر گرفته میشود، در حالی که تانسورهای x و y ورودیهای مشترک و فقطخواندنی (Shared read-only) هستند.
در یک پیادهسازی معمولی، کد میزبان عملیات تانسورهای تنبل (Lazy) را میسازد و خروجی تغییرپذیر را به تکههای کوچک (مثلاً تکههای ۱۲۸ عنصری) تقسیم میکند. سیستم بهطور خودکار شبکه اجرا (Launch Grid) را از روی تقسیمبندی استنتاج میکند؛ مثلاً برای یک تانسور ۱۰۲۴ عنصری که به تکههای ۱۲۸ تایی تقسیم شده، سیستم یک گرید (۸، ۱، ۱) را استنتاج میکند. این کار محاسبات دستی Thread Blockها را که منبع اصلی باگها در CUDA بود، کاملاً حذف میکند.
این تغییر یعنی «همروندی بدون ترس» (Fearless Concurrency) که راست در CPU به آن معروف است، حالا برای GPU هم فراهم شده است. با انتقال بررسیهای امنیتی به مرحلهی تقسیمبندی در میزبان، اجرای واقعی روی دستگاه سریع و سبک باقی میماند.
برای کسانی که از پایتون میآیند، cuTile Python تجربه مشابهی ارائه میدهد و TileGym الگوهای بهینهسازی (Tuning patterns) را برای کسانی که میخواهند آخرین قطرهی توان سختافزار را استخراج کنند، فراهم میکند. همچنین پروژه آزمایشی cuda-oxide به عنوان یک کامپایلر Rust-to-CUDA برای کرنلهای سبک SIMT در دسترس است.
گام بعدی شما
- اگر در حال توسعه کرنلهای LLM هستید، مقاله پژوهشی "Fearless Concurrency on the GPU" (نوشته Elibol و همکاران، ۲۰۲۶) را در arXiv بخوانید تا تحلیل کامل HBM roofline را ببینید.
- برای کاهش چرخهی عیبیابی، جایگزینی بخشهای حساس CUDA C++ با cuTile Rust را تست کنید.
- در صورت نیاز به بهینهسازیهای حداکثری، ابزار TileGym را بررسی کنید.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما دربارهی تراشههای Blackwell مراجعه کنید.




گفتگو