C++ CUDA错误:在';无效';
我是CUDA编程新手。为了练习,我尝试运行一个非常简单的程序,将两个数组中的元素添加到一起,然后将结果存储到一个新数组中。出于组织的目的,我试图通过将代码分割成多个文件来实现这一点。提前谢谢你 当我试图编译它时,我一直遇到这个错误: “hello.cpp:6:错误:在'void'之前需要构造函数、析构函数或类型转换” 代码如下: 你好。cppC++ CUDA错误:在';无效';,c++,cuda,C++,Cuda,我是CUDA编程新手。为了练习,我尝试运行一个非常简单的程序,将两个数组中的元素添加到一起,然后将结果存储到一个新数组中。出于组织的目的,我试图通过将代码分割成多个文件来实现这一点。提前谢谢你 当我试图编译它时,我一直遇到这个错误: “hello.cpp:6:错误:在'void'之前需要构造函数、析构函数或类型转换” 代码如下: 你好。cpp #include <simple.h> #include <stdlib.h> #include <stdio.h>
#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;
}
#include <simple.h>
__device__ void adding(int *a, int *b, int *c, int tID)
{
c[tID] = a[tID] + b[tID];
}
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 $@
clean:
rm -f *.o app
objects=hello.o simple.o
全部:$(对象)
/usr/local/cuda-7.0/bin/nvcc-arch=sm_20$(对象)-o应用程序
%.o:%.cpp%.cu
/usr/local/cuda-7.0/bin/nvcc-x cu-arch=sm_20-I-dc$<-o$@
清洁:
rm-f*.o应用程序
这可能是因为主机端cpp文件上声明了\uuuu global\uuuu
。尝试将所有cuda代码放在一个.cu文件中 当我在我的计算机上运行您的项目时,make
似乎在编译*.cpp文件时使用its,这导致使用g++
而不是使用您指定的nvcc
要更改此行为,必须设置变量CXX
和cxflags
。下面的Makefile
对我有用:
objects = hello.o simple.o
CXX = /usr/local/cuda-7.0/bin/nvcc
CXXFLAGS = -x cu -arch=sm_20 -I. -dc
all: $(objects)
$(CXX) $(objects) -o app
%.o: %.cpp %.cu
$(CXX) $(CXXFLAGS) $< -o $@
objects=hello.o simple.o
CXX=/usr/local/cuda-7.0/bin/nvcc
CXXFLAGS=-x cu-arch=sm_20-I-dc
全部:$(对象)
$(CXX)$(对象)-o应用程序
%.o:%.cpp%.cu
$(CXX)$(CXXFLAGS)$<-o$@
有没有一种方法可以让我把CUDA内核放在它自己的.cu文件中声明gobal函数的地方,而把其他所有东西都放在那里?
objects = hello.o simple.o
CXX = /usr/local/cuda-7.0/bin/nvcc
CXXFLAGS = -x cu -arch=sm_20 -I. -dc
all: $(objects)
$(CXX) $(objects) -o app
%.o: %.cpp %.cu
$(CXX) $(CXXFLAGS) $< -o $@