انویدیا از توسعهی کیت ابزار CUDA Rust خبر داد که به زبان Rust امکان توسعهی هستههای در حال اجرا روی GPU را میدهد. این کیت ابزار، ایمنی حافظه را در زمان کامپایل تضمین کرده و از شرایط رقابتی جلوگیری میکند. قرار است سال آینده، CUDA Rust به سطحی مناسب برای پروژههای تولیدی، مشابه کیت ابزار CUDA C++ و CUDA Python، توسعه یابد.
زنجیره ابزار CUDA Rust از دو مدل برای توسعه هستههای موازی پشتیبانی میکند: SIMT (دستورالعمل واحد، چندین نخ) و Tile. مدل SIMT امکان تعریف سطح پایین یک نخ واحد، راهاندازی و مدیریت هزاران نخ از این نوع را فراهم میکند. مدل Tile سطح بالاتری از انتزاع را ارائه میدهد، که در آن به جای مدیریت صریح نخهای منفرد، الگوریتمهایی برای عملیات روی بلوکهای داده (کاشیها) تعریف میشوند و کامپایلر Tile IR تمام دستکاری نخها، همگامسازی دسترسی، مدیریت حافظه و توزیع دادهها در هستههای تانسور را مدیریت میکند.
برای توسعه در زبان Rust با استفاده از مدل SIMT، کامپایلر cuda-oxide در حال توسعه است که امکان کامپایل کد در زبان Rust را با استفاده از سیستم نوع استاندارد و مدل مالکیت Rust، مستقیماً به دستورالعملهایی برای اجرا در ... فراهم میکند. ماشین مجازی CUDA PTX (اجرای موازی نخ). هستههای GPU با Rust معمولی نوشته میشوند، اما در محیطی بدون std اجرا میشوند و فقط میتوانند از توابع کتابخانه libcore و انتزاعهای تخصصی Rust استفاده کنند، بدون دسترسی به کتابخانه استاندارد Rust (libstd).
هستههای CUDA که با زبان Rust نوشته شدهاند، امکان استفاده از محافظت از نوع (safe)، استفاده از بلوکهای unsafe و دسترسی به دستورالعملهای سختافزاری سطح پایین را فراهم میکنند. برای اطمینان از ایمنی، نوع DisjointSlice پیشنهاد شده است که تضمین میکند هر رشته فقط به دادههای خودش دسترسی انحصاری دارد. کد cuda-oxide تحت مجوز Apache 2.0 منتشر شده است.
برای پیادهسازی مدل Tail، کتابخانه cutile-rs پیشنهاد شده است. این کتابخانه امکان استفاده از زبان اصطلاحی Rust را برای ایجاد کدی که مستقیماً به هستههای CUDA کامپایل میشود، فراهم میکند. Cutile-rs قوانین سختگیرانه مالکیت و قرض گرفتن Rust را برای کدی که روی GPU اجرا میشود، اعمال میکند. هسته به عنوان یک برنامه تک رشتهای که روی یک بلوک داده کار میکند، پیادهسازی میشود و کامپایلر به طور خودکار محاسبات را به رشتهها تقسیم میکند و همگامسازی آنها را تضمین میکند. به رشتهها دسترسی مشترک به تانسورهای تغییرناپذیر اعطا میشود و تانسورهای تغییرپذیر برای اطمینان از دسترسی ایمن به بلوکهای مجزا تقسیم میشوند. کد cutile-rs تحت مجوز Apache 2.0 توزیع میشود.
منبع: opennet.ru
