#稀疏 #opencl #cuda #cpu-gpu #矩阵乘法 #方程

RayBNN_Sparse

基于CUDA、OpenCL和oneAPI的GPU、CPU和FPGA稀疏矩阵库

7个版本 (2个稳定版)

2.0.2 2024年6月18日
2.0.1 2024年6月5日
0.1.5 2023年11月6日
0.1.4 2023年10月29日
0.1.0 2023年9月5日

#183 in 数学

Download history 7/week @ 2024-05-19 2/week @ 2024-05-26 147/week @ 2024-06-02 12/week @ 2024-06-09 154/week @ 2024-06-16 6/week @ 2024-06-23 56/week @ 2024-07-07 1/week @ 2024-07-14 3/week @ 2024-07-28

每月下载量:433
3 crate使用

GPL-3.0-only

46KB
964

RayBNN_Sparse

基于CUDA、OpenCL和oneAPI的GPU、CPU和FPGA稀疏矩阵库

支持CSR、COO、CSC和块稀疏矩阵

需要Arrayfire和Arrayfire Rust

支持f16、f32、f64、Complexf16、Complexf32、Complexf64

安装Arrayfire

https://arrayfire.com/binaries/安装Arrayfire 3.9.0的二进制文件

或从源码构建https://github.com/arrayfire/arrayfire/wiki/Getting-ArrayFire

添加到您的Cargo.toml

arrayfire = { version = "3.8.1", package = "arrayfire_fork" }
num = "0.4.1"
num-traits = "0.2.16"
half = { version = "2.3.1" , features = ["num-traits"] }
RayBNN_Sparse = "2.0.2"

示例列表

将COO转换为CSR稀疏矩阵

let mut WRowIdxCSR = RayBNN_Sparse::Util::Convert::COO_to_CSR(&WRowIdxCOO,7);

将CSR转换为COO稀疏矩阵

let mut WRowIdxCOO = RayBNN_Sparse::Util::Convert::CSR_to_COO(&WRowIdxCSR);

在COO矩阵中搜索值

let valsel = RayBNN_Sparse::Util::Search::COO_find(&WRowIdxCOO,&idxsel);

批量搜索COO矩阵中的值

let valsel = RayBNN_Sparse::Util::Search::COO_batch_find(&WRowIdxCOO,&idxsel,4);

获取全局索引

let global_idx = RayBNN_Sparse::Util::Convert::get_global_weight_idx(
    2000, 
    &WRowIdxCOO, 
    &WColIdx
);

获取全局索引2

let global_idx = RayBNN_Sparse::Util::Convert::get_global_weight_idx2(
    2000, 
    &WRowIdxCOO, 
    &WColIdx
);

清除加权邻接矩阵的输入

RayBNN_Sparse::Util::Remove::clear_input::<f32>(
    &mut WValues,
    &mut WRowIdxCOO,
    &mut WColIdx,
    3
);

清除加权邻接矩阵的输出

RayBNN_Sparse::Util::Remove::clear_output::<f32>(
    &mut WValues,
    &mut WRowIdxCOO,
    &mut WColIdx,
    7-2
);

清除加权邻接矩阵中隐藏神经元的输入

RayBNN_Sparse::Util::Remove::clear_input_to_hidden::<f64>(
    &mut WValues,
    &mut WRowIdxCOO,
    &mut WColIdx,
    3
);

删除加权邻接矩阵中最小的权重

RayBNN_Sparse::Util::Remove::delete_smallest_weights::<f32>(
    &mut WValues,
    &mut WRowIdxCOO,
    &mut WColIdx,
    3
);

以随机概率删除加权邻接矩阵中最小的权重

RayBNN_Sparse::Util::Remove::delete_weights_with_prob::<f64>(
    &mut WValues,
    &mut WRowIdxCOO,
    &mut WColIdx,
    3
);

重新映射加权邻接矩阵中的行

let valsel = RayBNN_Sparse::Util::Convert::remap_rows(&dictionary, &idx,1000);

块矩阵乘法

RayBNN_Sparse::Matrix::Block::matmul::<f64>(
	&input_start,
    &input_end,

    &block_start,
    &block_end,


    &input,
    &block
);

转置块矩阵乘法

RayBNN_Sparse::Matrix::Block::trans_matmul::<f64>(
	&input_start,
    &input_end,

    &block_start,
    &block_end,


    &input,
    &block
);

并行查找数组

let result =  RayBNN_Sparse::Util::Search::parallel_lookup(
    0,
    1,

    &idx_arr,
    &test_arr,
);

依赖关系

~7MB
~139K SLoC