| 567 | /// Works for any dtype by extracting raw Vec pointer from CpuStorage. |
| 568 | #[allow(dead_code)] |
| 569 | fn view_key(tensor: &Tensor) -> Option<(usize, usize, usize, u64)> { |
| 570 | let (storage, layout) = tensor.storage_and_layout(); |
| 571 | let ptr = match &*storage { |
| 572 | candle_core::Storage::Cpu(cpu) => { |
| 573 | // Extract raw pointer regardless of dtype |
| 574 | match cpu { |
| 575 | candle_core::CpuStorage::F16(v) => v.as_ptr() as usize, |
| 576 | candle_core::CpuStorage::F32(v) => v.as_ptr() as usize, |
| 577 | candle_core::CpuStorage::BF16(v) => v.as_ptr() as usize, |
| 578 | candle_core::CpuStorage::F64(v) => v.as_ptr() as usize, |
| 579 | _ => return None, |
| 580 | } |
| 581 | } |
| 582 | _ => return None, |
| 583 | }; |
| 584 | let offset = layout.start_offset(); |
| 585 | let count = layout.shape().elem_count(); |
| 586 | let strides = layout.stride(); |
| 587 | let stride_hash = strides |
| 588 | .iter() |
| 589 | .fold(0u64, |h, &s| h.wrapping_mul(0x517cc1b727220a95).wrapping_add(s as u64)); |
| 590 | Some((ptr, offset, count, stride_hash)) |
| 591 | } |
| 592 | |
| 593 | fn get_or_upload(&self, tensor: &Tensor) -> Result<Arc<MappedBuffer>> { |
| 594 | let id = tensor.id(); |