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