使用格示例了解 GPGPU 中的内存共享

计算科学 流体动力学 并行计算 显卡 内存管理 格子玻尔兹曼方法
2021-12-24 06:00:16

我是 GPU 世界的新手,我在 Matlab 环境中使用它们,所以我不需要欣赏这些设备的微妙之处。

我知道 GPU 可以分为多处理器(也称为流式多处理器),它们的单个处理器共享一个高速缓存。我不明白多处理器之间的通信是否需要主机。为了集中我的问题,我将举一个例子。

让我们进行流体动力学模拟,其中我将我的域离散化为个单元。之后,我分配给每个多处理器个单元。在这个超通用模拟中,我有一些连续性方程,在一个细胞和邻居之间,必须针对每个时间步进行更新。如果单元属于同一个多处理器,则可以,因为它们可以使用公共缓存共享内存。相反,对于那些(它们的一部分)相邻单元属于不同的多处理器的单元,情况是不同的。我的问题是:NM

属于不同多处理器的单元如何在每个时间步进行通信?

我可以使用内存传输到 CPU,但我认为它效率不高。

在我看来,这是格子玻尔兹曼方法计算方面的中心点。

帮助我理解这一点。

1个回答

GPU 由几个流式多处理器组成。

每个 SM 都有 64-96kB 的共享内存,最多可被 1024-2048 个线程访问。该共享内存允许这些线程进行通信。

要在 SM 之间进行通信,您必须写入和读取 GPU 的全局内存,大小为 4-32GB。

但最好将您的问题视为由大量 1D 或 2D 块组成,这些块可以分配给任意 SM,并将“通信”作为中间结果的存储。也就是说,SM可以与自己“通信”。

因此,由于 GPU 的内存用于存储这些中间值,因此无需在计算过程中与主机通信。