我对 GPGPU 编程很陌生,所以如果这个问题不是特别合适,请原谅我。据我了解,与通常的 CPU 编程相比,GPU 编程是一项非常复杂的工程工作。必须非常小心分歧问题、平铺、固定内存分配和主机-设备通信/设备计算重叠。
在做了一些研究之后,我发现了似乎试图模仿 C++ STL的推力库。这是相当不错的。然而,基于我非常有限的经验,并且看到了获得良好性能所需的所有微观管理,我对性能有点怀疑。推力可以在内部有效地处理所有复杂的编程部分吗?一些非常知名的库,例如 PETSc,似乎使用了这个包,这让我相信它应该以某种方式使用。
我想知道与低级 CUDA 编程相比,在 CUDA 和推力方面有更多经验的人是否可以就软件包的性能说一两句话。我什么时候可以使用推力,什么时候应该切换回 CUDA?