尧图精选

ROCm v5.5 发布亮点深度解读:HIP 栈限制提升、新一代 HIP API 与文件系统层次结构迁移

🕒 发布时间:2026/9/17 16:39:12 📁 来源:尧图网络
ROCm v5.5 发布亮点深度解读HIP 栈限制提升、新一代 HIP API 与文件系统层次结构迁移【免费下载链接】legacy-rocm-buildAMD ROCm™ Software - GitHub Home项目地址: https://gitcode.com/GitHub_Trending/ro/legacy-rocm-buildROCm v5.5 是 AMD ROCm 软件栈的一次重要功能迭代其发布说明highlights完整记录了 HIP 运行时增强、一批新的 HIP API、OpenMP 编译支持改进、多项弃用与警告以及 ROCm 安装布局向 Linux 文件系统层次标准FHS的迁移。本仓库的 tools/autotag/templates/highlights/5.5.0.md 正是这一版本发布说明的原始模板它会被仓库中的自动发布工具链消费并生成正式 release notes。读完本文你将完整掌握 ROCm v5.5 的核心变更清单、新 API 的签名与用途、文件系统迁移的兼容机制以及这些文档模板在 autotag 自动发布流水线中的真实作用。一、这些发布说明从哪来autotag 工具链中的 highlights 模板在深入技术细节之前先明确5.5.0.md这份文档在整个仓库中的位置。它是tools/autotag/templates/highlights/目录下的版本亮点模板该目录按 ROCm 版本号组织5.0.06.3.3 等专门存放每个版本的 Whats new 内容。这套模板由 tools/autotag/tag_script.py 驱动的自动打标签autotag流水线使用脚本读取 tools/autotag/components.xml 中的组件清单如 composable_kernel、MIOpen、hipBLAS、rccl、HIP、llvm-project 等通过 GitHub API 为每个库在对应 ROCm 版本上打rocm-version标签并生成 release。最终 release notes 的排版由 Jinja2 模板 tools/autotag/templates/changelog.jinja 完成其中通过{% include ./highlights/ ~ version ~ .md %}直接把5.5.0.md等内容嵌入到 ## ROCm components 组件版本表之前。也就是说本文解读的这份 highlights 文档正是最终呈现给用户的第一屏发布亮点。配套的 tools/autotag/compile_changelogs.sh 脚本则负责把多个版本的内容合并进ROCm/README.mdtools/autotag/util/changelog.py 中的Changelog类负责按库、按版本整理变更记录tools/autotag/util/release_data.py 中的ReleaseBundle/ReleaseLib等数据结构承载每个组件在特定 ROCm 版本的提交与版本号信息。理解了这条流水线就能明白文档中的每一项变更都对应真实仓库、真实 tag 与真实发布内容而非泛泛之谈。二、HIP 增强更大的栈上限与更干净的hipccROCm v5.5 的 HIP 增强集中在三个方向运行时栈上限、hipcc链接行为以及为未来版本铺路的 API 清理。1. 栈大小上限提升16K → 131056 字节本版本将 HIP 线程栈大小上限从 16K 提升到131056 字节即 128K - 16。需要自行调整栈大小的应用可以通过hipDeviceSetLimitAPI 显式设置例如#include hip/hip_runtime.h hipError_t err hipDeviceSetLimit(hipLimitStackSize, 131056);hipDeviceSetLimit是 HIP 运行时的标准设备限制设置入口与之配套的查询接口为hipDeviceGetLimit。栈上限的提升意味着递归深度较大或局部缓冲区较大的 kernel 在默认配置下获得更大的可用栈空间减少了因栈溢出导致的 kernel 启动失败风险。2.hipcc链接行为变更hipcc编译器驱动在本版本中有两处需要开发者注意的行为变化不再隐式链接libpthread和librt这两个库不再属于 HIP 程序的链接期依赖。如果你的应用代码依赖这两个库例如使用 pthread API 或 clock_gettime必须改为显式链接即编译命令中自行追加-lpthread -lrt。-use-staticlib与-use-sharedlib选项被标记为弃用deprecated依赖这两个选项控制 HIP 库静态/动态链接方式的构建脚本应在后续版本中逐步迁移。3. 面向未来版本的变更预告文档同时预告了将在后续 ROCm 版本落地的变更这些信息对提前规划迁移的应用开发者至关重要hipcc二进制从 HIP 项目分离hipcc的 Perl 脚本实现将从 HIP 仓库迁移到独立的hipcc项目未来用户需要通过单独的hipcc软件包安装hipcc二进制。hip-tests项目移除两个示例hipBusBandwidth与hipCommander示例将被移除但会继续保留在之前的版本分支中。hipDeviceProp_t结构体变更移除gcnarch字段同时新增以下字段maxTexture1DmaxTexture2DmaxTexture1DLayeredmaxTexture2DLayeredsharedMemPerMultiprocessordeviceOverlapasyncEngineCountsurfaceAlignmentunifiedAddressingcomputePreemptionSupportedhostRegisterSupporteduuid其他清理项从 HIP 代码树移除 hip-hcc 遗留代码修正hipMemcpyAtoH/hipMemcpyHtoA中的 hipArray 用法修正hipMemcpy3D()中HIPMEMCPY_3D字段类型避免size_t被截断为unsigned int将hipPointerAttribute_t中的memoryType字段重命名为type修正hipGetLastError使其返回最近一次错误而不是最近一次 API 调用的返回码hipExternalSemaphoreHandleDesc增加unsigned int reserved[16]字段修正hipIpcOpenMemHandle对hipIpcMemLazyEnablePeerAccess标志位的处理hiparray*指针被移除并改为不透明类型hipArray_t。三、ROCm v5.5 新增 HIP API 全览本版本引入了一批新的 HIP API覆盖内存管理、模块管理与 HIP Graph 管理三个领域。需要特别说明的是这些新 API 中的多数属于预发布beta版本文档明确提示可能包含未解决的问题生产环境接入前应充分验证。1. 内存管理 HIP APIBETA新 API签名设置指定指针信息BETAhipError_t hipPointerSetAttribute(const void* value, hipPointer_attribute attribute, hipDeviceptr_t ptr);hipPointerSetAttribute用于在指定设备指针上附加属性信息属于指针属性pointer attribute机制的扩展可用于记录指针来源、用途等元数据。2. 模块管理 HIP API模块管理新增了两个协同 kernelcooperative kernel启动 API用于支持线程块之间在运行期相互协作与同步// 以 launch parameters 和共享内存大小在指定 stream 上启动 kernel f // 参数通过 kernelParams 传入线程块在运行期可以协作与同步。 hipError_t hipModuleLaunchCooperativeKernel( hipFunction_t f, unsigned int gridDimX, unsigned int gridDimY, unsigned int gridDimZ, unsigned int blockDimX, unsigned int blockDimY, unsigned int blockDimZ, unsigned int sharedMemBytes, hipStream_t stream, void** kernelParams); // 在多个设备上同时启动 kernel线程块之间可跨设备协作与同步。 hipError_t hipModuleLaunchCooperativeKernelMultiDevice( hipFunctionLaunchParams* launchParamsList, unsigned int numDevices, unsigned int flags);hipModuleLaunchCooperativeKernel是hipLaunchCooperativeKernel的模块句柄hipFunction_t版本适合在运行时动态加载代码对象后以函数句柄方式启动hipModuleLaunchCooperativeKernelMultiDevice则面向多 GPU 场景通过hipFunctionLaunchParams数组一次指定多个设备上的启动参数。协同 kernel 的典型应用是 grid-wide 同步如grid.sync()与跨设备协作算法。3. HIP Graph 管理 APIBETAHIP Graph 是本版本扩充最密集的领域新增了 8 个与内存分配/释放节点、图调试与节点使能控制相关的 API内存分配节点与内存释放节点Memory Alloc / Free Node// 创建内存分配节点并加入图BETA hipError_t hipGraphAddMemAllocNode( hipGraphNode_t* pGraphNode, hipGraph_t graph, const hipGraphNode_t* pDependencies, size_t numDependencies, hipMemAllocNodeParams* pNodeParams); // 查询内存分配节点参数BETA hipError_t hipGraphMemAllocNodeGetParams( hipGraphNode_t node, hipMemAllocNodeParams* pNodeParams); // 创建内存释放节点并加入图BETA hipError_t hipGraphAddMemFreeNode( hipGraphNode_t* pGraphNode, hipGraph_t graph, const hipGraphNode_t* pDependencies, size_t numDependencies, void* dev_ptr); // 查询内存释放节点参数BETA hipError_t hipGraphMemFreeNodeGetParams( hipGraphNode_t node, void* dev_ptr);这四个 API 让内存分配与释放本身成为图中的节点从而把显存管理纳入 Graph 的执行调度支持在捕获时规划显存布局、减少运行期分配开销。图调试与节点属性// 将图结构以 DOT 格式写出到文件便于可视化调试BETA hipError_t hipGraphDebugDotPrint( hipGraph_t graph, const char* path, unsigned int flags); // 将源节点的属性复制到目标节点BETA hipError_t hipGraphKernelNodeCopyAttributes( hipGraphNode_t hSrc, hipGraphNode_t hDst); // 启用或禁用 graphExec 中的指定节点BETA hipError_t hipGraphNodeSetEnabled( hipGraphExec_t hGraphExec, hipGraphNode_t hNode, unsigned int isEnabled); // 查询 graphExec 中指定节点是否被启用BETA hipError_t hipGraphNodeGetEnabled( hipGraphExec_t hGraphExec, hipGraphNode_t hNode, unsigned int* isEnabled);hipGraphDebugDotPrint输出的 DOT 文件可直接用 Graphviz 等工具渲染用于排查图的拓扑问题hipGraphNodeSetEnabled/hipGraphNodeGetEnabled提供对已实例化图graphExec运行期节点的细粒度控制可用于条件化跳过图中某些节点。四、OpenMP 增强ROCm v5.5 的 OpenMP 支持包含以下改进OMPT 工具接口增强新增对 OMPTOpenMP Tools Interface函数get_device_time与get_record_type的支持使性能分析工具能够获取设备时间戳与记录类型信息。快速原子操作在 AMD GPU 上新增对 min/max 快速浮点原子fast fp atomics的支持。修复 C 设备区域中的abs函数用法修正了在 C 语言 device region 中使用abs函数时的问题。这些改进服务于异构 offload 场景下的数值计算与工具链生态与仓库组件清单中flang/openmp-extras及llvm-project的定位一致参见 tools/autotag/components.xml。五、弃用与警告需要开发者关注的所有变更ROCm v5.5 是一次清理性发布弃用信息较多建议按以下清单逐项核对自身项目。1.hipcc/hipconfigPerl 脚本弃用hipcc与hipconfig的 Perl 脚本实现正式标记为弃用。未来版本将提供编译型二进制hipcc.bin与hipconfig.bin作为替代。文档明确了过渡安排过渡期内 Perl 脚本与编译二进制会并存二者功能上无差异用户无需立即采取行动。编译二进制可用后用户可自愿切换到hipcc.bin/hipconfig.bin。最终hipcc/hipconfig软链接将默认指向编译型二进制。2. Linux 文件系统层次标准FHS迁移这是本版本影响面最大的结构性变更。ROCm 软件包在本版本采纳了 Linux 基金会文件系统层次标准FHS确保各组件遵循 Linux 发行版的开放目录约定同时保持对 v5.1 及更早版本的向后兼容。新文件系统层次结构如下/opt/rocm-ver | --bin | --所有对外暴露的二进制文件 (All externally exposed Binaries) | --libexec | --component | --组件私有的非 ISA 可执行文件架构无关 | --include | -- component | --头文件 | --lib | --libsoname.so - libsoname.so.major - libsoname.so.major.minor.patch (与应用链接的公共库) | --component (组件私有的库、可执行数据) | --cmake | --components | --component.config.cmake | --share | --html/component/*.html | --info/component/*.[pdf, md, txt] | --man | --doc | --component | --licenses | --component | --杂项文件 (架构无关的非可执行文件) | --samples注意ROCm 将不会在下一个大版本中继续支持 v5.1旧文件系统层次因此长期维护的项目应尽早迁移到新布局。向后兼容机制由三部分组成Wrapper 头文件在旧位置/opt/rocm-xxx/component/include放置包装头文件通过#pragma message提示开发者使用新位置例如hip_runtime.h的内容为// Code snippet from hip_runtime.h #pragma message This file is deprecated. Use file from include path /opt/rocm-ver/include/ and prefix with hip. #include hip/hip_runtime.hWrapper 头文件的弃用节奏分四步ROCm v5.2 起为#pragma message弃用提示 → 未来版本改为#warning→ 未来版本改为#error→ 最终移除包装文件。库文件软链接新库位于/opt/rocm-xxx/lib旧位置/opt/rocm-xxx/component/lib提供指向新库的软链接例如$ ls -l /opt/rocm/hip/lib/ total 4 drwxr-xr-x 4 root root 4096 May 12 10:45 cmake lrwxrwxrwx 1 root root 24 May 10 23:32 libamdhip64.so - ../../lib/libamdhip64.soCMake 配置文件软链接所有 CMake 配置文件统一位于/opt/rocm-xxx/lib/cmake/component旧位置/opt/rocm-xxx/component/lib/cmake通过软链接指向新配置例如$ ls -l /opt/rocm/hip/lib/cmake/hip/ total 0 lrwxrwxrwx 1 root root 42 May 10 23:32 hip-config.cmake - ../../../../lib/cmake/hip/hip-config.cmake对构建系统的影响使用find_package(hip CONFIG)的 CMake 项目在新旧布局下都应能工作但应逐步把CMAKE_PREFIX_PATH或-I/-L路径指向/opt/rocm-ver/include与/opt/rocm-ver/lib的新位置。3. Code Object V3 支持弃用ROCm v5.5 起Code Object V3 格式的支持被标记为弃用并将在未来版本移除。使用旧代码对象格式的工具链与工作流应规划迁移到更新的代码对象版本。4. Comgr V3.0 变更与 Comgr v3.0 发布同步以下 API 与宏被标记为弃用并预期在未来版本移除APIamd_comgr_action_info_set_options()、amd_comgr_action_info_get_options()Actions 与数据类型AMD_COMGR_ACTION_ADD_DEVICE_LIBRARIES、AMD_COMGR_ACTION_COMPILE_SOURCE_TO_FATBIN替代方案是使用AMD_COMGR_ACTION_INFO_GET/SET_OPTION_LISTAPI以及AMD_COMGR_ACTION_COMPILE_SOURCE_(WITH_DEVICE_LIBS)_TO_BC宏。如果你的工具链直接调用 Comgr 进行编译动作管理应尽快检查是否用到上述被弃用符号。5. 移除的环境变量以下环境变量在本版本中被移除若你的运行脚本或 CI 中仍在设置它们请删除相关配置GPU_MAX_COMMAND_QUEUES GPU_MAX_WORKGROUP_SIZE_2D_X GPU_MAX_WORKGROUP_SIZE_2D_Y GPU_MAX_WORKGROUP_SIZE_3D_X GPU_MAX_WORKGROUP_SIZE_3D_Y GPU_MAX_WORKGROUP_SIZE_3D_Z GPU_BLIT_ENGINE_TYPE GPU_USE_SYNC_OBJECTS AMD_OCL_SC_LIB AMD_OCL_ENABLE_MESSAGE_BOX GPU_FORCE_64BIT_PTR GPU_FORCE_OCL20_32BIT GPU_RAW_TIMESTAMP GPU_SELECT_COMPUTE_RINGS_ID GPU_USE_SINGLE_SCRATCH GPU_ENABLE_LARGE_ALLOCATION HSA_LOCAL_MEMORY_ENABLE HSA_ENABLE_COARSE_GRAIN_SVM GPU_IFH_MODE OCL_SYSMEM_REQUIREMENT OCL_CODE_CACHE_ENABLE OCL_CODE_CACHE_RESET这批变量主要来自旧版 OpenCL/HSA 运行时与 HIP 早期实现它们的行为已由运行时内部机制取代设置它们不会再有任何效果。六、已知问题ROCm v5.5 有一个已记录的已知问题涉及 NCCL 通信库DISTRIBUTED/TEST_DISTRIBUTED_SPAWN测试失败当用户应用反复调用ncclCommAbort销毁 communicator 后再创建新的 communicator 时后续创建的 communicator 可能初始化失败。该问题正在调查中计划在未来版本修复。对使用 NCCL 多 communicator 动态生命周期管理的分布式训练应用如频繁重建通信域的框架应留意该限制必要时通过复用已建立的 communicator 规避。七、结合 autotag 工具链的落地视角回到本仓库5.5.0.md不是一份孤立的文档。在 tools/autotag/templates/changelog.jinja 中Jinja2 引擎会按版本遍历releases并通过{% include ./highlights/ ~ version ~ .md ignore missing %}将5.5.0.md注入到 ROCm {{version}} release notes 标题之下随后依次引入support/、extra_components/、known_issues/、resolved_issues/、upcoming_changes/等版本化模板最后以组件版本表格收尾。整个流程由 tools/autotag/tag_script.py 驱动它以version为必选参数从 tools/autotag/components.xml 读取组件清单通过ReleaseBundleFactorytools/autotag/util/release_data.py拉取各库rocm-5.5.0等 tag 的 commit再交给 tools/autotag/util/defaults.py 中的正则处理器解析各库CHANGELOG.md。运行依赖见 tools/autotag/requirements.txtPyGithub、GitPython、Jinja2、packaging。也就是说你在本文读到的每一项发布亮点最终都会通过这条流水线原样出现在 ROCm v5.5 的正式 release notes 与ROCm/README.md中——它既是文档也是自动发布系统直接消费的模板数据。结语ROCm v5.5 是一个典型的增强与清理并重的版本HIP 栈上限提升与协同 kernel 启动 API 回应了高并发 GPU 计算的需求HIP Graph 的内存节点与节点使能控制扩展了图调度的表达力而 FHS 目录迁移、Perl 脚本二进制化、Code Object V3 与一批环境变量的弃用则为后续版本的架构精简铺路。对于升级到 v5.5 的团队最紧迫的核对项是显式链接libpthread/librt、检查hipDeviceProp_t与指针属性相关代码、将 include/lib 路径迁移到新 FHS 布局以及清理被移除的环境变量。如需查阅完整流水线实现可继续深入 tools/autotag/tag_script.py 与 tools/autotag/util/release_data.py。【免费下载链接】legacy-rocm-buildAMD ROCm™ Software - GitHub Home项目地址: https://gitcode.com/GitHub_Trending/ro/legacy-rocm-build创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →