我有一个 F# 项目,它使用 MathNet.Numerics 进行线性代数例程。
我已将以下代码放入 F# 模块中:
module LinearAlgebra
open MathNet.Numerics
open MathNet.Numerics.LinearAlgebra.Double
open MathNet.Numerics.LinearAlgebra.Generic
Control.LinearAlgebraProvider <- new Algorithms.LinearAlgebra.Mkl.MklLinearAlgebraProvider()
但是无论我启用还是注释掉这行代码,我看到的矩阵乘法的时间都保持不变。
我已经安装了 Mkl 提供程序 NuGet 包,如下所述: http://christoph.ruegg.name/blog/mathnet-numerics-with-native-linear-algebra.html
并确保这两个dll被复制到bin目录中: libiomp5md.dll MathNet.Numerics.MKL.dll
关于如何检测本地提供程序是否实际被使用有什么想法吗?
最佳答案
docs比提到的博客文章更新一些,但似乎所有必需的步骤都已完成。
- 您的矩阵有多大?
- 所有涉及的矩阵都是稠密的吗?
- 这个模块是您的线性代数代码所在的模块吗?如果没有,您是否确保该模块在线性代数代码之前实际执行?
您可以在执行线性代数代码之前检查 Control.LinearAlgebraProvider
来验证 native 提供程序是否已启用。在 v3 中,调用 ToString
将提供一些附加信息,例如平台和版本。
关于f# - MathNet.Numerics 不使用 Mkl native 提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23966353/