openACC pgc++ vs pgcc,链接时出错
openACC pgc++ vs pgcc, error at linking
我从 https://www.olcf.ornl.gov/tutorials/mixing-openacc-with-gpu-libraries/ 下载了示例
代码在上面的mwntioned链接中给出
1) 使用 pgcc
pgc++ -c cuFFT.cu
pgcc -acc -Mcudalib=cufft fft.c cufft.o
works perfectly fine
2) 使用 pgc++
pgc++ -c cuFFT.cu
pgc++ -acc -Mcudalib=cufft fft.cpp (or .c samefiles) cufft.o
我收到以下错误
undefined reference to launchCUFFT(float*, int, void*)
pgacclnk: child process exit status 1: /usr/bin/ld
您 运行 陷入 C/C++ 链接不匹配。
为了让它在 PGI 17.9 工具中工作,我必须:
- 将 cuFFT.cu 重命名为 cuFFT.cpp
从以下位置编辑 fft.c 中的 malloc 行:
float *data = malloc(2*n*sizeof(float));
至:
float *data = (float *)malloc(2*n*sizeof(float));
将fft.c中的声明修改为:
extern void launchCUFFT(float *d_data, int n, void *stream);
至:
extern "C" void launchCUFFT(float *d_data, int n, void *stream);
发出以下编译命令:
$ pgc++ -c cuFFT.cpp
$ pgc++ -acc -Mcudalib=cufft fft.c cuFFT.o
我从 https://www.olcf.ornl.gov/tutorials/mixing-openacc-with-gpu-libraries/ 下载了示例 代码在上面的mwntioned链接中给出
1) 使用 pgcc
pgc++ -c cuFFT.cu
pgcc -acc -Mcudalib=cufft fft.c cufft.o
works perfectly fine
2) 使用 pgc++
pgc++ -c cuFFT.cu
pgc++ -acc -Mcudalib=cufft fft.cpp (or .c samefiles) cufft.o
我收到以下错误
undefined reference to launchCUFFT(float*, int, void*)
pgacclnk: child process exit status 1: /usr/bin/ld
您 运行 陷入 C/C++ 链接不匹配。
为了让它在 PGI 17.9 工具中工作,我必须:
- 将 cuFFT.cu 重命名为 cuFFT.cpp
从以下位置编辑 fft.c 中的 malloc 行:
float *data = malloc(2*n*sizeof(float));
至:
float *data = (float *)malloc(2*n*sizeof(float));
将fft.c中的声明修改为:
extern void launchCUFFT(float *d_data, int n, void *stream);
至:
extern "C" void launchCUFFT(float *d_data, int n, void *stream);
发出以下编译命令:
$ pgc++ -c cuFFT.cpp $ pgc++ -acc -Mcudalib=cufft fft.c cuFFT.o