我实际上正在学习CUDA和thrust,并且我正在尝试使用.cpp
,制作一个项目。 hpp
文件和 .cu
、.cuh
文件。因此,我已经做了第一个小实现(参见下面的代码),但是我有一个编译错误。这是output我的编译错误。
老实说,我不知道这种错误到底意味着什么,但我发现它来自这一行:
thrust::device_vector<thrust::complex<T>> deviceVec_;
因为当我注释掉这一行时,就不再有编译错误了。因此,我认为这是由于 thrust::device_vector
的实现内容以及我在 .hpp 中包含
文件,并且由于我的 .cuh
文件所致main.cpp
是由 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
文件混合在一起?
如果我必须改变我的实现,有可能通过关注我的注意力来获得一个类似的例子来说明什么是一个好的实现?
注意:我实际上正在使用带有 cuda 版本的 GTX 1060:
$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
最佳答案
您需要将 main.cpp
重命名为 main.cu
才能正常工作。否则,您将 CUDA 代码导入到纯 .cpp
文件中,主机 C++ 将无法编译该代码。
关于c++ - 推力::复杂的推力::device_vector编译错误,可能是由于错误的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50974743/