2015-07-10 37 views
0

嗨,我試圖從mathdotnet與單聲道在Linux中使用Mkl本機提供商。Mono Mathnet MKL Nativer provider not found

我使用monodevelop並通過buildin NuGet包管理器安裝了MathNet.Numerics和MathNet.Numerics.MKL.Linux-x64和-x86包。

當我嘗試此代碼時,我得到System.NotSupportedException:未找到MKL本機提供程序。

using System; 
using MathNet.Numerics.LinearAlgebra; 
using MathNet.Numerics.LinearAlgebra.Double; 
using MathNet.Numerics; 

namespace mdeveloptest 
{ 
    class MainClass 
    { 
     public static void Main (string[] args) 
     { 
      Control.UseNativeMKL(); 

      Matrix<double> a = DenseMatrix.OfArray(new double[,] { {1,2,3}, {4,5,6}, {7,8,9}}); 
      Matrix<double> b = DenseMatrix.OfArray(new double[,] { {1,2,3}, {4,5,6}, {7,8,9}}); 

      Console.WriteLine (a*b); 

     } 
    } 
} 

MKL包提供了libiomp5.so和MathNet.Numerics.MKL.dll文件。在Windows中,將這些文件複製到輸出目錄就足夠了,但在linux中似乎不夠用。

我也不確定我是否需要x64或x86軟件包,或者單聲道莫名其妙地可以自己選擇合適的軟件包。

回答

0

您正在使用什麼版本的Math.NET Numerics?從v3.6開始,它應該在輸出文件夾中顯式查看,即使在Linux上也是如此。您還可以設置Control.NativeProviderPath以使其看起來另一條路徑。是的,如果你把這兩個文件夾放在x64x86子文件夾中,它會自動選擇一個。有關詳細信息,請參閱我們的documentation for Intel MKL

當然,您也可以將其設置爲共享庫,使用ldconfig的Linux方式,請參見Linux Interop with Native Libraries

+0

喜,THX的幫助。我正在使用mathnet v3.7。我試着把Control.NativeProvierPath,ldconfig放到/ lib,然後把ibiomp5.so和MathNet.Numerics.MKL.dll複製到包含.exe文件的文件夾中。除了設置LD_LIBRARY_PATH變量之外,沒有任何工作。 – Robert

0

Linux的ldconfig需要知道哪裏可以找到共享庫(* .so),即使它們位於可執行文件的當前目錄中。如果你在哪裏運行從cmd,然後所有的文件這種單應用程序(EXE,DLL和SOS)是在當前目錄下,你會:

export LD_LIBRARY_PATH=${PWD}:$LD_LIBRARY_PATH 
mono mdeveloptest.exe 

在MonoDevelop中/ Xamarin工作室:

  1. 開放項目選項
  2. 轉到運行/常規面板
  3. 添加環境變量,

Variable  | Value 
LD_LIBRARY_PATH | ./ 

FYI:我已經使用$ {PWD}爲XS/MonoDevelop的ENV VAR和他們得到正確的外殼擴展,這可能是他們被引用的字符串的方式。由於海報必須使用「./」,我更新了答案。僅供參考:OS-X的dyld默認包含當前目錄,因此在這種情況下不需要設置DYLD_LIBRARY_PATH。

附加信息:

機彙編解決在Linux非常不同的比在Windows, 乾脆把本地庫到與 可執行文件相同的文件夾是不夠的。安全的方法是編輯/etc/ld.so。conf和 使用ldconfig來告訴在哪裏尋找庫。 或者 您可以將路徑添加到LD_LIBRARY_PATH甚至只是將它們複製到 /usr/lib。

+0

thx很多,設置LD_LIBRARY_PATH變量finaly爲我工作。在monodevelop中,這個值似乎沒有被解釋,那裏的變量被設置爲字符串「$ {PWD}」。將其設置爲「./」然後工作。也不知何故使用ldconfig沒有爲我工作 – Robert

+0

沒問題,我用「./」回覆更新了答案,希望下一個人找到答案。 – SushiHangover