首页 文章

使用Eclipse Nsight编译CUDA英特尔MKL

提问于
浏览
0

我想在我的一个头文件中实现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,并使用 -Xcompiler 直接设置 -mkl 选项 .

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

构建目标: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 todstevr'makefile:59:目标'cuMatlab'的配方失败make: [cuMatlab]错误1

我需要添加库路径吗?有任何想法吗?

1 回答

  • 1

    您可以将 nvccicpc 和MKL混合在一起,但至少您必须使用 icpcnvcc 识别的选项明确链接MKL,例如 -L-l . '-mkl'是仅由 icpc 识别的选项的捷径 . 您可以参考Intel® Math Kernel Library Link Line Advisor获取选项详细信息 .

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

    更新

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

相关问题