I was thinking of starting to integrate some SIMD support (using System.Numerics Vector<T> code) into Math.Net Numerics.
Probably the first thing I would try to do is vectorize things like DenseVector.DoAdd, DoNegate, DoSubtract, scalar multiply, dot product, etc.
I was thinking of just unrolling the loops by Vector<T>.Count and doing the actual operations using Vector<T>.
I could probably do the simple Matrix versions too (like add and subtract and other element-wise operations).
Would that be helpful? Is someone also working on that already?
I also have some spatial code that might be interesting to integrate into Math.Net - I have code for Euclidean and Projective Transforms (it uses System.Numerics). I also have an implementation of kd-tree k nearest neighbors translated from https://github.com/ethz-asl/libnabo/ if there's interest in that (I used DenseColumnMajorMatrixStorage to represent the point clouds and query points).
Probably the first thing I would try to do is vectorize things like DenseVector.DoAdd, DoNegate, DoSubtract, scalar multiply, dot product, etc.
I was thinking of just unrolling the loops by Vector<T>.Count and doing the actual operations using Vector<T>.
I could probably do the simple Matrix versions too (like add and subtract and other element-wise operations).
Would that be helpful? Is someone also working on that already?
I also have some spatial code that might be interesting to integrate into Math.Net - I have code for Euclidean and Projective Transforms (it uses System.Numerics). I also have an implementation of kd-tree k nearest neighbors translated from https://github.com/ethz-asl/libnabo/ if there's interest in that (I used DenseColumnMajorMatrixStorage to represent the point clouds and query points).