实际上,我正在学习CUDA和 to ,我正在尝试用.cpp、.hpp文件和.cu、.cuh文件来做一个项目。因此,我已经完成了第一个小实现(参见下面的代码),但是我有一个编译错误。这是编译错误的输出。
老实说,我不知道这种错误到底意味着什么,但我发现这是从这一行中得到的:
thrust::device_vector<thrust::complex<T>> deviceVec_;因为当我注释掉这一行时,就没有编译错误了。因此,我假设这是由于thrust::device_vector实现的内容,以及我在.hpp文件中包含了.cuh文件,并且由于.cuh由g++处理,所以预处理将由g++而不是nvcc执行。
我的main.cpp文件的内容:
#include "QGPU.hpp"
int main()
{
QGPU::GPU<double> gpu;
return (0);
}我的.hpp文件的内容:
#pragma once
# include "QCUDA.cuh"
namespace QGPU {
template<typename T>
class GPU {
private:
QCUDA::CUDAGPU<T> cgpu_;
public:
GPU();
virtual ~GPU();
};
template<typename T>
GPU<T>::GPU()
{};
template<typename T>
GPU<T>::~GPU()
{};
};我的.cuh文件的内容:
#pragma once
# include <thrust/host_vector.h>
# include <thrust/device_vector.h>
# include <thrust/complex.h>
namespace QCUDA {
template<typename T>
class CUDAGPU {
private:
thrust::host_vector<thrust::complex<T>> hostVec_;
thrust::device_vector<thrust::complex<T>> deviceVec_;
public:
CUDAGPU();
virtual ~CUDAGPU();
};
template<typename T>
CUDAGPU<T>::CUDAGPU()
{};
template<typename T>
CUDAGPU<T>::~CUDAGPU()
{};
};因此,我的问题是:
是否有解决此编译错误的方法,从而维护此实现?
或者我必须改变我对如何实现一个.cpp、.hpp文件和.cu、.cuh文件混合在一起的项目的看法?
如果我必须改变我的实施,有可能得到一个类似的例子,什么是好的实施,跟踪我的注意力?
NB: --实际上我正在使用一个GTX 1060和cuda版本:
$nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Wed_Apr_11_23:16:29_CDT_2018
Cuda compilation tools, release 9.2, V9.2.88发布于 2018-06-21 18:43:59
您需要将main.cpp重命名为main.cu以使其工作。否则,您将把CUDA代码导入普通的.cpp文件,主机C++将无法编译该代码。
https://stackoverflow.com/questions/50974743
复制相似问题