MKL.NET.Matrix 1.1.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package MKL.NET.Matrix --version 1.1.0                
NuGet\Install-Package MKL.NET.Matrix -Version 1.1.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="MKL.NET.Matrix" Version="1.1.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add MKL.NET.Matrix --version 1.1.0                
#r "nuget: MKL.NET.Matrix, 1.1.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install MKL.NET.Matrix as a Cake Addin
#addin nuget:?package=MKL.NET.Matrix&version=1.1.0

// Install MKL.NET.Matrix as a Cake Tool
#tool nuget:?package=MKL.NET.Matrix&version=1.1.0                

MKL.NET

build

A simple cross platform .NET API for Intel MKL.

Exposing functions from MKL keeping the syntax as close to the c developer reference as possible.

Reference the MKL.NET package and required runtime packages and use the static MKL functions. The correct native libraries will be included and loaded at runtime.

If you use your own copy of MKL native libraries please make sure that mkl_rt.dll/libmkl_rt.so/libmkl_rt.dylib is on the path. Newer MKL builds include a version number in the library name, so you will have to create a link or rename it. The names are already adjusted in the MKL.NET packages which work out of the box.

MKL.NET MKL.NET
runtimes:
MKL.NET.win-x64 MKL.NET
MKL.NET.win-x86 MKL.NET
MKL.NET.linux-x64 MKL.NET
MKL.NET.linux-x86 MKL.NET
MKL.NET.osx-x64 MKL.NET
libraries:
MKL.NET.Matrix MKL.NET
MKL.NET.Optimization MKL.NET
MKL.NET.Statistics MKL.NET

Rationale

  • Use freely available Intel MKL packages repackaged to work for each runtime.
  • The MKL.NET API is just a thin .NET wrapper around the native API keeping the syntax as close as possible.
  • The project is well defined, with an open design, and no business logic and could benefit from external input.
  • Cross platform testing is easy and free using Github actions.
  • MKL.NET native packages can just be referenced for needed runtimes at library or application level.

MKL.NET.Matrix

  • Performance and memory optimised matrix algebra library.
  • Matrix expressions are optimised to perform intermediate calculations inplace and reuse memory.
  • Operations such as scale, transpose, +, * are combined into single MKL calls.
  • Intermediate matrices are disposed (or reused) automatically.
  • ArrayPool underlying memory model using IDisposable and Finalizers.
  • Uses the Pinned Object Heap for net6.0.
  • All these combined result in it being much faster than other matrix libraries.

The following example only results in one new matrix r (using ArrayPool) without mutating inputs.

public static matrix Example(matrix ma, matrix mb, vector va, vector vb)
{
    using matrix r = 0.5 * Matrix.Abs(1.0 - ma) * mb.T + Math.PI * va.T * Vector.Sin(vb);
    ...
}

Example statistics matrix function:

public static (vector, matrix) MeanAndCovariance(matrix samples, vector weights)
{
    if (samples.Rows != weights.Length) ThrowHelper.ThrowIncorrectDimensionsForOperation();
    var mean = new vector(samples.Cols);
    var cov = new matrix(samples.Cols, samples.Cols);
    var task = Vsl.SSNewTask(samples.Cols, samples.Rows, VslStorage.ROWS, samples.Array, weights.Array);
    ThrowHelper.Check(Vsl.SSEditCovCor(task, mean.Array, cov.Array, VslFormat.FULL, null, VslFormat.FULL));
    ThrowHelper.Check(Vsl.SSCompute(task, VslEstimate.COV, VslMethod.FAST));
    ThrowHelper.Check(Vsl.SSDeleteTask(task));
    return (mean, cov);
}

Note: arrays need to be pinned across all MKL function calls when there are multiple as above as MKL stores native pointers and the arrays could be moved between calls. MKL.NET handles pinning automatically, unpinning when the task is deleted. This is a common seen bug when using MKL directly from .NET which causes occasional crashes.

MKL.NET.Optimization

Simple and high performance optimization and root finding library loosely based on the scipy.optimize API.

The aim is to include the latest algorithms such as Toms748, robustly tested with CsCheck. Full use of MKL.NET will be made to improve performance. Algorithms will be performance tested and default to the best for given inputs.

  • Root - root finding algorithms. Default algorithm has 20% fewer function calls than Brent, Toms748, Newton and Halley. Further details here.
  • Calculus - derivative and integral numeric calculations and check to any precision using Richardson extrapolation.
  • Minimum - minimum finding algorithms in one dimension. Default algorithm has 50% fewer function calls than Brent.
  • Minimum - in N dimensions. Intuative tolerance parameters. Optimised no array allocation in main loop using in place symmetric MKL rank-k, rank-2k functions.
    Should scale well with the number of dimensions. ~ 50-70% fewer function calls than other BFGS algorithms.
  • CurveFit and non-linear LeastSquares - helper functions based on Minimum.
  • Minimum_Global - global minimum algorithm in N dimensions returning a sequence of parallel grid BFGS searches ever reducing the spacing between prior searches. Further details here.

MKL.NET.Statistics

Simple and high performance statistics functions.

  • Summary - Sum, Mean, Median, MAD, Raw/Central/Standard Moments, Quartiles, Quantiles, Covariance, Correlation. All can be weighted.
  • Estimator - Running high performance, low memory estimators for Quantile, Quartiles, Quantiles, Histogram, Central/Standard Moments. Further details here.
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on MKL.NET.Matrix:

Package Downloads
MKL.NET.Optimization

Optimization and root finding based on cross platform MKL.NET.

MKL.NET.Statistics

Statistics functions based on cross platform MKL.NET.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.1.1 1,491 6/14/2023
1.1.0 3,949 5/7/2023
1.0.0 8,002 3/6/2022
1.0.0-rc1 573 2/23/2022
0.7.2 1,366 9/26/2021
0.7.0 1,081 8/26/2021
0.6.4 807 6/23/2021
0.6.3 822 2/5/2021
0.6.2 777 1/30/2021
0.6.1 797 1/28/2021
0.6.0 825 1/27/2021
0.5.0 813 1/18/2021
0.4.0 821 1/16/2021
0.3.0 839 11/13/2020
0.2.0 845 11/9/2020
0.1.0 951 11/4/2020

Added single precision vector and matrix. Thanks atlemann.