1

我正在尝试使用 Intel 的 Cilk++ 和 Nvidia 的 CUDA 开发一些混合程序。我从 Cuda 代码(libtest.so)创建了一个共享库。我想将它与 Cilk++ 程序链接,这样我就可以将一些工作卸载到 GPU 上。但是当我编译 cilk++ 程序时,我无法将它与这个 cuda 库链接,并且出现如下错误:

nvcc -arch=compute_20 -L. -code=sm_20 -L. -o libtest.so --shared -Xcompiler -fPIC test.cu;

cilk++ -o main -L. -ltest main.cilk;

/tmp/ccwDvzCG.o: In function `int cilk_main(int, char**)':
main.cilk:(.text+0x26): undefined reference to `void entry()'
collect2: ld returned 1 exit status

文件:test.cu

#include <stdio.h>

__global__ void myk(void){
    printf("Hello from thread %d block %d\n", threadIdx.x, blockIdx.x);
}

extern "C++"
void entry(void){
    myk<<<1,1>>>();
    printf("CUDA status: %d\n", cudaDeviceSynchronize());
}

文件:main.cilk

#include <cilk.h>

void entry(void);

int cilk_main(void){
    entry();
}

以前我已经将 Cilk 库与 CUDA 代码相关联,但现在我想要反过来。是否可以将 CUDA 与 Cilk 链接?如果是这样,我错过了什么?

4

1 回答 1

1

extern 子句应该在 C++ 代码中,而不是在 CUDA 代码中,因为这里您在 CUDA 文件中定义了函数,但您在 C++ 代码中调用它。

于 2014-05-03T05:00:42.177 回答