我从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
答案 0 :(得分:1)
您遇到了C / C ++链接不匹配问题。
为了在PGI 17.9工具中实现这一点,我不得不:
编辑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