15 个版本 (6 个重大更改)
0.7.0 | 2023年4月14日 |
---|---|
0.6.3 | 2023年2月11日 |
0.5.0 | 2022年9月10日 |
0.4.0 |
|
#566 in 机器学习
每月 97 次下载
用于 2 crate
380KB
8K SLoC
A minimal OpenCL, WGPU, CUDA and host CPU array manipulation engine / framework written in Rust. This crate provides the tools for executing custom array and automatic differentiation operations with the CPU, as well as with CUDA, WGPU and OpenCL devices.
This guide demonstrates how operations can be implemented for the compute devices: implement_operations.md
or to see it at a larger scale, look here custos-math
or here sliced
(for automatic diff examples).
安装
将 "custos" 添加为依赖项
[dependencies]
custos = "0.7.0"
# to disable the default features (cpu, cuda, opencl, static-api, blas, macro) and use an own set of features:
#custos = {version = "0.7.0", default-features=false, features=["opencl", "blas"]}
可用功能
功能 | 描述 |
---|---|
cpu | 添加 CPU 设备 |
stack | 添加 Stack 设备,启用堆栈分配的 Buffer |
opencl | 添加 OpenCL 功能。 (设备名称:OpenCL ) |
cuda | 添加 CUDA 功能。 (设备名称:CUDA ) |
wgpu | 添加 WGPU 功能。 (设备名称:WGPU ) |
no-std | 对于无 std 环境,激活 stack 功能。 |
static-api | 允许在不提供设备的情况下创建 Buffer |
blas | 添加来自系统(所选)BLAS 库的 gemm 函数。 |
opt-cache | 使 '缓存图' 可优化,降低内存占用。 |
macro | 重新导出 custos-macro |
realloc | 禁用所有设备的分配缓存。 |
autograd | 添加自动微分功能。 |
示例
custos只实现了四种Buffer
操作。这些操作是write
、read
、copy_slice
和clear
,然而,还有unary(仅设备)操作。
另一方面,[custos-math]实现了更多操作,包括自定义Matrix结构的矩阵操作。
为CPU
实现操作:如果您想为所有计算设备实现自己的操作,请考虑查看这里:implement_operations.md
use std::ops::Mul;
use custos::prelude::*;
pub trait MulBuf<T, S: Shape = (), D: Device = Self>: Sized + Device {
fn mul(&self, lhs: &Buffer<T, D, S>, rhs: &Buffer<T, D, S>) -> Buffer<T, Self, S>;
}
impl<T, S, D> MulBuf<T, S, D> for CPU
where
T: Mul<Output = T> + Copy,
S: Shape,
D: MainMemory,
{
fn mul(&self, lhs: &Buffer<T, D, S>, rhs: &Buffer<T, D, S>) -> Buffer<T, CPU, S> {
let mut out = self.retrieve(lhs.len(), (lhs, rhs));
for ((lhs, rhs), out) in lhs.iter().zip(&*rhs).zip(&mut out) {
*out = *lhs * *rhs;
}
out
}
}
更多使用示例可以在tests和examples文件夹中找到。(或者在unary操作文件、custos-math和sliced
中)
依赖项
~0–33MB
~465K SLoC