AMD Instinct™ MI200 GPU memory space overview — ROCm Blogs

注意: 本博客之前是 AMD实验室笔记博客系列的一部分。
HIP API 支持在加速系统上为主机和设备内存提供多种分配方式。在本文中,我们将:
1. 介绍一组常用的内存空间
2. 识别每种内存空间的独特之处
3. 讨论每种空间的一些常见用例
我们主要关注AMD的MI200系列GPU,但本文讨论的许多概念也适用于其他GPU和API。
内存空间类型
在异构的加速系统上工作意味着存在不同的内存和执行空间。在管理内存时需要特别小心,以确保数据在正确的时间出现在正确的位置。尽管在HIP中有许多不同类型的内存分配器和选项,但在AMD的MI200上,它们都是以下三种属性的组合:
1. 主机内存 vs 设备内存
- 主机内存存在于机器的主机(例如CPU)上,通常在随机存取存储器(RAM)中。
- 设备内存存在于连接到主机的设备或加速器(例如GPU)上。在GPU的情况下,这种内存位于视频随机存取存储器(VRAM)中,最近的GPU架构通常是以下两种之一:
- 图形双倍数据速率(GDDR)同步动态随机存取存储器(SDRAM) - 例如AMD RDNA™ 2 GPU上的GDDR6
- 高带宽内存(HBM) - 例如AMD的MI200 GPU上的HBM2e
2. 可分页 vs 固定(主机)内存
- 可分页内存是我们通常在C++应用程序中调用`malloc`或`new`时获得的内存。可分页内存的独特之处在于它存在于“页”(内存块)中,可以迁移到其他内存存储。例如在主板上的CPU插槽之间迁移内存,或者当系统耗尽RAM空间时,将部分RAM页转储到硬盘的交换分区中。
- 固定内存(或页面锁定内存)存储在锁定到RAM中特定扇区的页面中,不能迁移。
3. 粗粒度一致性 vs 细粒度一致性
- 粗粒度一致性意味着仅在内核边界处认为内存是最新的,可以通过`hipDeviceSynchronize`、`hipStreamSynchronize`或任何作用于空流(如`hipMemcpy`)的阻塞操作来强制执行。例如,可缓存内存是一种粗粒度内存,其中数据的最新副本可以存储在其他地方(例如L2缓存)。
- 细粒度一致性意味着在CPU/GPU内核运行时支持一致性。如果主机和设备在使用系统范围的原子操作(例如更新缓冲区的错误码或标志)时操作相同的数据空间,这可能很有用。细粒度内存意味着无论如前所述的内核边界,最新数据都可见。
这些内存属性并不是相互排斥的,这会导致一些复杂性,我们将尝试澄清。
在了解HIP API如何与这些空间协作之前,我们需要介绍一些关于MI210、MI250和MI250X GPU的重要细节。MI210 GPU 是一个标准的PCIe-4.0 x16卡,包含了一个图形计算芯片(GCD),配有64GB的板载HBM2e内存。MI250和MI250X GPU是OCP加速模块(OAMs),由两个GCD组成,总内存为128GB,但在软件上呈现为两个独立的设备,每个设备有64GB VRAM。在本文中,我们将使用“GPU”一词指整个GPU,当GPU和GCD之间的区别很重要时,则使用“GCD”。
在以下部分中,我们将介绍用于HIP中各种内存空间的分配器和释放器。


302

被折叠的 条评论
为什么被折叠?



