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 工具中工作,我必须:

  1. 将 cuFFT.cu 重命名为 cuFFT.cpp
  2. 从以下位置编辑 fft.c 中的 malloc 行:

    float *data = malloc(2*n*sizeof(float));
    

    至:

    float *data = (float *)malloc(2*n*sizeof(float));
    
  3. 将fft.c中的声明修改为:

    extern void launchCUFFT(float *d_data, int n, void *stream);
    

    至:

    extern "C" void launchCUFFT(float *d_data, int n, void *stream);
    
  4. 发出以下编译命令:

    $ pgc++ -c cuFFT.cpp
    $ pgc++ -acc   -Mcudalib=cufft fft.c cuFFT.o