У меня большой проект на C, и я пытаюсь интегрировать в него некоторые ядра Cuda.Я компилирую мои c-файлы с помощью "gcc -c main.c", а мои .cu файлы с помощью "nvcc -c cuda_GMRES.cu", а затем пытаюсь связать 2 объектных файла с помощью nvcc: "nvcc -o main.o cuda_GMRES.o "и получите следующую ошибку:
/ usr / lib / gcc / x86_64-redhat-linux / 4.1.2 /../../../../ lib64 / crt1.o: В функции _start':
(.text+0x20): undefined reference to
main 'collect2: ld вернул 1 состояние выхода
Я впервые пытаюсь объединить cuda с файлами C, и я мог сделать что-то не так. Может кто-нибудь помочь мне, пожалуйста.Я нахожусь на кластере GPU с ОС Rocks.
Мой файл 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;
}