elementwise_view

Function elementwise_view 

Source
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)?;