f# - MathNet.Numerics 不使用 Mkl native 提供程序

标签 f# blas math.net mathnet-numerics

我有一个 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/

相关文章:

f# - 为什么 F# (FSharpOption<T>) 中的默认参数是引用类型?

c - BLAS sdot_ 函数返回意外结果

python - 使用 LAPACK 分发基于 Cython 的扩展

matrix - math.net 矩阵并置

f# - 从列表映射到另一种类型 - 有没有更好的方法来做到这一点?

recursion - 具有递归函数的 Stackoverflow

c - 为什么在 C 编程中需要 Fortran 包装器?

c# - 内置函数 diff() 可用于 MathNet 中的矢量?

c# - Double.Vector 和 Vector<double> 之间的区别

f# - 比赛中的比赛?