pub fn elementwise_view(
a: &ArrayView,
b: &ArrayView,
out: *mut c_void,
out_len: usize,
kind: ElementwiseKind,
) -> Result<()>Expand description
Operación elementwise binaria VERDADERO zero-copy usando ArrayView
Esta versión NO hace to_vec() en cada operación - trabaja con ArrayView que ya contiene los datos. El caller hace to_vec() UNA VEZ al crear el ArrayView.
TIPO-AGNÓSTICO: Funciona con cualquier dtype (f32, f64, i32)
§Argumentos
a: ArrayView con datos pre-cargados (cualquier dtype)b: ArrayView con datos pre-cargados (mismo dtype que a)out: Buffer de salida (void* - tipo determinado por ArrayView)kind: Tipo de operación
§Rendimiento
- ✅ ZERO input copy (trabaja con slices desde ArrayView)
- ✅ Usa dispatch table (MKL/BLAS/SIMD)
- ✅ Tipo-agnóstico (funciona con f32, f64, i32)
- ⚠️ Output copy inevitable (FFI constraint)
§Ejemplo
ⓘ
// Crear views UNA VEZ (pueden ser f32, f64, o i32):
let view_a = ArrayView::from_slice_f32(&data_a);
let view_b = ArrayView::from_slice_f32(&data_b);
// Múltiples operaciones sin re-copiar inputs:
elementwise_view(&view_a, &view_b, &mut out_f32, Add)?;
elementwise_view(&view_a, &view_b, &mut out_f32, Mul)?;