皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

AMD GPU 管理内存支持合并至 GCC 16 编译器

当谈到 AMD Radeon/Instinct GPU 编译器支持时,重点主要放在 LLVM/Clang 编译器栈上,包括其官方的 AMDGPU LLVM 着色器编译器后端,以及 AOMP 下游编译器分支等。但 GNU 编译器集合”GCC”仍然允许通过其”AMDGCN”后端和 OpenMP API 等目标 AMD GPU。虽然不常看到 GCC 中新的 AMD GPU 活动,但今天合并的是管理内存的支持。

由 BayLibre 编译器工程师 Andrew Stubbs 今天合并的是对 AMDGCN 后端和 libgomp OpenMP 库的管理内存支持。这为 GCC 使用 OpenMP 时提供了 AMD GPU 的管理内存支持,并建立在最近添加到 GCC NVPTX 目标中的 CUDA 管理内存支持之上。

该功能类似于 AMD HIP 的 hipMallocManaged 函数,但 GCC 不依赖 HIP 库本身。该功能已在 Vega/GFX9 和 CDNA 以及 RDNA3 图形硬件等各种 GPU 上进行了测试。

使用 hipMallocManaged 的托管内存支持与类似 CUDA 的托管内存功能,允许数据通过单个指针共享和被 CPU 和 GPU 同时访问。这建立在 Linux 内核中的异构内存管理(HMM)功能之上。

AMD GPU 管理内存支持合并至 GCC 16 编译器

更新的 GCC OpenMP 文档解释了 AMD 托管内存支持:

“该内存可通过主机和设备在相同地址访问,因此无需使用 map 子句进行映射。相反,应使用 is_device_ptr 子句或 has_device_addr 子句来指示指针已在设备上可访问。ROCm 运行时将根据需要自动处理主机与设备之间的数据迁移。并非所有 AMD GPU 设备都支持此功能,且许多支持该功能的设备需要在编译时配置 -mxnack=on。如果默认设备不支持管理内存,且在分配器被调用时配置了此设置,则分配器将使用备用设置。如果释放内存时默认设备配置不同(通过 omp_free 或 omp_realloc),结果可能未定义。如果当前设备不支持统一共享内存(或未通过 HSA_XNACK=1 启用),则管理内存可能仍能工作,但分配可能仅对单个设备可见(即首次分配时的默认设备)。”

随着 AMDGCN 托管内存现在已加入 GCC Git,它将成为明年 GCC 16.1 稳定版本的一部分。

转自  AMD GPU Managed Memory Support Merged For The GCC 16 Compiler – Phoronix