革命性高性能计算框架 CubeCL:多平台GPU编程的终极解决方案
革命性高性能计算框架 CubeCL多平台GPU编程的终极解决方案【免费下载链接】cubeclMulti-platform high-performance compute language extension for Rust.项目地址: https://gitcode.com/gh_mirrors/cu/cubeclCubeCL 是一款面向 Rust 的多平台高性能计算语言扩展它让开发者能够利用零成本抽象编写可维护、灵活且高效的计算内核同时提供针对任何平台优化的运行时负责内存管理和延迟执行。无论是 NVIDIA、AMD 还是跨平台 GPUCubeCL 都能提供一致的编程体验和卓越性能。 CubeCL 核心优势重新定义 GPU 编程 多平台无缝支持一次编写处处运行CubeCL 突破了传统 GPU 编程的平台壁垒通过统一的抽象层支持多种计算后端让你的代码无需修改即可在不同硬件上高效运行。目前支持的平台包括平台运行时编译器硬件支持WebGPUwgpuWGSL大多数 GPUCUDACUDAC (CUDA)NVIDIA GPUROCmHIPC (HIP)AMD GPUMetalwgpuC (Metal)Apple GPUVulkanwgpuSPIR-VLinux Windows 上的大多数 GPUCPUcpuRust所有 CPU支持 SIMD 加速CubeCL 架构设计实现了跨平台计算的无缝衔接为开发者提供一致的编程体验 三大创新特性释放硬件潜力1️⃣ 自动向量化轻松利用 SIMD 指令高性能内核需要尽可能利用 SIMD 指令但手动实现复杂且易错。CubeCL 允许你在启动内核时指定输入变量的向量化因子内核代码中只需使用一种动态向量化类型支持自动广播。运行时能够编译内核并使用最佳指令同时可通过 comptime 系统直接访问向量化因子确保算法行为与性能的平衡。2️⃣ Comptime编译时优化的强大工具CubeCL 不仅仅是一种新的计算语言它让你能够编写可完全自定义的编译器插件。Comptime 允许在首次编译内核时在运行时修改编译器 IR实现多种优化和灵活性指令特化根据硬件支持自动选择最优指令自动向量化动态注入向量化因子适配不同硬件循环展开针对特定值范围配置循环展开形状特化为不同输入大小优化深度学习内核编译时计算将常量计算注入内核避免运行时重复计算3️⃣ 自动调优智能选择最佳配置自动调优通过在运行时执行小型基准测试为当前硬件选择最佳内核和配置是实现可移植性的关键特性。它与 comptime 完美结合可测试不同 comptime 值对性能的影响结果会缓存到设备上供后续使用。对于深度学习等吞吐量导向的程序这是一个无需思考的权衡你甚至可以随程序一起分发自动调优缓存减少冷启动时间。 快速上手CubeCL 安装与基础使用 简单安装轻松集成CubeCL 作为 Rust crate 提供只需更新你的 Cargo.toml 即可将其添加到项目中[dependencies] cubecl { version 0.11.0, # 替换为 crates.io 上的最新版本 features [wgpu] # 启用所需的运行时特性如 wgpu, cuda, hip }不同运行时需要特定的驱动或框架支持详细要求可参考 安装指南。 编写你的第一个 CubeCL 内核使用cube属性标注函数即可指示该函数应在 GPU 上运行use cubecl::prelude::*; #[cube(launch_unchecked)] fn gelu_arrayF: Float, N: Size(input: [VectorF, N], output: mut [VectorF, N]) { if ABSOLUTE_POS input.len() { output[ABSOLUTE_POS] gelu_scalar(input[ABSOLUTE_POS]); } } #[cube] fn gelu_scalarF: Float, N: Size(x: VectorF, N) - VectorF, N { let sqrt2 F::new(comptime!(2.0f32.sqrt())); let tmp x / Vector::new(sqrt2); x * (Vector::erf(tmp) 1.0) / 2.0 }然后使用自动生成的launch_unchecked函数启动内核pub fn launchR: Runtime(device: R::Device) { let client R::client(device); let input [-1., 0., 1., 5.]; let vectorization 4; let output_handle client.empty(input.len() * core::mem::size_of::f32()); let input_handle client.create(f32::as_bytes(input)); unsafe { gelu_array::launch_unchecked::f32, R( client, CubeCount::Static(1, 1, 1), CubeDim::new_1d(input.len() as u32 / vectorization), vectorization, BufferArg::from_raw_parts(input_handle, input.len()), BufferArg::from_raw_parts(output_handle, input.len()), ) }; let bytes client.read_one(output_handle); let output f32::from_bytes(bytes); println!(Executed gelu with runtime {:?} {output:?}, R::name(client)); }要运行这个 GELU 示例只需执行以下命令cargo run --example gelu --features cpu # CPU/SIMD 运行时 cargo run --example gelu --features cuda # CUDA 运行时 cargo run --example gelu --features wgpu # WebGPU 运行时 深入了解 CubeCL️ 独特的架构设计基于 Cube 的拓扑结构CubeCL 的设计围绕 Cube立方体展开更具体地说是基于长方体因为并非所有轴的大小都相同。所有计算 API 都需要映射到硬件而硬件通常是可以使用 3D 表示访问的瓦片因此 CubeCL 的拓扑可以轻松映射到其他 API 的概念。核心拓扑变量包括 CUBE_COUNT立方体数量、CUBE_POS立方体位置、CUBE_DIM立方体维度、UNIT_POS单元位置等它们在不同平台上有对应的等价概念如 CUDA 中的 gridDim、blockIdx、blockDim、threadIdx 等。 丰富的学习资源虽然目前学习资源有限但你可以查看 矩阵乘法库 了解 CubeCL 的实际应用。如果有任何问题或想贡献代码欢迎加入社区交流。 开始使用 CubeCLCubeCL 正在快速发展虽然目前处于 alpha 阶段但已在 Burn 中得到应用。项目最初是 Burn 的 WebGPU 后端随着优化的深入逐步发展成为支持多平台的高性能计算框架。要开始使用 CubeCL只需克隆仓库并探索示例git clone https://gitcode.com/gh_mirrors/cu/cubecl cd cubecl cargo run --example gelu --features wgpu无论你是深度学习研究者、高性能计算工程师还是 Rust 爱好者CubeCL 都能为你提供强大的工具让 GPU 编程变得简单而高效。加入 CubeCL 社区一起推动 Rust 高性能计算生态的发展【免费下载链接】cubeclMulti-platform high-performance compute language extension for Rust.项目地址: https://gitcode.com/gh_mirrors/cu/cubecl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考