可能由于错误的实现而导致带有推力::: complex的推力:: device_vector的错误

时间:2018-06-21 17:47:38

标签: c++ cuda thrust

我实际上正在学习 CUDA 推力,并且我试图使用.cpp.hpp文件和{ {1}},.cu个文件。因此,我已经完成了第一个小实现(请参见下面的代码),但是出现编译错误。这是我的编译错误的output

老实说,我不确切知道这种错误是什么意思,但是我发现这是来自以下行:

.cuh

因为当我注释掉这一行时,不再有编译错误。因此,我认为这是由于thrust::device_vector<thrust::complex<T>> deviceVec_; 的实现内容以及我将thrust::device_vector文件包含在.cuh文件中,并且由于我的.hpp是由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文件混合在一起的项目的看法?

如果我必须更改自己的实现,是否有可能通过关注我得到一个类似的例子,说明一个好的实现?

注意::我实际上正在使用具有cuda版本的GTX 1060:

.cuh

1 个答案:

答案 0 :(得分:2)

您需要将main.cpp重命名为main.cu才能完成此工作。否则,您要将CUDA代码导入到简单的.cpp文件中,主机C ++将无法编译该代码。