From 02175d1734c96a577f37eed797acf78dcf0265d6 Mon Sep 17 00:00:00 2001 From: Magnus Ulimoen Date: Wed, 10 Feb 2021 19:29:26 +0100 Subject: [PATCH] use some unsafe... --- sbp/src/operators/algos.rs | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/sbp/src/operators/algos.rs b/sbp/src/operators/algos.rs index 72750e9..78844dd 100644 --- a/sbp/src/operators/algos.rs +++ b/sbp/src/operators/algos.rs @@ -433,6 +433,14 @@ pub(crate) fn diff_op_2d_sliceable_y_simd &[Float] { + unsafe { std::slice::from_raw_parts(prev_ptr.add(i * ny), ny) } + } + }; + */ let prevcol = |i: usize| -> &[Float] { &prev[i * ny..(i + 1) * ny] }; for (&bl, fut) in matrix.iter_rows().zip(fut.chunks_exact_mut(ny)) { @@ -468,9 +476,16 @@ pub(crate) fn diff_op_2d_sliceable_y_simd &[Float] { &prev[i * ny..(i + 1) * ny] }; + let prevcol = { + let prev_ptr = prev.as_ptr(); + move |i: usize| -> &[Float] { + unsafe { std::slice::from_raw_parts(prev_ptr.add(i * ny), ny) } + } + }; + //let prevcol = |i: usize| -> &[Float] { &prev[i * ny..(i + 1) * ny] }; + for (fut, ifut) in futmid.chunks_exact_mut(ny).zip(M..nx - M) { - let mut fut = fut.chunks_exact_mut(SimdT::lanes()); + let mut fut = fut.array_chunks_mut::<{ SimdT::lanes() }>(); for (j, fut) in fut.by_ref().enumerate() { let index_to_simd = |i| SimdT::from_slice_unaligned(&prevcol(i)[SimdT::lanes() * j..]); @@ -481,7 +496,6 @@ pub(crate) fn diff_op_2d_sliceable_y_simd