1

我从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
4

1 回答 1

1

您遇到了 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
    
于 2018-02-19T23:36:02.567 回答