openACC pgc ++ vs pgcc,链接时出错

时间:2018-02-19 22:42:32

标签: cuda openacc cufft

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

1 个答案:

答案 0 :(得分: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