If I call a function like

int[] square_array(int[] x)
{
        return x[] *= x[];
}

I get an error that there is an overlapping array in a vector operation. I guess this makes sense as the lhs and rhs are occupying the same memory. Nevertheless, I find it a little frustrating.

I tried two alternatives, one just adds a temporary duplicate array for the lhs x[] in the above, while the other uses a foreach loop. Both get correct results without errors, but also have their issues. Duplicating requires memory allocation, which makes it slower for small arrays. Foreach (ignoring parallelism or SIMD) tends to be slower for larger arrays, I take it due to compiler optimizations for vector operations.

Are there any other alternatives here?

Reply via email to