我无法让英特尔MKL从C开始工作。 我有以下测试程序:
#include "stdafx.h"
#include"mkl.h"
int main()
{
int one = 1;
int ten = 10;
double copy[10];
double threes[10];
for (int i = 0; i < 10; ++i) threes[i] = 3;
dcopy(&ten, threes, &one, copy, &one);
double l1norm;
l1norm = dasum(&ten, threes, &one);
return 0;
}
正在构建和链接良好但不做我想要的。特别是在返回线阵列&#34; copy&#34;当它被声明并且l1norm等于0时,它仍然充满了它。 我链接到库:mkl_blas95_ilp64.lib,mkl_core_dll.lib,mkl_intel_ilp64_dll.lib和mkl_intel_thread_dll.lib。
在运行调用MKL的第三方代码时,我也遇到了类似的问题,所以我假设问题是如何配置构建(在Visual Studio 2015中)。
等效的Fortran程序运行正常。
答案 0 :(得分:1)
从Fortran移植到C / C ++时,请检查链接的库。 MKL需要不同的库并使用不同的编译器和设置编译标志。 C编译器不需要至少mkl_blas95_ilp64.lib
。
与默认型号LP64相比,ILP64也不常见。
MKL Link Line Advisor是英特尔为解决此问题而提供的工具。您可以使用它来检查您的库和编译标志是否正确。
https://software.intel.com/en-us/articles/intel-mkl-link-line-advisor