NVIDIA CUDA Rust ঘোষণা করেছে, GPU কোর লেখার জন্য মরিচাকে একটি শীর্ষ-অব-দ্য-লাইন ভাষাতে পরিণত করার একটি ধাক্কা৷ মরিচা কোড ইতিমধ্যেই CUDA কার্নেল চালাতে পারে, তবে সাধারণত কার্নেল বডি অন্য কোথাও লিখতে হয়। CUDA Rust দুটি NVlabs ওপেন সোর্স প্রজেক্টের সাথে এই ফাঁকটি বন্ধ করে: SIMT মডেলের জন্য cuda-oxide এবং নতুন টাইল মডেলের জন্য cutile-rs। উভয়ই মরিচা কার্নেলগুলি স্থানীয়ভাবে কম্পাইল করে এবং কম্পাইলের সময় উপনাম বাগগুলি প্রত্যাখ্যান করতে রাস্টের মালিকানাধীন নিয়মগুলি ব্যবহার করে।
এটা কি স্থাপনযোগ্য? আংশিকভাবে cutile-rs crates.io-তে প্রকাশিত, Rust 1.89+ stable-এ চলে এবং ইতিমধ্যেই Hugging Face’s Grout inference ইঞ্জিন এবং mistral.rs-এ ব্যবহৃত হয়েছে। চুদা-অক্সাইড হল প্রারম্ভিক আলফা। দুটি প্রকল্পই আলফা পর্যায়ে রয়েছে এবং উৎপাদনের জন্য অনুমোদিত হয়নি।
কেন জিপিইউ কোরের জন্য মরিচা
এআই সিস্টেম লেয়ার, ইনফারেন্স ইঞ্জিন থেকে ড্রাইভার এবং এজেন্ট রানটাইম পর্যন্ত, ক্রমবর্ধমানভাবে মরিচায় লেখা হচ্ছে। NVIDIA-এর নোভা লিনাক্স ড্রাইভার রাস্টে আছে, NVIDIA ডায়নামোর একটি মরিচা কার্নেল রয়েছে এবং NVTX-এর মরিচা মোড়ক রয়েছে। GPU কোর ব্যতিক্রম ছিল।
উভয় ট্র্যাক দুটি প্রোগ্রামিং মডেলকে প্রতিফলিত করে যা CUDA ইতিমধ্যেই অফার করে। SIMT CUDA C++ এবং numba-cuda-এ ব্যবহৃত মডেল: আপনি বর্ণনা করেন যে একটি থ্রেড কী করছে এবং হাজার হাজার চালু করে। টালি এটি নতুন মডেল, C++ এবং Python-এও উপলব্ধ: ডেটার একটি টাইল কী করে তা আপনি বর্ণনা করেন এবং টাইল আইআর কম্পাইলার থ্রেড ম্যাপিং এবং মেমরি লেআউট পরিচালনা করে। NVIDIA সুস্পষ্ট থ্রেড এবং মেমরি নিয়ন্ত্রণের জন্য SIMT সহ প্রথমে টাইল সুপারিশ করে। ডিজাইন করা ক্রস-ল্যাঙ্গুয়েজ ইন্টারঅপারেবিলিটি মানে রাস্ট নির্বাচন করা ডেভেলপারদের C++ বা পাইথন থেকে লক করবে না।
SIMT ট্র্যাক: চুদা-অক্সাইড
চুদা-অক্সাইড কাস্টম rustc কোডগানের পিছনের প্রান্ত। এটা একটা রুট #[kernel] Rust MIR, Pliron IR কমিউনিটি ফ্রেমওয়ার্ক, এবং LLVM IR থেকে PTX ব্যবহার করে রান করে, তারপর অন্য সব কিছু স্ট্যান্ডার্ড ব্যাকএন্ডে হস্তান্তর করে। NVIDIA Pliron এর উপরে GPU উপভাষা লিখেছে।
প্রয়োজনীয়তা: লিনাক্স, কম্পিউট ক্ষমতা সহ GPU 8.0 বা তার পরে, CUDA 12.x বা তার পরে, libclang সহ রিং এবং একটি লিঙ্কযুক্ত রাতের টুলচেন (nightly-2026-04-03) cargo oxide doctor সংজ্ঞা পরীক্ষা করে এবং cargo oxide new একটি ফাইলে হোস্ট এবং ডিভাইস কোড সহ স্ক্যাফোল্ড ভেক্টর সংযোজন প্রোগ্রাম।
নিরাপত্তা যুক্তি মূল স্বাক্ষরে বসে। ইনপুট a এবং b তারা নিয়মিত ভাগ করা টুকরা. আউটপুট c তিনি ক DisjointSliceএকটি প্রকার যা প্রতিটি থ্রেডকে তার নিজস্ব উপাদানে একচেটিয়া অ্যাক্সেস দেয়। সমতল &mut [f32] সেই পরিবর্তনশীল ঋণ ধরে রাখতে প্রতিটি থ্রেডের প্রয়োজন হবে, যা মরিচা প্রত্যাখ্যান করে। c.get_mut(idx) একটি ফেরত দেয় Optionতাই একটি সীমার বাইরে অ্যাক্সেস একটি পরিচালনা শাখা হয়ে ওঠে। ক #[launch_contract] অ্যাট্রিবিউট ব্লক আকৃতি এবং উত্পন্ন আকৃতি ঘোষণা করে prepare_vecadd পদ্ধতিটি সুরক্ষিত লঞ্চ চালানোর আগে এটির বিরুদ্ধে লঞ্চ কনফিগারেশন যাচাই করে।
টাইল ট্র্যাক: cutile-rs
cutile-rs এক স্তর উচ্চ কাজ করে. প্রতিটি টাইল ব্লক একটি সাবটেনসরে একটি একক লজিক্যাল থ্রেড হিসাবে একবার কার্নেল বডি চালায় এবং কম্পাইলার ঠিক করে যে কতগুলি আসল GPU থ্রেড এটিকে ব্যাক আপ করবে। দ #[cutile::module] একটি ম্যাক্রো হোস্ট বাইনারিতে কার্নেলের AST এম্বেড করে এবং কার্নেলটি প্রথম চালু হলে JIT এটি CUDA টাইল IR ব্যবহার করে কম্পাইল করে।
প্রয়োজনীয়তাগুলি আরও সহজ: কম্পিউট 8.0 বা তার পরে, CUDA 13.3, রাস্ট 1.89 বা তার পরে স্থিতিশীল এবং লিনাক্স, কোনও রাতের LLVM এবং কোনও কাস্টমাইজেশন নেই। সংজ্ঞা হল cargo newতারপর cargo add cutile.
হোস্ট পক্ষ .partition([128]) একটি কল 3টি কাজ করে। এটি প্রতিটি টাইলকে 128টি উপাদানের তার ভাগের একচেটিয়া মালিকানা দেয়, 1,024 / 128 = 8 টাইল দ্বারা গ্রিড ঠিক করে এবং নির্দিষ্ট টাইল প্রস্থ প্রদান করে। B. ইনপুট টেনসর ব্যবহার করে -1 একটি গতিশীল মাত্রা হিসাবে লঞ্চে সমাধান করা হয়েছে। ফলস্বরূপ লঞ্চার সমস্ত টেনসরের মালিকানা নেয় এবং GPU শেষ হলে সেগুলি ফেরত দেয়। পর্যন্ত কিছুই করা হয় না .sync_on(&stream); তার আগে সবকিছুই এক চেইনে লেখা অলস বর্ণনা।