繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM