我正在尝试使用英特尔的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联系起来吗?如果是这样,我错过了什么?
答案 0 :(得分:1)
extern子句应该是C ++代码而不是CUDA代码,因为这里你在CUDA文件中定义了函数,但你用C ++代码调用它。