Retrieve data from the gpu.

This commit is contained in:
laurent
2023-06-22 11:01:49 +01:00
parent 083ced4428
commit 87a37b3bf3
2 changed files with 25 additions and 21 deletions

View File

@ -1,12 +1,14 @@
use anyhow::Result;
use candle::{Device, Tensor};
use candle::{DType, Device, Tensor};
fn main() -> Result<()> {
let device = Device::new_cuda(0)?;
let x = Tensor::new(&[3f32, 1., 4., 1., 5.], &device)?;
println!("{:?}", x.to_vec1::<f32>()?);
let y = Tensor::new(&[2f32, 7., 1., 8., 2.], &device)?;
let z = (y * 3.)?;
println!("{:?}", z.to_vec1::<f32>()?);
let x = Tensor::new(&[2f32, 7., 1., 8., 2.], &device)?;
let y = (x * 3.)?;
println!("{:?}", y.to_vec1::<f32>()?);
let x = Tensor::ones((3, 2), DType::F32, &device)?;
println!("{:?}", x.to_vec2::<f32>()?);
Ok(())
}

View File

@ -204,12 +204,13 @@ impl Tensor {
shape: self.shape().clone(),
});
}
match &self.storage {
Storage::Cpu(cpu_storage) => {
let from_cpu_storage = |cpu_storage: &crate::CpuStorage| {
let data = S::cpu_storage_as_slice(cpu_storage)?;
Ok(data[0])
}
Storage::Cuda { .. } => todo!(),
Ok::<_, Error>(data[0])
};
match &self.storage {
Storage::Cpu(cpu_storage) => from_cpu_storage(cpu_storage),
Storage::Cuda(storage) => from_cpu_storage(&storage.to_cpu_storage()?),
}
}
@ -261,8 +262,7 @@ impl Tensor {
pub fn to_vec2<S: crate::WithDType>(&self) -> Result<Vec<Vec<S>>> {
let (dim1, dim2) = self.shape().r2()?;
match &self.storage {
Storage::Cpu(cpu_storage) => {
let from_cpu_storage = |cpu_storage: &crate::CpuStorage| {
let data = S::cpu_storage_as_slice(cpu_storage)?;
let mut rows = vec![];
let mut src_index = self.strided_index();
@ -272,8 +272,10 @@ impl Tensor {
}
assert!(src_index.next().is_none());
Ok(rows)
}
Storage::Cuda { .. } => todo!(),
};
match &self.storage {
Storage::Cpu(storage) => from_cpu_storage(storage),
Storage::Cuda(storage) => from_cpu_storage(&storage.to_cpu_storage()?),
}
}