使用 Eclipse Nsight 编译 CUDA + Intel MKL
Posted
技术标签:
【中文标题】使用 Eclipse Nsight 编译 CUDA + Intel MKL【英文标题】:Compiling CUDA + Intel MKL with Eclipse Nsight 【发布时间】:2016-11-26 12:04:45 【问题描述】:我想在我的一个头文件中实现 mkl_lapack 的三对角特征值算法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 链接器 /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: 目标“cuMatlab”的配方失败 make: *** [cuMatlab] 错误 1
我需要添加库路径吗?有什么想法吗?
【问题讨论】:
【参考方案1】:您可以将nvcc
、icpc
和MKL 混合在一起,但至少您必须将MKL 与icpc
和nvcc
都识别的选项显式链接,例如-L
和-l
。 '-mkl' 是那些仅由icpc
识别的选项的快捷方式。选项详情可以参考Intel® Math Kernel Library Link Line Advisor。
如果您想要更具体的答案,您可以创建一个示例来演示您计划如何编译和链接代码。
更新
根据您的更新,您找到了 NVCC 编译器的 -Xcopmiler
位置。但是对于 NVCC 链接器,您只指定了 -ccbin
而不是 -Xlinker
。您将能够在 NVCC 链接器页面的类似位置找到-Xlinker
。这是您应该将-mkl
放入的地方。它会将合适的选项传递给链接器icpc
。
【讨论】:
以上是关于使用 Eclipse Nsight 编译 CUDA + Intel MKL的主要内容,如果未能解决你的问题,请参考以下文章
Nsight Eclipse not found/CUDA11.1安装问题
在 Nsight Eclipse 7.5 中进行分析以使用 NVTX 时,正确的 CUDA 项目配置是啥?
cuda-gdb 在 Linux 上的 nsight 中不起作用
使用 Nsight Systems 跟踪自定义 CUDA 内核