MKL BLAS功能不符合预期

时间:2016-05-11 15:55:17

标签: c visual-c++ intel-mkl

我无法让英特尔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程序运行正常。

1 个答案:

答案 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