7 điểm bởi GN⁺ 2025-04-28 | Chưa có bình luận nào. | Chia sẻ qua WhatsApp
  • CubeCL là một phần mở rộng ngôn ngữ đa nền tảng hiệu năng cao, cho phép viết kernel GPU bằng Rust
  • Hỗ trợ đầy đủ hàm, generic, struct; hỗ trợ một phần trait, method và suy luận kiểu
  • Hỗ trợ runtime dựa trên WGPU, CUDA, ROCm; đồng thời đang phát triển runtime JIT CPU được tối ưu với lệnh SIMD
  • Cung cấp các tính năng tự động vector hóa, tối ưu hóa thời gian biên dịch (Comptime), autotune để tối đa hóa hiệu năng mã nguồn
  • Sử dụng một cách tiếp cận độc đáo dựa trên hệ thống procedural macro của Rust để phân tích và mở rộng mã kernel GPU

Giới thiệu CubeCL

  • CubeCL là một phần mở rộng ngôn ngữ tính toán hiệu năng cao, mở rộng ngôn ngữ Rust để hỗ trợ viết trực tiếp kernel GPU
  • Tận dụng zero-cost abstraction để giúp việc phát triển kernel hiệu quả và dễ bảo trì
  • Hiện tại hỗ trợ đầy đủ hàm, generic và struct, còn trait, method và suy luận kiểu được hỗ trợ một phần

Ví dụ sử dụng đơn giản

  • Dùng attribute #[cube] để chỉ định hàm sẽ chạy trên GPU
  • Các hàm gelu_arraygelu_scalar tự động sử dụng lệnh SIMD để cải thiện hiệu năng
  • Có thể chạy kernel bằng hàm launch_unchecked

Các runtime được hỗ trợ

  • WGPU: hỗ trợ GPU đa nền tảng thông qua Vulkan, Metal, DirectX, WebGPU
  • CUDA: hỗ trợ tối ưu cho GPU NVIDIA
  • ROCm/HIP: hỗ trợ GPU AMD (đang phát triển)
  • JIT CPU runtime: đang phát triển runtime JIT CPU tối ưu dựa trên Cranelift, tận dụng lệnh SIMD

Mục tiêu của CubeCL

  • Hỗ trợ viết kernel tính toán hiệu năng cao mà không bị ràng buộc bởi phần cứng
  • Nâng cao khả năng cấu hình, tái sử dụng, kiểm thử và bảo trì của mã thông qua tự động vector hóa, comptime, autotune
  • Cung cấp khả năng tái sử dụng buffer được tối ưu cho thông lượng cao thông qua chiến lược quản lý bộ nhớ
  • Hướng tới xây dựng hệ sinh thái tính toán hiệu năng cao và tính toán khoa học bằng cách phát triển các thành phần đại số tuyến tính

CubeCL hoạt động như thế nào

  • Sử dụng một cách tiếp cận độc đáo dựa trên hệ thống procedural macro của Rust để phân tích và mở rộng mã kernel GPU
  • Comptime: có thể dễ dàng tích hợp tối ưu hóa thời gian biên dịch mà không cần biến đổi mã nguồn gốc
  • Tự động vector hóa: vector hóa đầu vào của các hàm CubeCL để xác định phần tử vector hóa của từng biến trung gian
  • Tích hợp với Rust: mã được tạo ra vẫn là mã Rust hợp lệ và có thể được đóng gói mà không phụ thuộc vào runtime cụ thể nào

Thiết kế và tính năng đặc biệt

  • CubeCL được thiết kế xoay quanh cube, và mọi API tính toán đều được ánh xạ lên phần cứng để có thể sử dụng biểu diễn 3D
  • Tự động vector hóa: có thể cải thiện hiệu năng bằng lệnh SIMD, đồng thời có thể truy cập trực tiếp phần tử vector hóa bên trong kernel
  • Comptime: chỉnh sửa compiler IR tại runtime để mang lại tối ưu hóa và tính linh hoạt
  • Autotune: chạy các benchmark nhỏ tại runtime để chọn kernel và cấu hình tối ưu

Lưu ý và lịch sử

  • CubeCL hiện đang ở phiên bản alpha, nên vẫn còn những phần chưa được hoàn thiện
  • Ban đầu nó bắt đầu như backend WebGPU của dự án Burn
  • Sau đó được mở rộng thành IR đa dụng và frontend Rust khi bổ sung runtime CUDA
  • Đã phát triển các khái niệm tổng quát để vượt qua khác biệt giữa CUDA và WebGPU

Chưa có bình luận nào.

Chưa có bình luận nào.