[英]Compile error with thrust::device_vector of thrust::complex, possibly due to a wrong implementation
我实际上正在学习CUDA和推力 ,并且正在尝试使用.cpp
, .hpp
文件和.cu
, .cuh
文件制作项目。 因此,我已经完成了第一个小实现(请参见下面的代码),但是出现编译错误。 这是我的编译错误的输出 。
老实说,我不确切知道这种错误是什么意思,但是我发现这来自以下行:
thrust::device_vector<thrust::complex<T>> deviceVec_;
因为当我注释掉这一行时,不再有编译错误。 因此,我认为这是由于thrust::device_vector
的实现内容以及我在.cuh
文件中包括了.hpp
文件并且由于我的main.cpp
是由g++
处理的这一事实所.cuh
,因此, 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
文件混合在一起的项目的.hpp
?
如果我必须更改自己的实现,那么有可能通过关注我得到一个类似的例子,说明一个好的实现是什么?
注意:我实际上正在使用带有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 ++将无法编译该代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.