GPU 专业小贴士:在 Maxwell 架构上使用共享原子计算快速直方图

英文原文

直方图是一种重要的数据表示形式,在计算机视觉、数据分析和医学成像等领域有着广泛的应用。直方图是数据分布在预定义的 bin 上的图形表示。输入数据集和 bin 的数量可能会因领域的不同而有很大的不同,所以让我们关注最常见的用例之一:每个颜色通道使用256个 bin 的图像直方图。即使我们将使用特定的问题设置,同样的算法也可以使其他计算领域受益。

一个基本的串行图像直方图计算比较简单。对于图像的每个像素和每个 RGB 颜色通道,我们寻找一个从 0 到 255 的对应整数 bin ,并将其值递增。原子操作是在并行架构上实现直方图的一种自然方式。根据输入分布的不同,一些 bin 将比其他 bin 使用得更多,因此有必要支持在整个内存层次结构中有效地累加值。这类似于归约和扫描操作,但直方图的主要挑战是,在读取每个元素的值之前不知道其输出位置。因此,不可能创建一个完全避免冲突的通用并行累加方案。得益于 Kepler 中改进的 atomics 性能和Maxwell 中对共享内存 atomics 的本机支持,直方图现在在 GPU 架构上更容易处理。

图1: 两个阶段的并行直方图算法。

猜你喜欢

转载自blog.csdn.net/panda1234lee/article/details/88921405