可能重复:
我可以在 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