使用Eclipse Nsight编译CUDA + Intel MKL

时间:2016-07-22 14:25:29

标签: cuda icc intel-mkl

我想在我的一个头文件中实现mkl_lapack的tridiagonal特征值算法dstevr

#include "mkl.h"

void trideigs(int N, int LDZ, double *Z, double *W, double *D, double *E){

double VL=0.0, VU=1.0, ABSTOL=0.0;
int IL=1, IU=N, M=N, LWORK=20*N, LIWORK=10*N, INFO;

int *ISUPPZ=(int*)malloc(2*M*sizeof(int));
int *IWORK=(int*)malloc(LIWORK*sizeof(int));
W=(double*)malloc(N*sizeof(double));
Z=(double*)malloc(LDZ*M*sizeof(double));
double *WORK=(double*)malloc(LWORK*sizeof(double));

dstevr("V","A",&N,D,E,&VL,&VU,&IL,&IU,&ABSTOL,&M,W,Z,&LDZ,ISUPPZ,WORK,&LWORK,IWORK,&LIWORK,&INFO);
}

我设法将Nsight的默认编译器更改为icc,并使用-mkl直接设置-Xcompiler选项。

在编译时,NVCC编译器成功运行,但NVCC Linker失败并显示以下错误消息:

  

构建目标:cuMatlab   调用:NVCC Linker   /usr/local/cuda-8.0/bin/nvcc --cudart static -L / usr / local / cuda / lib64 -ccbin / opt / intel / bin / icpc --relocatable-device-code = false -gencode arch = compute_52 ,code = compute_52 -gencode arch = compute_52,code = sm_52 -link -o“cuMatlab”./src/cuMatlab.o -lcublas -lcusolver -lcufft -lgomp   ./src/cuMatlab.o:在函数trideigs(int, int, double*, double*, double*, double*)': /tmp/tmpxft_000045f8_00000000-13_cuMatlab.ii:85694: undefined reference to dstevr'中   makefile:59:目标'cuM​​atlab'的配方失败了   make:*** [cuMatlab]错误1

我是否需要添加库路径?有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以将nvccicpc和MKL混合在一起,但至少您必须明确地将MKL与icpcnvcc识别的选项相关联,例如-L-l。 '-mkl'是仅icpc识别的选项的捷径。您可以参考Intel® Math Kernel Library Link Line Advisor了解选项详情。

如果您需要更具体的答案,可以创建一个示例来演示您计划如何编译和链接代码。

更新

根据您的更新,您已找到NVCC编译器-Xcopmiler的位置。但是对于NVCC Linker,您只指定了-ccbin而不是-Xlinker。您可以在NVCC Linker页面中的类似位置找到-Xlinker。这是你应该放置-mkl的地方。它会将合适的选项传递给链接器icpc