使用 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 todstevr' makefile:59: 目标“cuMatlab”的配方失败 make: *** [cuMatlab] 错误 1

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

【问题讨论】:

【参考方案1】:

您可以将nvccicpc 和MKL 混合在一起,但至少您必须将MKL 与icpcnvcc 都识别的选项显式链接,例如-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 内核

如何在 nvidia Nsight eclipse 中使用 GNU 科学库 (gsl)

使用并行 nsight 2.2 创建新的 CUDA 项目