修改现有C++代码,以便在使用 CUDA 在 GPU 上运行

Modifying existing C++ code for running on GPU using CUDA

本文关键字:CUDA GPU 运行 C++ 代码 修改      更新时间:2023-10-16

我有一个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__以使其成为内核。这意味着内核函数始终需要是一个可以由成员函数调用的非成员函数。

我发现这篇文章很有帮助,基本上,这个想法是你在函数之前放置一些宏,使它们在主机和设备上都可以编译。