CUDA 错误:'void'之前的预期构造函数、析构函数或类型转换
CUDA error: expected constructor, destructor, or type conversion before 'void'
我是CUDA编程新手。为了练习,我尝试运行一个非常简单的程序,将两个数组中的元素相加,然后将结果存储在一个新数组中。出于组织目的,我试图通过将代码分成多个文件来实现这一点。提前谢谢你!
当我试图编译它时,我一直得到这个错误:"hello.cpp:6:错误:在' void '之前需要构造函数、析构函数或类型转换"
代码如下: 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 = %dn", 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 $@
clean:
rm -f *.o app
当我在我的计算机上运行您的项目时,make
在编译*.cpp文件时似乎使用其隐式变量,导致使用g++
而不是使用您指定的nvcc
。
要改变这种行为,必须设置变量CXX
和CXXFLAGS
。以下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 $@
这可能是因为主机端cpp文件中__global__
的声明。尝试将所有cuda代码放入.cu文件中。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- new[] / delete[] 并在C++中抛出构造函数/析构函数
- 创建/向容器添加对象时如何使用构造函数/析构函数
- LNK2019构造函数/析构函数使用 C++ Dll
- 有人可以解释一下这里发生了什么(类和构造函数/析构函数)吗?
- 带智能ptr的Pimpl-为什么需要构造函数/析构函数
- 需要构造函数/析构函数/类型转换错误
- Boost共享指针构造函数/析构函数
- 通过值或引用调用时未调用构造函数/析构函数.不管怎样
- C++构造函数析构函数中的奇怪行为
- 构造函数/析构函数链接错误
- 在模板化函数中调用具有特征的显式构造函数/析构函数
- c++构造函数/析构函数
- 为什么赋值的成本不能保证小于构造函数-析构函数对
- 重写默认构造函数/析构函数而不实现它们
- 使用自定义分配器调用对象构造函数/析构函数
- 涉及类和结构的构造函数/析构函数
- 在抽象构造函数/析构函数中调用纯虚拟函数安全吗
- 如果在没有限定的情况下从构造函数/析构函数调用虚拟函数,则是否会发生虚拟调度
- C++基于堆栈的构造函数/析构函数无法按预期工作