在GPU上启动POSIX C ++代码的许多副本

问题描述

我有一个计算量很大的单线程POSIX + boost C ++程序,我只是在48核cpu上以多个副本启动(这是一种蛮力的A *搜索算法)

是否有任何简便的方法可以重新编译GPU代码并在“更多” GPU内核上运行?

假设我想按原样运行线程,为GPU移植现有的boost C ++代码最简单的方法是什么?

解决方法

是否有任何简便的方法可以重新编译GPU代码并在“更多” GPU内核上运行?

假设我想按原样运行线程,为GPU移植现有的boost C ++代码最简单的方法是什么?

没有一个。如评论中所述,C ++ 17包含parallel algorithms,而NVIDIA则发布了C++17 compiler with CUDA support。与采用“ POSIX C ++”代码并将其直接在GPU上运行相比,这还有很长的路要走。我没有类似的GPU编程范例。

,

对为什么这不可能(并且可能永远不可能)感兴趣的人是,GPU具有非常特定的计算逻辑,即使程序,该逻辑通常会产生比单线程CPU低得多的性能。以某种方式在多个内核上启动:

  • 在多核CPU中,内核尽可能地分开,这样开发人员就不必考虑芯片内部。只有很少的因素会影响线程性能的扩展:例如内存带宽和(在某些情况下)同时的多线程效果。

  • 在GPU中,内核是“有目的的”紧密连接:例如,如果分支在不同的线程中以不同的方式发生,那么最终将执行完整的一组内核(在某些情况下多达一百个)顺序编码,放弃所有并行化的好处。此外,由于这些内核通常“速度较慢”,因此它们的主要好处在于“向量化”操作,要求开发人员“考虑向量”而不是“数据结构”以取得标称性能。

因此,尽管有一些编程工具包“看起来像C”,但它们实际上是隐藏在C语法和类似C的库调用之后的领域特定语言。

要从普通代码到高度并行的GPU代码进行“可用的”翻译,就需要一种算法,该算法可以将代码作为逻辑加载,在数十亿个基态上找到并证明等效逻辑转换的正确性,然后将其转换回基于GPU计算模型的GPU指令。尽管将来可能实现,但这远远超出了现代算法知识和计算能力。研究此类工作的科学包括AI计划,程序综合,自动定理证明,深度学习。