1

可能重复:
我可以在 C++ 中调用 cuda 函数调用吗?

我有功能

__global__ void Function(int *A, int *B, int N) {
  calculations...
}

void Function_Wrapper(int* a_h, int* b_h) {
  dimGrid, dimBlock;
  Function<<<dimGrid, dimBlock>>>(a_d,b_d,n);
}

在 .cu 文件和函数内部

int main() {
  Create data and other crap...

  Function_Wrapper (a_h, b_h);
}

但是当我尝试编译时,我得到的是:

cmain.cpp:39:错误:“Function_Wrapper”未在此范围内声明

我正在像这样编译它:

all: program

program: cudacode.o
    g++ -o ctp -L /usr/local/cuda/lib64 -lcuda -lcudart cmain.cpp cudacode.o 

cudacode.o:
    nvcc -c -arch=sm_20 cmain.cu 

clean: rm -rf *.o

我究竟做错了什么?

编辑:我用主文件中的外部函数声明修复了缺少函数的问题,但我仍然遇到一些问题。新的生成文件:

all: program

program: cudacode.o
    g++ -o ctp -L /Developer/NVIDIA/CUDA-5.0/lib -lcudart cmain.cpp cudacode.o 

cudacode.o:
    nvcc -c -arch=sm_20 cmain.cu -o cudacode.o 

clean: rm -rf *.o

新的错误信息:

g++ -o ctp -L /Developer/NVIDIA/CUDA-5.0/lib -lcudart cmain.cpp cudacode.o

ld:警告:忽略文件 cudacode.o,文件是为 i386 构建的,它不是被链接的架构(x86_64):cudacode.o

架构 x86_64 的未定义符号:

“Function_Wrapper(int*, int*)”,引用自:

ccjLlw82.o 中的 _main

ld:未找到架构 x86_64 的符号

collect2: ld 返回 1 个退出状态

make: *** [程序] 错误 1

PS:使用macosx

4

0 回答 0