我实际上正在学习 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
答案 0 :(得分:2)
您需要将main.cpp
重命名为main.cu
才能完成此工作。否则,您要将CUDA代码导入到简单的.cpp
文件中,主机C ++将无法编译该代码。