現在、数学カーネル ライブラリ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 から巨大なライブラリを作成します。