2个版本
0.1.1 | 2023年4月14日 |
---|---|
0.1.0 | 2023年2月9日 |
45 在 #expand
96 每月下载
用于 2 个crate(通过 custos)
10KB
custos-macro
基于CPU操作添加了Stack
操作。
示例
将CPU
实现扩展为Stack
和CPU
实现。
#[impl_stack]
impl<T, D, S> ElementWise<T, D, S> for CPU
where
T: Number,
D: MainMemory,
S: Shape
{
fn add(&self, lhs: &Buffer<T, D, S>, rhs: &Buffer<T, D, S>) -> Buffer<T, CPU, S> {
let mut out = self.retrieve(lhs.len, (lhs, rhs));
cpu_element_wise(lhs, rhs, &mut out, |o, a, b| *o = a + b);
out
}
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));
cpu_element_wise(lhs, rhs, &mut out, |o, a, b| *o = a * b);
out
}
}
'#[impl_stack]' expands the implementation above to the following 'Stack' implementation:
impl<T, D, S> ElementWise<T, D, S> for Stack
where
T: Number,
D: MainMemory,
S: Shape
{
fn add(&self, lhs: &Buffer<T, D, S>, rhs: &Buffer<T, D, S>) -> Buffer<T, Stack, S> {
let mut out = self.retrieve(lhs.len, (lhs, rhs));
cpu_element_wise(lhs, rhs, &mut out, |o, a, b| *o = a + b);
out
}
fn mul(&self, lhs: &Buffer<T, D, S>, rhs: &Buffer<T, D, S>) -> Buffer<T, Stack, S> {
let mut out = self.retrieve(lhs.len, (lhs, rhs));
cpu_element_wise(lhs, rhs, &mut out, |o, a, b| *o = a * b);
out
}
}
// Now is it possible to execute this operations with a CPU and Stack device.
依赖项
~265–710KB
~17K SLoC