1

現在、数学カーネル ライブラリdll mkl_rt.dllで利用可能ないくつかの関数をC# プログラムで使用しているので、

using mkl;

namespace mklDirect
{
    int LAPACK_ROW_MAJOR = 101;
    int LAPACK_COL_MAJOR = 102;
    int n, m, lda;
    n = 3;m = 3;
    lda = n;
    int ldu = m;
    int ldvt = n;
    Double[] superb = new Double[m - 1];
    Double[] s = new Double[n];
    Double[] u = new Double[n * n];
    Double[] vt = new Double[n * n];
    Double[] A = new Double[9]
    {
                         8.79,  9.93,  9.83,
                         6.11,  6.91,  5.04,
                         -9.15, -7.93, 4.86
     };
     Char a1 = 'A';
     Char a2 = 'A';
     int mat_order = LAPACK_ROW_MAJOR;
     int info = 0;
     double[] work1 = new double[1];
     MKLImports.LAPACKE_dgesvd(mat_order, a1, a2, m, n, A, lda, s, u, ldu, vt, ldvt, superb);

     //PRINT RESULT


}  


namespace mkl
{
        internal sealed class MKLImports
        {
            private  MKLImports()
            {                 
            }

        [DllImport("mkl_rt.dll", ExactSpelling = true, SetLastError = false, CallingConvention = CallingConvention.Cdecl)]
            internal static extern void LAPACKE_dgesvd(
                  int matrix_order,
                  char a1,
                  char a2,
                  int m,
                  int n,
                 [In, Out] double[] input_matrix,
                  int lda,
                 [In, Out] double[] s,
                 [In, Out] double[] u,
                  int ldu,
                 [In, Out] double[] vt,
                  int ldvt,
                  double[] superb
          );
        }
}

名前空間 mkl に関数を追加し続け、それらの関数を別のファイルで使用したいと考えています。これに副作用があるかどうか、またはこれを行うための最良の方法が何であるかはわかりません. コードでは、dll をロードして、mkl と他の dll から巨大なライブラリを作成します。

4

1 に答える 1

1

相互運用ファイルを作成しようとしているだけですか? 完全な相互運用ファイルを生成する方法があり、そのようなコードを自動的に生成して、好きなように利用できます。

http://msdn.microsoft.com/en-us/library/tw4zwhbe.aspx

http://msdn.microsoft.com/en-us/library/aa302338.aspx

http://msdn.microsoft.com/en-us/library/1w557csx.aspx

于 2013-01-28T21:31:27.120 に答える