我在C中有一個大項目,我正在嘗試集成一些Cuda內核。我正在使用「gcc -c main.c」編譯我的c文件,使用「nvcc -c cuda_GMRES.cu」編譯我的.cu文件,然後嘗試使用nvcc鏈接兩個目標文件:「nvcc -o main。 o cuda_GMRES.o「,並收到以下錯誤:Cuda混合C項目鏈接
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o:在功能 _start': (.text+0x20): undefined reference to
主 collect2:LD返回1個退出狀態
這是我第一次嘗試使用CUDA C文件結合起來,我可能會做一些wrong.Can有人幫我請。我在使用Rocks OS的GPU羣集上。
我的main.c文件:
#include <stdio.h>
#include <math.h>
#include "cuda_wrapper.h" //header containing wrapper function
//cuda_GMRES that calls the kernel cuda_dot
int main (int argc,char* argv[])
{
//content
//bla bla bla
//cuda Function call
cuda_GMRES(50);
return 0;
}
我cuda_wrapper.h文件:
#ifndef Cuda_GMRES_cuda_wrapper_h
#define Cuda_GMRES_cuda_wrapper_h
//wrapper function declaration
void cuda_GMRES(double a);
#endif
包含內核調用函數我cuda_GMRES.cu文件:
#include <stdio.h>
#include "cuda_wrapper.h"
#include "cuda_dot.cu"
//kernel declaration
__global__ void cuda_dot();
//kernel calling function
extern "C"
void cuda_GMRES(double a)
{
double b;
double *dev_a;
double *res;
cudaMemcpy(dev_a, &a, sizeof(double), cudaMemcpyHostToDevice);
cuda_dot<<< 1, 1 >>>(*dev_a, res);
cudaMemcpy(&b, res, sizeof(double), cudaMemcpyDeviceToHost);
}
我包含內核的cuda_dot.cu文件:
__global__ void cuda_dot(double a, double *help)
{
*help=2*a;
}
默認鏈接的程序你確定'nvcc -o main.o cuda_GMRES.o'確實是你正在使用的鏈接命令? – talonmies 2012-02-18 12:33:27
是的..你認爲它應該沒有錯誤? – 2012-02-18 12:36:06
沒問題 – talonmies 2012-02-18 12:38:20