C++ 如何将CUDA集成到现有的类结构中?
我有一个基于CPU的简单深度学习框架的工作实现,其中主要组件是计算图的节点,可以对张量执行计算 现在我需要将我的实现扩展到GPU,我想使用现有的类结构,只将其功能扩展到GPU,但是,我不确定这是否可行 大多数类都有处理和返回张量的方法,例如:C++ 如何将CUDA集成到现有的类结构中?,c++,c++11,cuda,C++,C++11,Cuda,我有一个基于CPU的简单深度学习框架的工作实现,其中主要组件是计算图的节点,可以对张量执行计算 现在我需要将我的实现扩展到GPU,我想使用现有的类结构,只将其功能扩展到GPU,但是,我不确定这是否可行 大多数类都有处理和返回张量的方法,例如: tensor_ptr get_output(); 其中,tensor\u ptr只是我的tensor类的std::shared\u ptr指针。现在我想做的是为每种方法添加一个GPU版本。我的想法是在一个单独的文件tensor\u gpu.cuh中定义一
tensor_ptr get_output();
其中,tensor\u ptr
只是我的tensor类的std::shared\u ptr
指针。现在我想做的是为每种方法添加一个GPU版本。我的想法是在一个单独的文件tensor\u gpu.cuh
中定义一个struct
,如下所示
struct cu_shape {
int n_dims;
int x,y,z;
int len;
};
struct cu_tensor {
__device__ float * array;
cu_shape shape;
};
然后,前面的函数将通过以下方式镜像:
cu_tensor cu_get_output();
问题似乎是<>代码> Cuh < /Cux>文件被当作一个常规的头文件处理,并由默认的C++编译器编译,并给出错误:
error: attribute "device" does not apply here
在具有\uuuu设备\uuuuu浮点*数组定义的行上
<>我知道你不能混合CUDA和纯C++代码,所以我计划把所有的CUDA运行时API函数隐藏到 Cu/Cux>文件中,这些文件将在<代码> .H/COD>文件中定义。问题是我想在类中存储设备指针,然后将它们传递给CUDA调用函数
这样,我仍然可以使用所有现有的对象结构,只修改初始化和计算部分
如果一个规则的C++类不能用C++来触碰任何东西,那么,你怎么能把CUDA代码集成到C++代码中呢?
只能在
.cu
文件中使用CUDA运行时调用和关键字吗
还是有一些聪明的方法来隐藏C++编译器处理CUDA指针的事实?
任何洞察都是非常感激的
编辑:我似乎有误解。不需要设置\uuu设备\uuu
标志,您仍然可以将其用作指向设备内存的指针。如果您有一些有价值的东西可以添加到CUDA集成的良好实践中,或者澄清一些其他东西,请不要犹豫 “uuuu”保留用于实施目的。这就是英伟达实现可以使用<代码>但是另一个“正则”C++实现有自己的保留符号。
事后看来,Nvidia本可以设计出更好的解决方案,但这对您毫无帮助。您能详细说明一下吗?您所说的实施目的是什么意思?这些属性可以在.cu
文件中使用,但不能在其他任何地方使用。我的猜测是,它只是nvcc编译器的一个有效属性,还是完全是另一个属性?它对nvcc是有效的。我不知道它在python或java中做什么。这就是断章取义的问题所在。甚至在C++中,它也脱离了上下文。