Emu 是用于编程 GPU 的高级语言。与其他语言(如 OpenCL 或 Halide)嵌入 C 或 C ++ 不同,Emu 用于嵌入 Rust。它为编写函数提供了单个过程宏。宏将编译时的函数转换为较低级别的代码,以便它们可以在 GPU 上运行。
Emu 还提供了一些旨在使编程 GPU 更易于访问的功能,例如内置数学和物理常量,单元注释和隐式转换。这是一些示例函数:
emu! { // more particles more_particles(num_particles u32, num_moles u32) u32 { return num_particles + num_moles * L; } // moves particles move_particles(global_particles_x [f32], global_particles_y f32, global_particles_z f32) { global_particles_z[get_global_id(0)] += 7.3e1 as nm; global_particles_x[get_global_id(0)] += 2 as cm; global_particles_y[get_global_id(0)] += 6 as cm; } // moves particles in circle rotate_particles(global_particles_r [f32]) { global_particles_r[get_global_id(0)] += 7.5 * TAU; } // multiplies 2 matrices // n is the dimension of the matrices // a and b are the matrices to be multiplied, c is the result multiply_matrices(n i32, global_a [f32], global_b [f32], global_c [f32]) { // indices of cells to multiply let i: i32 = get_global_id(0); let j: i32 = get_global_id(1); // execute step of multiplication for k in 0..n { global_c[i * n + j] += global_a[i * n + k] * global_b[k * n + j]; } } }