I empirically noticed that matrix multiplication was extremely slow for
the matrices I was using i.e. multiplications were taking minutes rather
than seconds. After tracking down the root of the problem, I found it
was in the CacheObliviousMatrixMultiply() implementation, specifically,
where the sum of the column/row dimensions were compared with the
Control.ParallelizeOrder variable.
For significantly skewed matrix multiplication (wide * tall), the
parallelised redistribution greatly reduces performance. By removing the
'k' parameter from the comparison (where k is the number of columns in
the left matrix and the number of rows in the right) the performance is
improved drastically.
For perfectly square matrices, this change reduces performance slightly.
api: removed the LU solve methods with the transpose option from LA provider interface for consistency with other solvers
added SecuritySafeCritical and SecurityCritical attributes native provider and p/invoke methods