如何将CUDA库与Cilk ++链接起来

时间:2014-05-03 03:06:38

标签: cuda cilk cilk-plus

我正在尝试使用英特尔的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联系起来吗?如果是这样,我错过了什么?

1 个答案:

答案 0 :(得分:1)

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