0

英特尔的集成性能基元 (IPP)库具有称为延迟模式图像处理 (DMIP)的功能。它允许您指定函数序列,组合函数,并通过缓存友好的平铺处理将组合函数应用于数组。这比天真地为每个函数遍历整个数组提供了更好的性能。

似乎这种技术也有利于在 GPU 上运行的代码。有许多 GPU 库可用,例如NVIDIA Performance Primitives (NPP),但似乎没有一个具有像 DMIP 这样的功能。我错过了什么吗?或者 GPU 库是否有理由从自动化函数组合中受益?

4

1 回答 1

1

GPU 编程与 CPU 上的 DMIP 函数组合具有相似的概念。虽然在 GPU 上实现“自动化”并不容易(一些 3rd 方库可能能够做到),但手动完成它比 CPU 编程更容易(参见下面的 Thrust 示例)。

DMIP的两个主要特点:

  1. 由图像片段处理,以便数据可以放入缓存;
  2. 并行处理不同的片段或执行图的不同独立分支。

在大图像上应用一系列基本操作时,功能 1 省略了基本操作之间的 RAM 读/写。所有的读/写都在缓存中完成,特性 2 可以利用多核 CPU。

与 GPGPU 的 DMIP 特征 1 类似的概念是内核融合。无需将基本操作的多个内核应用于图像数据,可以将基本操作组合在一个内核中,以避免多个 GPU 全局内存读/写。

可以在本幻灯片的第 26 页中找到使用Thrust的手动内核融合示例。

看来ArrayFire库在自动内核融合方面做出了显着的努力。

GPGPU 的 DMIP 功能 2 的类似概念是并发内核执行。此功能扩大了带宽需求,但大多数 GPGPU 程序已经受到带宽限制。所以并发内核执行不太可能经常使用。

CPU 缓存与 GPGPU 共享内存/缓存

CPU 缓存忽略了 DMIP 中的 RAM 读/写,而对于 GPGPU 的融合内核,寄存器做同样的事情。由于 DMIP 中的 CPU 线程处理一个小图像片段,但 GPGPU 的一个线程通常只处理一个像素。一些寄存器足够大,可以缓冲 GPU 线程的数据。

对于图像处理,当结果像素依赖于周围像素时,通常使用 GPGPU 共享内存/缓存。图像平滑/过滤是需要 GPGPU 共享内存/缓存的典型示例。

于 2013-01-09T22:19:53.233 回答