Неопределенная ссылка на функцию для реализации cuda

Я написал приложение CUDA, которое имеет main.cpp это включает в себя Common.h файл

#include "Common.h"int main(int argc , char **argv)
{
...
DeviceFunc(a_h , numvar , b_h); //Showing the data
....
}

Затем, Common.h содержит:

 #ifndef __Common_H
#define __Common_H
#endif
void DeviceFunc(float * , int , float *);

Также, DeviceFunc.cu находится в той же папке:

 #include<cuda.h>
#include<stdio.h>
#include "Common.h"__device__ __global__ void Kernel(float *, float * ,int );
void DeviceFunc(float *temp_h , int numvar , float *temp1_h)
{
float *a_d , *b_d;
//Memory allocation on the device
cudaMalloc(&a_d,sizeof(float)*(numvar)*(numvar+1));
cudaMalloc(&b_d,sizeof(float)*(numvar)*(numvar+1));

//Copying data to device from host
cudaMemcpy(a_d, temp_h, sizeof(float)*numvar*(numvar+1),cudaMemcpyHostToDevice);

//Defining size of Thread Block
dim3 dimBlock(numvar+1,numvar,1);
dim3 dimGrid(1,1,1);

//Kernel call
Kernel<<<dimGrid , dimBlock>>>(a_d , b_d , numvar);

//Coping data to host from device
cudaMemcpy(temp1_h,b_d,sizeof(float)*numvar*(numvar+1),cudaMemcpyDeviceToHost);

//Deallocating memory on the device
cudaFree(a_d);
cudaFree(b_d);
}

}

Теперь, когда я компилирую код с nvcc -o main main.cppЯ получаю эту ошибку main.cpp:(.text+0x3a0): undefined reference to 'DeviceFunc(float*, int, float*)'

В чем проблема

1

Решение

Неопределенная ссылка на функцию возникает, когда компилятор находит прототип функции а также не найти ссылку на функцию во время ссылки. Чтобы избежать этой ошибки компоновки, вы должны 1) компилировать и компилировать целые файлы одной командой, или 2) разделять процесс компиляции и компоновки. Я рекомендую последнее следующим образом:

nvcc -c main.cpp
nvcc -c DeviceFunc.cu
nvcc -c Kernel.cu
nvcc main.o DeviceFunc.o Kernel.o -o main

Обратите внимание, что показанные вами коды пропускают файл, содержащий тело Kernel функция. Я предположил тело Kernel функция включена в Kernel.cu,

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector