我有一个 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 ++来说,这是一项相当复杂的练习,如果现有代码大量使用STL,它就会变得更加复杂。
所以问题是,修改C ++ / STL繁重代码以使CUDA准备就绪的最佳方法是什么?
- UPDATE -
A
以使其成为内核。这意味着内核函数总是需要是一个非成员函数,可以由成员函数调用。