如何从cpp文件中调用cuda函数

时间:2013-01-24 08:54:09

标签: c++ cuda

  

可能重复:
  Can I call cuda function calls in C++?

我有功能

__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

我做错了什么?

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

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 *)”,引自:

_main in ccjLlw82.o

ld:找不到架构x86_64的符号

collect2:ld返回1退出状态

make:*** [program]错误1

PS:使用macosx

0 个答案:

没有答案