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

时间:2014-12-24 12:38:25

标签: c++ stl cuda

我有一个 A类,它实现了一个复杂的算法并且有许多公共/私有成员函数。此类使用另一个 B类的对象来实现3D-Vector操作,因此具有许多成员函数(+-/,{{1} },*==等。)。

!= 旨在在具有多个CPU线程的CPU上运行。两个类都使用许多STL容器,例如pair,向量(对象指针),字符串,映射,多图,集合,队列等,并使用位真数据类型,如A

现在我希望将uint32_t 的算法(成员函数)中的一个转换为CUDA内核,该内核可以由16个CPU线程执行,从而在Kepler上同时运行16个内核GPU。这意味着 A类 B类的成员函数需要在GPU上执行。还有任何STL特定的东西,我将需要使用Thrust或编写我自己的CUDA代码来实现该容器/算法

为了做到这一点,我可以想到两种方法

  • 修改我混合主机和设备功能的现有C ++代码
  • 使用我现有的C ++代码从头开始创建CUDA C ++代码(类)

使用C,修改现有代码相当容易。但对于C ++来说,这是一项相当复杂的练习,如果现有代码大量使用STL,它就会变得更加复杂。

所以问题是,修改C ++ / STL繁重代码以使CUDA准备就绪的最佳方法是什么?

- UPDATE -

  • C ++类的成员函数不能标记为A以使其成为内核。这意味着内核函数总是需要是一个非成员函数,可以由成员函数调用。

1 个答案:

答案 0 :(得分:1)

我发现这个article非常有用,基本上,我的想法是你在函数之前加上一些宏,使它们在主机和设备上都可以编译。