#matrix #cuda

matrix_operations_cuda

一个用于执行CUDA矩阵操作的库

3个版本

0.1.2 2023年4月3日
0.1.1 2023年3月30日
0.1.0 2023年3月29日

#1382 in 数学

每月 34 次下载

MIT 协议

115KB
407

Matrix_Operations_Cuda

Crates.io Docs.rs

Matrix_Operations_Cuda是一个使用CUDA执行矩阵操作的Rust crate

安装

  • Matrix_Operations_Cuda

将以下内容添加到您的 Cargo.toml 文件中

[dependencies]
matrix_operations_cuda = "0.1.2"
  • Matrix_Operations

为了与 matrix_operations_cuda 一起工作,您需要安装 matrix_operations 的核心库

将以下内容添加到您的 Cargo.toml 文件中

[dependencies]
matrix_operations = "0.1.4"
  • CUDA

此crate不包括CUDA本身。您需要自行安装。 官方安装程序

使用方法

此crate允许使用CUDA执行常见操作

use matrix_operations::matrix;
use matrix_operations_cuda::{add_matrices, add_scalar, CudaEnv, dot, sub_matrices};

let cuda_env;
unsafe {
    cuda_env = CudaEnv::new(0, 0).unwrap();
}

let m1 = matrix![[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]];
let m2 = matrix![[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]];

let m3;
unsafe {
    m3 = dot(&m1, &m2, &cuda_env).unwrap();
}

assert_eq!(m3[0], [22.0, 28.0]);
assert_eq!(m3[1], [49.0, 64.0]);

let m4;
unsafe {
    m4 = add_scalar(&m3, 10.0, &cuda_env).unwrap();
}

assert_eq!(m4[0], [32.0, 38.0]);
assert_eq!(m4[1], [59.0, 74.0]);

let m5;
unsafe {
    m5 = sub_matrices(&m4, &m3, &cuda_env).unwrap();
}

assert_eq!(m5[0], [10.0, 10.0]);
assert_eq!(m5[1], [10.0, 10.0]);

您还可以从 .ptx 文件或从模块数据导入自己的模块,作为 Vec<u8>

use cuda_driver_sys::*;
use matrix_operations_cuda::cuda_env::CudaEnv;
use matrix_operations_cuda::cuda_module::CudaModule;
use matrix_operations::{Matrix, matrix};
use matrix_operations_cuda::matrix_apply::apply_function_matrix;

unsafe {
    let mut cuda_env = CudaEnv::new(0, 0).unwrap();

    let module = CudaModule::new(b"resources/kernel_test.ptx\0").unwrap();
    let function = module.load_function(b"mul_by_2\0").unwrap();

    let matrix = matrix![[1.0, 2.0, 3.0],
                         [4.0, 5.0, 6.0]];

    let result = apply_function_matrix(&matrix, &cuda_env, function).unwrap();

    assert_eq!(result[0], [2.0, 4.0, 6.0]);
    assert_eq!(result[1], [8.0, 10.0, 12.0]);

    module.free().unwrap();
}

功能

  • 初始化CUDA环境
  • 在矩阵上启动常见操作
  • 导入并使用自定义内核在矩阵上执行自定义操作
  • 在GPU上分配和释放内存
  • 在主机和设备之间复制数据

依赖项

~355KB