4

我在 Visual Studio C/C++ 编译器之上使用英特尔数学内核库 (MKL)。我已经设置了我的附加包含目录、附加库目录、附加依赖变量以链接到 MKL 库,但是当我运行矩阵乘法示例代码时,我仍然遇到链接错误,谁能告诉我我在那里错过了什么?

#define min(x,y) (((x) < (y)) ? (x) : (y))
#include <stdio.h>
#include <stdlib.h>
#include "mkl.h"

int main()
{
double *A, *B, *C;
int m, n, p, i, j;
double alpha, beta;
m = 2000, p = 200, n = 1000;
alpha = 1.0; beta = 0.0;

A = (double *)mkl_malloc( m*p*sizeof( double ), 64 );
B = (double *)mkl_malloc( p*n*sizeof( double ), 64 );
C = (double *)mkl_malloc( m*n*sizeof( double ), 64 );
if (A == NULL || B == NULL || C == NULL) {
  printf( "\n ERROR: Can't allocate memory for matrices. Aborting... \n\n");
  mkl_free(A);
  mkl_free(B);
  mkl_free(C);
  return 1;
}

printf (" Intializing matrix data \n\n");
for (i = 0; i < (m*p); i++) {
    A[i] = (double)(i+1);
}

for (i = 0; i < (p*n); i++) {
    B[i] = (double)(-i-1);
}

for (i = 0; i < (m*n); i++) {
    C[i] = 0.0;
}

printf (" Computing matrix product using Intel® MKL dgemm function via CBLAS interface \n\n");
cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, 
            m, n, p, alpha, A, p, B, n, beta, C, n);

mkl_free(A);
mkl_free(B);
mkl_free(C);

printf (" Example completed. \n\n");
return 0;
}
4

2 回答 2

0

很难说,因为源代码对于链接器错误并没有那么有用。如果链接器说它找不到函数,那么无论源代码是否成功编译,您都没有链接正确的库。

我要寻找的一件事是,仅指定库目录并没有什么好处,因为它们只是在查找库时提供了不同的搜索路径。您仍然需要指定要链接的实际库本身。

根据您问题中的信息,这是可能的原因之一。

于 2012-11-25T02:14:55.013 回答
0

您可以使用MKL Link line advisor。此外,您可以按照此链接中的步骤将 MKL 与 Microsoft Visual Studio 链接。

于 2013-07-29T21:35:55.503 回答