NVIDIA ประกาศการพัฒนาชุดเครื่องมือ CUDA Rust ซึ่งช่วยให้ภาษา Rust สามารถพัฒนาเคอร์เนลที่ทำงานบน GPU ได้ ชุดเครื่องมือนี้รับประกันความปลอดภัยของหน่วยความจำในระหว่างการคอมไพล์และป้องกันสภาวะการแข่งขัน (race condition) มีแผนจะพัฒนา CUDA Rust ในปีหน้าให้มีระดับที่เหมาะสมสำหรับโครงการใช้งานจริง เช่นเดียวกับชุดเครื่องมือ CUDA C++ และ CUDA Python
ชุดเครื่องมือ CUDA Rust รองรับสองโมเดลสำหรับการพัฒนาเคอร์เนลแบบขนาน ได้แก่ SIMT (Single Instruction, Multiple Threads) และ Tile โมเดล SIMT อนุญาตให้กำหนดเธรดเดียวในระดับต่ำ และเรียกใช้และจัดการเธรดดังกล่าวได้หลายพันเธรด ในขณะที่โมเดล Tile นำเสนอระดับนามธรรมที่สูงกว่า โดยแทนที่จะจัดการเธรดแต่ละตัวอย่างชัดเจน จะมีการกำหนดอัลกอริธึมสำหรับการทำงานกับบล็อกข้อมูล (ไทล์) และคอมไพเลอร์ Tile IR จะจัดการการจัดการเธรด การซิงโครไนซ์การเข้าถึง การจัดการหน่วยความจำ และการกระจายข้อมูลไปยังคอร์เทนเซอร์ทั้งหมด
สำหรับการพัฒนาโปรแกรมด้วยภาษา Rust โดยใช้โมเดล SIMT นั้น กำลังมีการพัฒนาคอมไพเลอร์ cuda-oxide ซึ่งช่วยให้สามารถคอมไพล์โค้ดในภาษา Rust โดยใช้ระบบประเภทมาตรฐานและโมเดลการเป็นเจ้าของของ Rust ไปเป็นคำสั่งสำหรับการประมวลผลได้โดยตรง เครื่องเสมือน CUDA PTX (Parallel Thread Execution) คือเคอร์เนล GPU ที่เขียนด้วยภาษา Rust ปกติ แต่ทำงานในสภาพแวดล้อม no_std และสามารถใช้ได้เฉพาะฟังก์ชันจากไลบรารี libcore และนามธรรมเฉพาะของ Rust เท่านั้น โดยไม่สามารถเข้าถึงไลบรารี Rust มาตรฐาน (libstd) ได้
เคอร์เนล CUDA ที่เขียนด้วย Rust อนุญาตให้ใช้การป้องกันประเภท (safe) การใช้บล็อกที่ไม่ปลอดภัย และการเข้าถึงคำสั่งฮาร์ดแวร์ระดับต่ำ เพื่อให้มั่นใจในความปลอดภัย จึงมีการเสนอประเภท DisjointSlice ซึ่งรับประกันว่าแต่ละเธรดจะเข้าถึงข้อมูลของตนเองได้อย่างเฉพาะเจาะจงเท่านั้น โค้ด cuda-oxide ได้รับอนุญาตภายใต้ใบอนุญาต Apache 2.0
เพื่อนำโมเดล Tail มาใช้ จึงมีการเสนอไลบรารี cutile-rs ซึ่งช่วยให้สามารถใช้ภาษา Rust ในการสร้างโค้ดที่คอมไพล์โดยตรงเป็น CUDA kernel ได้ cutile-rs ใช้กฎการเป็นเจ้าของและการยืมที่เข้มงวดของ Rust กับโค้ดที่ทำงานบน GPU kernel ถูกนำไปใช้เป็นโปรแกรมแบบเธรดเดียวที่ทำงานกับบล็อกข้อมูล และคอมไพเลอร์จะแบ่งการคำนวณออกเป็นเธรดโดยอัตโนมัติและตรวจสอบให้แน่ใจว่ามีการซิงโครไนซ์กัน เธรดจะได้รับสิทธิ์การเข้าถึงร่วมกันไปยังเทนเซอร์ที่ไม่เปลี่ยนแปลงได้ และเทนเซอร์ที่เปลี่ยนแปลงได้จะถูกแบ่งออกเป็นบล็อกที่ไม่ซ้ำกันเพื่อให้แน่ใจว่าการเข้าถึงปลอดภัย โค้ด cutile-rs เผยแพร่ภายใต้ใบอนุญาต Apache 2.0
ที่มา: opennet.ru
