我试图弄清楚是否可以使用 OpenACC 代替正常的 CPU 串行执行调用。通常我的编程都是关于 3D 编程,或者以某种方式正常使用 GPU。IE 图像处理或其他需要使用着色器的渲染类型。我试图弄清楚这个图书馆是否对我有益。
我问这个的原因是因为如果我正在渲染 3D 图形(尽可能快),它会减慢这个过程吗?或者它是否能够保持(理论上)“高帧率”。
如果是这样,权衡是什么,多少钱?我不愿意放弃 3D 图形(显示)性能来增强可以在 CPU 上串行完成的操作。
编辑:这是一个 C++ 上下文。
我试图弄清楚是否可以使用 OpenACC 代替正常的 CPU 串行执行调用。通常我的编程都是关于 3D 编程,或者以某种方式正常使用 GPU。IE 图像处理或其他需要使用着色器的渲染类型。我试图弄清楚这个图书馆是否对我有益。
我问这个的原因是因为如果我正在渲染 3D 图形(尽可能快),它会减慢这个过程吗?或者它是否能够保持(理论上)“高帧率”。
如果是这样,权衡是什么,多少钱?我不愿意放弃 3D 图形(显示)性能来增强可以在 CPU 上串行完成的操作。
编辑:这是一个 C++ 上下文。
在我熟悉的 AMD 和 NVIDIA GPU 上,OpenACC 程序将利用计算资源,这些计算资源在某种程度上也会被着色程序使用。GPU 中有许多其他图形硬件不在计算和图形之间共享,但有一些共享资源。同样,GPU 可能通过 PCIE 连接到系统,因此这也可能出现共享资源或争用点(但它是罕见的计算或图形程序,甚至会接近耗尽现代 Gen3 x16 PCIE 的带宽联系。)
因此,如果您同时使用图形(或计算)着色器以及 OpenACC 加速,在某种程度上就会存在资源争用。争论的程度,或权衡,不是我可以概括的东西。这在很大程度上取决于程序的细节,以及计算功能和图形功能的范围和详细顺序。
GPU 设计人员考虑到了这些类型的用例,因此 GPU 通常非常擅长在可能争夺资源的各种任务之间进行快速上下文切换。