修改现有C++代码,以便在使用 CUDA 在 GPU 上运行
Modifying existing C++ code for running on GPU using CUDA
我有一个A类,它实现了复杂的算法,并具有许多公共/私有成员函数。这个类使用另一个B类的对象,它实现3D-Vector操作,因此有许多成员函数(+
,-
,/
,*
,==
,!=
等)。
类 A
旨在在具有多个 CPU 线程的 CPU 上运行。这两个类都使用许多STL容器,如对,向量(对象指针),字符串,映射,多重映射,集合,队列等,并使用位真数据类型,如uint32_t
。
现在我想将类 A
的一个算法(成员函数)转换为 CUDA 内核,该内核可以由 16 个 CPU 线程执行,从而在开普勒 GPU 上同时运行 16 个内核。这意味着类 A 和类 B 的成员函数需要在 GPU 上可执行。此外,我需要使用 Thrust 执行任何特定于 STL 的内容,或者编写自己的 CUDA 代码来实现该容器/算法
为此,我可以想到两种方法
- 修改我现有的混合主机和设备功能的C++代码
- 使用我现有的C++代码从头开始创建 CUDA C++代码(类)
使用 C,修改现有代码相当容易。但对于C++来说,这是一项相当复杂的练习,如果现有代码大量使用 STL,它会变得更加复杂。
所以问题是修改我的 C++/STL 重代码以使其准备好 CUDA 的最佳方法是什么?
--更新--
- C++类的成员函数不能标记为
__global__
以使其成为内核。这意味着内核函数始终需要是一个可以由成员函数调用的非成员函数。
我发现这篇文章很有帮助,基本上,这个想法是你在函数之前放置一些宏,使它们在主机和设备上都可以编译。
相关文章:
- 使 C++ Pi 近似在 GPU Nvidia 970M CUDA 上的 Paralell 中运行
- Cuda 中的多个 GPU - 以前可以使用代码,但现在不再使用
- 如何使用 CUDA 将 std::vector<std::string> 复制到 GPU 设备
- 命令提示符下的 NVCC CUDA 不使用 GPU
- CUDA 数组如何存储在 GPU 内存中?它们在物理上是线性的吗?
- 是否可以在多线程而不是 cuda/opencl C++运行 GPU?
- 强制 Dlib python 仅使用 CPU 支持进行安装;在具有 Cuda 和所有内容的 GPU 机器上
- CUDA(GPU)作为OpenCV后端
- GPU 内存访问和使用 (CUDA)
- OpenCV 3.4.0 中带有 cuda 的连接组件(在 GPU 上)
- 如何在多个 GPU 上同时执行 cufftXt 和 CUDA 内核
- 低性能 – 补丁匹配.GPU 上的图像处理 (CUDA)
- 如何在单独的CUDA函数中分配GPU内存
- GPU cuda 代码是否适用于多个 GPU 卡而无需任何实现
- 在我的CUDA运行时间计划中,CPU和GPU可以异步计算,但不能合作地计算
- 如何确定CUDA gpu的性能
- 调用函数时 CUDA/GPU 中的异常错误
- 是否有针对CUDA-GPU或MPI-CPU + CUDA-GPU的基准测试
- 保持主机数据完整,同时传输到CUDA GPU
- 使用推力将部分数据集复制到多个 CUDA GPU