Как связать библиотеку CUDA с Cilk++

Я пытаюсь разработать гибридную программу с использованием 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? Если да, то что мне не хватает?


person Ameya    schedule 03.05.2014    source источник


Ответы (1)


Предложение extern должно быть в коде C++, а не в коде CUDA, потому что здесь у вас есть определение функции в файле CUDA, но вы вызываете ее в коде C++.

person Yogi Joshi    schedule 03.05.2014
comment
На самом деле я попытался добавить «extern» в код С++, но получил ту же ошибку. Но теперь я добавил к нему «С++», и теперь он работает. Спасибо.. - person Ameya; 03.05.2014