gpt4 book ai didi

c++ - thrust::device_vector of thrust::complex 编译错误,可能是由于错误的实现

转载 作者:行者123 更新时间:2023-11-30 03:22:39 29 4
gpt4 key购买 nike

我实际上正在学习CUDAthrust,我正在尝试用.cpp做一个项目,。 hpp 文件和 .cu, .cuh 文件。因此,我做了第一个小实现(见下面的代码),但是我有一个编译错误。这是 output我的编译错误。

老实说,我不知道这种错误到底是什么意思,但我发现这是来自这一行:

thrust::device_vector<thrust::complex<T>> deviceVec_;

因为当我注释掉这一行时,就没有编译错误了。因此,我假设这是由于 thrust::device_vector 的实现内容以及我在 .hpp 中包含 .cuh 文件的事实 文件,因为我的 main.cppg++ 处理,所以预处理将由 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++ - thrust::device_vector of thrust::complex 编译错误,可能是由于错误的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50974743/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com