나는 C로 큰 프로젝트를 가지고 있으며 그 안에 Cuda 커널을 통합하려고합니다. 나는 "gcc -c main.c"와 ".cu"파일을 "nvcc -c cuda_GMRES.cu"파일로 컴파일하고 nvcc : "nvcc -o main"파일과 2 개의 오브젝트 파일을 연결하려고한다. o cuda_GMRES.o "다음과 같은 오류 메시지가 나타납니다 :Cuda mixed C 프로젝트 링크
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o : 함수에서 _start': (.text+0x20): undefined reference to
주 ' collect2 : 신분증 그것은 내가 C 파일과 CUDA를 결합하기 위해 노력하고있어 처음 나는 누군가가 나를 도와 줘요 wrong.Can 짓을했을 수도 1 개 종료 상태
를 반환했습니다. 나는 Rock 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;
}
a.out
라는 기본 연결 프로그램을 방출합니다executable
최종 연결 프로그램의 이름입니다, 또는
당신이됩니다 'nvcc -o main.o cuda_GMRES.o'는 정말로 당신이 사용하고있는 연결 명령입니까? – talonmies예 .. 오류없이 작동해야한다고 생각하십니까? –
아니요 문제가 있습니다 – talonmies