我正在尝试使用 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 链接?如果是这样,我错过了什么?