Я новичок в программировании CUDA. Чтобы практиковать, я пытаюсь запустить очень простую программу, которая объединяет элементы в два массива, а затем сохраняет результат в новом массиве. Для организационных целей я пытаюсь сделать это, разделив код на несколько файлов. ЗАРАНЕЕ БЛАГОДАРЮ!Ошибка CUDA: ожидаемый конструктор, деструктор или преобразование типа перед 'void'
я получаю эту ошибку, когда я пытаюсь скомпилировать его: «hello.cpp: 6: ошибка: ожидается преобразование конструктор, деструктор, или типа, прежде чем" недействительным»
Вот код: hello.cpp
#include <simple.h>
#include <stdlib.h>
#include <stdio.h>
#define N 100
__global__ void add(int *a, int *b, int *c)
{
int tID = blockIdx.x;
if (tID < N)
{
adding(a, b, c, tID);
}
}
int main()
{
int a[N], b[N], c[N];
int *dev_a, *dev_b, *dev_c;
cudaMalloc((void **) &dev_a, N*sizeof(int));
cudaMalloc((void **) &dev_b, N*sizeof(int));
cudaMalloc((void **) &dev_c, N*sizeof(int));
// Fill Arrays
for (int i = 0; i < N; i++)
{
a[i] = i,
b[i] = 1;
}
cudaMemcpy(dev_a, a, N*sizeof(int), cudaMemcpyHostToDevice);
cudaMemcpy(dev_b, b, N*sizeof(int), cudaMemcpyHostToDevice);
add<<<N,1>>>(dev_a, dev_b, dev_c);
cudaMemcpy(c, dev_c, N*sizeof(int), cudaMemcpyDeviceToHost);
for (int i = 0; i < N; i++)
{
printf("%d + %d = %d\n", a[i], b[i], c[i]);
}
return 0;
}
simple.cpp
#include <simple.h>
__device__ void adding(int *a, int *b, int *c, int tID)
{
c[tID] = a[tID] + b[tID];
}
simple.h
#ifndef __simple_h__
#define __simple_h__
__device__ void adding(int *a, int *b, int *c, int tID);
#endif
Makefile
objects = hello.o simple.o
all: $(objects)
/usr/local/cuda-7.0/bin/nvcc -arch=sm_20 $(objects) -o app
%.o: %.cpp %.cu
/usr/local/cuda-7.0/bin/nvcc -x cu -arch=sm_20 -I. -dc $< -o [email protected]
clean:
rm -f *.o app
Есть ли способ, что я мог бы поставить только ядро CUDA, где функция __gobal__ объявлен в отдельном файле .CU и оставить все остальное, где это? – spoonertaylor