MKL.NET
MKL.NET copied to clipboard
MKL.NET.Matrix Nuget package in docker container
Encountering errors with matrix multiplication using MKL.NET.Matrix Nuget package in a docker container
Dockerfile
FROM mcr.microsoft.com/dotnet/sdk:6.0-windowsservercore-ltsc2022
WORKDIR c:/test/
COPY test.csproj test.cs ./
RUN dotnet build
RUN dotnet test
test.csproj file
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net6.0</TargetFrameworks>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="MKL.NET.Matrix" Version="1.1.1"/>
<PackageReference Include="MKL.NET.win-x64" Version="2022.0.0.115" />
<PackageReference Include="MSTest" Version="3.6.2"/>
</ItemGroup>
</Project>
test.cs file:
using System;
using System.Reflection;
using System.Runtime.InteropServices;
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class matrix_test {
[TestMethod]
public void matrix_multiply_test(){
MKLNET.matrix matrixA = new MKLNET.matrix(6, 6);
for (int i = 0; i < matrixA.Cols; ++i) {
for (int j = 0; j < matrixA.Rows; ++j) {
matrixA[i, j] = (i + 1) * (j + 1);
}
}
try { MKLNET.matrix result = matrixA * matrixA;
} catch (ExternalException e) {
Console.WriteLine(e.ErrorCode);
Console.WriteLine(e.Source);
Assert.Fail();
}
Assert.IsTrue(true);
}
}
output (catching the exception)
Error Message:
Assert.Fail failed.
Stack Trace:
at matrix_test.matrix_multiply_test() in C:\test\test.cs:line 20
Standard Output Messages:
-2147467259 (translates to 0x80004005, an Unspecified Error)
MKL.NET
output (not catching the exception)
System.Runtime.InteropServices.SEHException: External component has thrown an exception.
Stack Trace:
at MKLNET.Blas.Unsafe.gemm(Layout Layout, Trans TransA, Trans TransB, Int32 M, Int32 N, Int32 K, Double alpha, Double* A, Int32 lda, Double* B, Int32 ldb, Double beta, Double* C, Int32 ldc)
at MKLNET.Expression.MatrixMultiply.Evaluate()
at MKLNET.Expression.MatrixExpression.op_Implicit(MatrixExpression a)
at matrix_test.matrix_multiply_test() in C:\test\test.cs:line 16
Some scenarios where this error doesn't exist (that could help isolate the issue):
- when using mcr.microsoft.com/dotnet/sdk:6.0-jammy image (I change the runtime package to
MKL.NET.linux-x64and change dockerfile test path to/test/) - executing the unit test outside of a docker image (i.e. normal windows 11)
Insight on why this error could be happening or how to get more information out of the external failure would be greatly helpful. Thanks