Intel Discrete GPU - Memory - HMM / Device Pages

• 7 分钟阅读 • intel gpu

HMM 即 Heterogeneous Memory Management,其主要为并行计算加速场景提供系统侧支持,以 GPGPU 通过并行计算场景为例的话,因为 GPU 设备中具备独立显存,在 GPU 执行计算的过程中将其所需数据存储至独立显存的话,GPU 将会发挥更加出色的性能;

并行计算的场景中涉及到 CPU 与 GPU 的频繁交互,为了能够让 GPU 能够发挥了优越的性能,在 CPU 准备好待计算的数据后,就需要在 GPU 启动计算之前将这些数据所占用的内存迁移至 GPU 侧,等待计算完成之后,在 CPU 访问计算结果时,这些结果数据还需要再次迁移至系统内存供 CPU 访问;

这期间在 CPU 与 GPU 侧的内存迁移动作,即为本次所介绍的 HMM 与 Migrate Device 模块共同来实现;

并行计算框架常见的有几种,分别有 CUDA / SYCL / ROCm,SYCL 由 Khronos 组织主推且有 Intel 作为大力的支持者,其编程风格非常符合 C++ 风格,作为一个 C/C++ 开发者,个人是极力支持的,看好它日后的发展;

插播一下,SYCL Tech 提供了一个免费的编写、运行环境,是一个练习的好平台;

即使并行计算框架有多种,但对于系统底层的能力来说,只有 HMM 提供支撑即可;现在我们以 SYCL 为例,看下它是如何借助底层的能力完成并行计算的;

SYCL 中操作内存所使用的方式主要有 Buffer / USM (Unified Shared Memory) 两种,关于这两种方式的介绍,可以通过 codeplay github 中所提供的 PDF 了解下,

USM 的使用场景中,可能涉及到同一份物理内存分别映射到 CPU / GPU 侧,也可能是与 Buffer 场景类似,在 CPU / GPU 侧分别有一份数据存储,

而我们将针对左侧这种场景较深入地解读下底层系统的能力支撑;

在 Linux 内存管理中,每个 Node 内存会按 Zone 来划分,常见的 Zone 有 ZONE_DMA / ZONE_NORMAL / ZONE_MOVABLE 等,除这些以外,还有一类在移动设备中不常见的 ZONE_DEVICE 类型,而 HMM 所涉及的技术领域中,ZONE_DEVICE 就是至关重要的一点;

当 GPU 初始化并行计算能力时,会通过devm_memremap_pages将独立显存中规划的一段空间映射至 CPU 侧,按照系统中的默认页面粒度将这段独立显存空间通过 pages 进行 pfn 映射,这个映射也是一种内存 hotplug,所添加的 pages 会接入到 VMEMMAP 中,并划分至 ZONE_DEVICE 中,通过/proc/zoneinfo能够得知所划分的页面数;

需要注意的是,这些 ZONE_DEVICE 中的 pages 不同普通内存页面,因为它们并不在 Buddy 的管理范围内,内存分配不涵盖这些页面;

当内存在系统内存与独立显存间迁移时,一般通过 Migrate Device 所提供迁移框架中的几步来完成,它们是 migrate_vma_setup / migrate_vma_pages / migrate_vma_finalize,下面分别来看下每个接口的对应能力,

结合这些 Migrate 能力接口,再加上页面内容的传输能力,即可完成系统内存与独立显存之间的数据迁移;

以 SYCL 的内存形式 Buffer / USM 为例的话,这个数据迁移操作会涉及到以下几种场景,

TODO

文档引用

文章标签: intel gpu

上一篇 : Parallel Computing - CUDA 环境搭建 / 基于开源 Kernel Driver
下一篇 : Intel Discrete GPU - Memory - Evict / Swap
阅读进度 0%