c++ - 推力::复杂的推力::device_vector编译错误,可能是由于错误的实现

标签 c++ cuda thrust

我实际上正在学习CUDAthrust,并且我正在尝试使用.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/

相关文章:

concurrency - 推力执行策略将内核发布到默认流

c++ - 为什么我们在迭代可变模板参数时必须使用额外的构造?

C++ 0x11 - std::bind 和组合

c++ - 使用 libgtkhtml c c++ 显示网页

c++ - 没有函数模板的实例与参数列表匹配(试图打印数组)

c++ - 如何动态创建方法来对运行时初始化的类对象进行操作

c++ - 表示嵌套的 C++ 模板

foreach - 如何解决 CUDA Thrust 库 - for_each 同步错误?

c++ - 实现交换/复制功能 : is there a better way?

c++ - Golang 调用 CUDA 库