diff --git a/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Complex.cs b/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Complex.cs index aad6a388..d04d6a87 100644 --- a/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Complex.cs +++ b/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Complex.cs @@ -1068,8 +1068,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl /// routine. public override void PointWisePowerArrays(Complex[] x, Complex[] y, Complex[] result) { - if (SafeNativeMethods.query_capability((int)ProviderCapability.LinearAlgebraMajor) != 0 || - SafeNativeMethods.query_capability((int)ProviderCapability.LinearAlgebraMinor) < 1) + if (_vectorFunctionsMajor != 0 || _vectorFunctionsMinor < 1) { base.PointWisePowerArrays(x, y, result); } diff --git a/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Complex32.cs b/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Complex32.cs index 58892033..135c0a86 100644 --- a/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Complex32.cs +++ b/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Complex32.cs @@ -1098,8 +1098,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl /// routine. public override void PointWisePowerArrays(Complex32[] x, Complex32[] y, Complex32[] result) { - if (SafeNativeMethods.query_capability((int)ProviderCapability.LinearAlgebraMajor) != 0 || - SafeNativeMethods.query_capability((int)ProviderCapability.LinearAlgebraMinor) < 1) + if (_vectorFunctionsMajor != 0 || _vectorFunctionsMinor < 1) { base.PointWisePowerArrays(x, y, result); } diff --git a/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Double.cs b/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Double.cs index 607666d1..6002b7ec 100644 --- a/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Double.cs +++ b/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Double.cs @@ -1103,8 +1103,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl /// routine. public override void PointWisePowerArrays(double[] x, double[] y, double[] result) { - if (SafeNativeMethods.query_capability((int)ProviderCapability.LinearAlgebraMajor) != 0 || - SafeNativeMethods.query_capability((int)ProviderCapability.LinearAlgebraMinor) < 1) + if (_vectorFunctionsMajor != 0 || _vectorFunctionsMinor < 1) { base.PointWisePowerArrays(x, y, result); } diff --git a/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Single.cs b/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Single.cs index 2cc0d87a..be0b0666 100644 --- a/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Single.cs +++ b/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.Single.cs @@ -1098,8 +1098,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl /// routine. public override void PointWisePowerArrays(float[] x, float[] y, float[] result) { - if (SafeNativeMethods.query_capability((int)ProviderCapability.LinearAlgebraMajor) != 0 || - SafeNativeMethods.query_capability((int)ProviderCapability.LinearAlgebraMinor) < 1) + if (_vectorFunctionsMajor != 0 || _vectorFunctionsMinor < 1) { base.PointWisePowerArrays(x, y, result); } diff --git a/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.cs b/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.cs index 46a48110..edceb7d9 100644 --- a/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.cs +++ b/src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.cs @@ -90,6 +90,11 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl readonly Common.Mkl.MklPrecision _precision; readonly Common.Mkl.MklAccuracy _accuracy; + int _linearAlgebraMajor; + int _linearAlgebraMinor; + int _vectorFunctionsMajor; + int _vectorFunctionsMinor; + /// /// Sets the desired bit consistency on repeated identical computations on varying CPU architectures, /// as a trade-off with performance. @@ -150,12 +155,15 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl MklProvider.Load(minRevision: 4); MklProvider.ConfigurePrecision(_consistency, _precision, _accuracy); - int linearAlgebra = SafeNativeMethods.query_capability((int)ProviderCapability.LinearAlgebraMajor); + _linearAlgebraMajor = SafeNativeMethods.query_capability((int)ProviderCapability.LinearAlgebraMajor); + _linearAlgebraMinor = SafeNativeMethods.query_capability((int)ProviderCapability.LinearAlgebraMinor); + _vectorFunctionsMajor = SafeNativeMethods.query_capability((int)ProviderCapability.VectorFunctionsMajor); + _vectorFunctionsMinor = SafeNativeMethods.query_capability((int)ProviderCapability.VectorFunctionsMinor); // we only support exactly one major version, since major version changes imply a breaking change. - if (linearAlgebra != 2) + if (_linearAlgebraMajor != 2) { - throw new NotSupportedException(string.Format("MKL Native Provider not compatible. Expecting linear algebra v2 but provider implements v{0}.", linearAlgebra)); + throw new NotSupportedException(string.Format("MKL Native Provider not compatible. Expecting linear algebra v2 but provider implements v{0}.", _linearAlgebraMajor)); } }