SDB:AMD GPGPU
AMD (ATI) GPU上的GPGPU
关于AMD (ATI)硬件的通用信息:https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units
有关GPGPU的通用信息,请参阅SDB:GPGPU。
GPGPU = 图形处理单元上的通用计算,意味着使用GPU进行通用计算。
简介
关于支持级别的警告
ATI在1990年代以优秀的硬件和buggy驱动程序而闻名。在2006年被AMD收购后,AMD小心地保留了这一传统。即使AMD创建了优秀的驱动程序 - PAL OpenCL,它也会迅速放弃它,并用半工作的ROCm来代替。由于Mesa 3D和Valve贡献的开放驱动程序,OpenGL和Vulkan支持良好。
AMD在2020年放弃了Linux上的GPGPU消费市场,停止了PAL OpenCL驱动程序。取代PAL的ROCm仅适用于一小部分硬件,并且在更少数量的GPU上受到支持。AMD对AMD APU (iGPU)上的GPGPU的支持几乎为零,需要手动设置。您可以使用Nvidia和Intel GPU。但是,Intel消费图形Arc A系列缺乏FP64支持(链接1,链接2)。对于带有AMD CPU + iGPU的笔记本电脑:如果笔记本电脑具有Nvidia或Intel独立显卡,则可以将其用于GPGPU。通过Mesa的Rusticl驱动程序成熟后,才能实现AMD GPU上通过OpenCL的GPGPU的良好支持水平。PAL驱动程序很好。但是Rusticl和PAL驱动程序仅提供OpenCL支持。
您可以查看此处(可能包含错误)可用的驱动程序和支持级别的比较。
支持期限
AMD产品的支持期限约为5年。在首次发布后5-6年,AMD将停止对其产品的支持。一些例外情况:GCN5 (GCN5.1)由于将其用于APU(台式机和移动设备)中的iGPU,可能会获得更长的支持。
在AMD硬件上使用CUDA代码
使用ZLUDA和ROCm使用CUDA代码
安装(运行)ZLUDA代码转换器后,您可以使用CUDA应用程序。ZLUDA需要正常工作的ROCm安装(当前ROCm 5.7.x)。更多信息请参阅https://github.com/vosen/ZLUDA和Phoronix文章。
要在openSUSE上使用ROCm 5.7运行RDNA3芯片,请使用环境变量
export HSA_OVERRIDE_GFX_VERSION=10.3.0
更多信息请参阅此处了解兼容性选项。
使用“SCALE”软件和ROCm使用CUDA代码
安装(运行)“SCALE”代码转换器(闭源)后,您可以使用CUDA应用程序。“SCALE”需要正常工作的ROCm安装(ROCm 6.x)。公告此处。更多信息请参阅https://docs.scale-lang.com/和Phoronix文章。
将CUDA和HIP转换为OpenCL和Level Zero - chipStar
ChipStar是一个用于将HIP/CUDA编译和运行到SPIR-V通过OpenCL或Level Zero API。ChipStar能够将HIP和CUDA应用程序移植到支持SPIR-V作为设备中间表示形式的平台。它支持OpenCL和Level Zero作为低级运行时替代方案。更多信息请参阅https://github.com/CHIP-SPV/chipStar。
将来,您可以使用chipStar与Mesa 3D Rusticl一起运行CUDA代码:CUDA代码 -> 由chipStar转换为OpenCL代码 -> 使用Rusticl OpenCL驱动程序运行此代码(使用cl_ext_buffer_device_address扩展,Rusticl 提交)。
法律问题
不同州的法规不同,常见情况是:如果您有CUDA语言编写的源代码,则可以使用软件(主要是非Nvidia)将其转换为可用的东西 - OpenCL、ROCm HIP、oneAPI、任何其他。然后,您可以在非Nvidia设备上执行该代码。但是,您不能在链中使用Nvidia专有软件。
因此,chipStar是合法的,但ZLUDA不是。
AdaptiveCpp - 异构C++编译器
AdaptiveCpp是一个开源C++编译器,以前称为hypSYCL和Open SYCL。AdaptiveCpp是独立的、社区驱动的现代C++异构编程平台,面向所有主要供应商的CPU和GPU。
页面:https://adaptivecpp.github.io/AdaptiveCpp/,Github:https://github.com/AdaptiveCpp/AdaptiveCpp
如何安装:https://adaptivecpp.github.io/AdaptiveCpp/installing/
- 对于ROCm - https://adaptivecpp.github.io/AdaptiveCpp/install-rocm/
- 对于SPIR-V/OpenCL - https://adaptivecpp.github.io/AdaptiveCpp/install-ocl/
可用驱动程序
ATI FireGL – 适用于Terascale 2、Terascale 3、GCN1、GCN2芯片
OpenCL 1.2支持,与现代发行版不兼容。
Mesa 3D Clover - 适用于不同硬件
Clover将在Mesa 25.2中删除(新闻,合并请求1,合并请求2)。OpenCL 1.2支持,没有图像支持,经常挂起。Mesa 3D正在放弃它,转而支持Rusticl驱动程序(新闻)。
Mesa 3D Rusticl - 适用于不同硬件
它提供OpenCL 3.0支持,具有图像支持,某些OpenCL 2.x功能(正在开发中,部分实现)。适用于Tumbleweed、Leap 15.5及更高版本。
正在开发中。使用最新的可用版本(X11:XOrg或devel:gcc:next:testing或Community仓库)。于Mesa 22.3引入。Radeonsi支持(GCN1及更新)于Mesa 23.1推出,功能支持(OpenCL测试一致性)- 于Mesa 23.2推出。自Mesa 23.3以来,它运行良好。
页面:https://docs.mesa3d.org/rusticl。支持的扩展:https://mesamatrix.net/。
AMD Terascale架构问题
- Terascale (1, 2, 3)不受支持。对Terascale 2和3的支持是可行的,但尚未实现(状态跟踪器)。
- Rusticl驱动程序在Terascale 2和3上不支持图像支持。
AMD ORCA – 适用于AMD GCN1 – GCN4
OpenCL 1.2支持。缺少一些扩展。
驱动程序5.7.1(23.20)是带有ORCA OpenCL(又名“legacy OpenCL”)软件包的最后一个。
AMD PAL – 适用于AMD GCN2 – GCN5和RDNA1
PAL = 平台抽象库。带有PAL OpenCL的最新AMD驱动程序包是20.40。链接到软件包是此处。较新的驱动程序具有基于ROCm的OpenCL驱动程序,适用于GCN5(如果未删除)和更新的芯片,以及适用于GCN1 - GCN4的ORCA驱动程序。适用于Leap 15.2 & 15.3(内核5.3),以及Leap 15.4 & 15.5(内核5.14)手动安装后。它可能适用于RDNA2 & 之后 - 尚未测试。
优点
- OpenCL 2.0/2.1支持,具有图像支持。
- 支持离散GPU和iGPU(APU)。
- 不需要PCIe原子支持 - 适用于旧硬件。
- 不需要DKMS。
缺点
- 不受支持。AMD在2020年末放弃了它。
- 闭源。没有社区支持。
- 可能HIP现在无法使用此驱动程序。
AMD ROCm驱动程序 – 适用于选定的AMD GCN和RDNA
OpenCL 2.x & HIP支持。仅适用于离散显卡(非官方支持Ryzen APU - GCN5 iGPU及更新)。对于不受支持的硬件,请使用参数或补丁。AMD打包的ROCm适用于openSUSE Leap(SUSE SLE),对于Tumbleweed,请使用openSUSE仓库或自行编译软件包。某些ROCm部件可用 - 请阅读此处了解详情。
支持历史
- GCN3:AMD提到社区支持的ROCm。
- GCN4:ROCm 4.5 已经停止支持 Polaris(GCN4,gfx803),因此其最后一个 ROCm 版本是 4.3.1。
- GCN5.0:支持 GCN 5.0(Vega 10, Raven, Picasso, gfx900)的最后一个 ROCm 版本是 4.5.2。
- GCN5.1:支持 GCN 5.1(Vega 20, Radeon VII, Renoir, Cezanne, gfx906)的最后一个 ROCm 系列是 5.7。
- RDNA1:ROCm 6.2 有一些增强 - 链接。没有官方支持,但 可能可以工作。使用 "export HSA_OVERRIDE_GFX_VERSION=10.3.0" 参数。更多信息请阅读 此处。
- RDNA2:ROCm 5.x 及更高版本提供官方支持。
- RDNA3:从 ROCm 5.7.1 开始,支持 Ubuntu 22.04 和 Windows,对于 openSUSE Leap (SUSE SLE) 使用 ROCm 6.0 及更高版本。您可以使用 Distrobox 来运行它。
- RDNA4:使用 openSUSE 仓库或自行编译 ROCm。
AMD ROCm 与支持架构的 iGPU 不兼容
ROCm (目前 v. 6.x) 不支持如果系统具有 ROCm 支持架构的集成 GPU (iGPU) 的离散 AMD GPU (链接)。
引用自 https://rocm.docs.amd.com/projects/install-on-linux/en/latest/how-to/amdgpu-install.html
警告
ROCm 目前不支持集成显卡。如果您的系统安装了 AMD IGP,请在使用 ROCm 之前在 BIOS 中禁用它。如果驱动程序可以枚举 IGP,ROCm 运行时可能会使系统崩溃,即使通过 HIP_VISIBLE_DEVICES 告知其忽略它。
使用 ROCm 6.x 与 {AMD GCN5.1 或 AMD RDNA2 或 RDNA3} iGPU + {AMD GCN5.1 或 AMD RDNA2 或 RDNA3} dGPU 比较困难。您可以在 AM5 Ryzen 7000 台式机系列上禁用 iGPU。这也意味着所有新的笔记本电脑与 ROCm 6.x 半不兼容。可能使用 GCN5.0 iGPU 可以正常工作 - ROCm 只是忽略它。否则,在任何现代笔记本电脑上使用 ROCm 6.x 与 AMD iGPU + AMD dGPU 都会遇到问题。
可以通过修补 AMD KFD (amdkfd) 驱动程序来克服此问题 - 链接1,链接2。但这些补丁不在内核中,即 Linux 内核开发者和 AMD 均不提供支持。其他选项:使用虚拟机或 Distrobox 或 Windows。
没有离散 AMD GPU 的集成 AMD GPU 可能可以正常工作。
用于 GPGPU 的 Vulkan
可以使用 Vulkan 驱动程序进行计算。它可以工作,但可能比更直接的方法慢。另一个特点:对算术精度的没有保证,因为图形输出需要速度并且可以允许忽略结果的准确性。因此,Vulkan 适用于 AI 任务,但不建议用于精确计算。尽管如此,一些软件正在使用 Vulkan 进行 GPGPU。一些测试:链接。
要获得支持,您需要正常工作的 Vulkan 驱动程序。您可以使用 AMD 的 AMDVLK 驱动程序或 Mesa 3D 的 RADV 驱动程序。Vulkan 驱动程序默认情况下可用于 GCN3+。对于 GCN1 和 GCN2,使用内核参数获取 drm/amdgpu 驱动程序而不是 drm/radeon,更多信息请阅读 此处。对于 Terascale 2 和 3,名为“Terakan”的驱动程序正在开发中 (Vulkan 1.0?)。
您可以同时安装 AMDVLK 和 RADV 并在运行时之间切换。您可以使用 LD_LIBRARY_PATH 或 LD_PRELOAD 前缀加载所需的驱动程序。
RADV 驱动程序 Vulkan API 支持 (来源)
- GCN1 和 GCN2 (GFX6 和 GFX7):Vulkan 1.3
- GCN3 (GFX8) 及更新版本:Vulkan 1.4
有关支持的扩展的更多信息,请参阅 https://mesamatrix.net/。
光线追踪
一些程序可以使用光线追踪 (raytracing, RT) 硬件块来加速其性能。例如,Blender 可以使用 AMD HIP RT 库 (AMD ROCm 的一部分)。硬件光线追踪自 AMD RDNA2 架构以来可用。在 AMD RDNA4 架构中进行了重大改进。对于 Linux,您可以使用 Vulkan RT API 与 AMD AMDVLK 或 MESA 3D RADV 驱动程序,通常 AMDVLK 在 RT 方面效果更好。在 2025 年夏季,AMD 开始将重点从 AMDVLK 转移到 RADV,直接贡献给 RADV。
组合驱动程序
您可以组合驱动程序。例如,您可以使用来自一个来源的 3D 驱动程序,并使用来自另一个来源的 OpenCL。AMD 硬件的驱动程序由四个部分组成:内核驱动程序 (amdgpu 用于 GCN1 和更新版本)、OpenGL 驱动程序、Vulkan 驱动程序、OpenCL 驱动程序。对于 Vulkan 和 OpenCL 驱动程序,您可以安装多个驱动程序集,并通过编辑 icd 文件激活所需的驱动程序。
使用下面描述的 AMD OpenCL PAL 驱动程序的方法将 amdgpu + Mesa 3D 驱动程序用于 OpenGL 和 Vulkan 用于 Leap 15.x 和 OpenCL PAL AMD 驱动程序用于 Leap 15.2。
amdgpu 驱动程序的来源
AMD 存储库,用于 amdgpu、Mesa 3D 等,位于 此处。选择适当的子文件夹。
对于 Leap,您可以使用 AMD 包中的 amdgpu 驱动程序或发行版 (xf86-video-amdgpu 包)。AMD 建议使用 DKMS 使用 AMD 包中的 amdgpu 驱动程序。AMD 使用 amdgpu 驱动程序 + DKMS 从 AMD 包进行 ROCm 测试。发行版中的 Amdgpu 驱动程序可以正常工作并且易于维护。最好使用一个 amdgpu 驱动程序来源,否则系统将从一个跳到另一个。
使用 Tumbleweed,您必须使用发行版中的 amdgpu 驱动程序。可以为 Tumbleweed 编译 AMD 驱动程序。
3D (OpenGL & Vulkan) 驱动程序的来源
您可以为 openSUSE Leap (SUSE SLE) 使用多达四个存储库来获取视频驱动程序
- 默认 3D 驱动程序 (Mesa 3D,包含在发行版中,主存储库)
- 来自所谓的 实验 X11:XOrg 存储库的最新 Mesa 3D 驱动程序
- 来自 AMD 驱动程序包的 Mesa 3D 驱动程序 (https://repo.radeon.com/amdgpu/ 存储库,由 AMD 托管)
- 来自 AMD 驱动程序包的 AMD 专有驱动程序 (https://repo.radeon.com/amdgpu/ 存储库,由 AMD 托管)
Mesa 3D 驱动程序可能对游戏更快,而 AMD 专有驱动程序可能支持更多的 OpenGL/Vulkan 扩展。
AMD 已停止对 GCN4 和 GCN5 的支持。它们最新的专有驱动程序是 23.20 (23.30?) 和 5.7.x。开放驱动程序可以正常工作。
OpenCL 驱动程序的来源
我们有两个选项:AMD 或 Mesa 3D。
安装驱动程序
ATI FireGL
您可以通过降级 X11 和其他核心软件包来安装它。相反,您可以使用旧的和兼容的发行版。您可以使用虚拟机来实现这一点。
Mesa 3D Clover
来自主存储库。此驱动程序挂起太多。请勿使用它。
Mesa 3D Rusticl
安装 Rusticl 包。使用最新的 Mesa 3D 驱动程序。
对于 Tumbleweed,只需安装 Rusticl 包即可。
对于 Leap 无法使用默认仓库获得,即使在 讨论后也无法获得。
对于 openSUSE Leap,您可以添加兼容的 Mesa 3D Community 存储库 (不被 openSUSE 开发者支持 - 风险自负)。然后从该存储库安装 Mesa 3D 和 Rusticl 包。您可以使用此存储库执行 供应商更改更新 以升级所有图形驱动程序。
如果 openSUSE Leap 的 X11:XOrg 仓库中的 Mesa 3D 可用,则可以使用以下命令 (根据您的需要更改版本号 (此处为 "15.6"))
zypper addrepo https://download.opensuse.org/repositories/X11:XOrg/openSUSE_Leap_15.6/X11:XOrg.repo zypper refresh zypper install Mesa zypper install Mesa-libRusticlOpenCL
对于社区存储库,您可以使用 Home:videoregataos。根据您的需要更改版本号 (此处为 "15.6")。
zypper addrepo https://download.opensuse.org/repositories/home:videoregataos/15.6/home:videoregataos.repo zypper refresh zypper install Mesa zypper install Mesa-libRusticlOpenCL
启用 Rusticl
对于 Mesa 3D 24.3+,您可能不需要此参数。
为了在任何平台上使用 Rusticl,必须使用环境变量 RUSTICL_ENABLE。Rusticl 默认情况下不会为任何驱动程序通告设备,因为这样做可能会影响系统稳定性,直到解决剩余的核心问题为止。
要启用所有 radeonsi 设备,请使用
RUSTICL_ENABLE=radeonsi
启用第二个 iris 和第一个和第三个 radeonsi 设备
RUSTICL_ENABLE=iris:1,radeonsi:0,2
启用 Rusticl 实验功能
使用 RUSTICL_FEATURES 环境变量来启用实验功能。这些功能默认情况下被禁用,因为它们可能不够稳定或破坏 OpenCL 符合性。添加逗号分隔的功能列表以启用
- fp16 启用 OpenCL 半精度支持
- fp64 启用 OpenCL 双精度支持
FP64 (双精度) 格式自 GCN1 起适用于所有 GPU,FP16 (半精度) 自 GCN5 (Vega) 起可用。
AMD ORCA
对于 Leap 15.5
- 将 amdgpu-install rpm 包从 https://repo.radeon.com/amdgpu-install/ 下载到某个文件夹。
- 将此文件夹添加为仓库。
- 安装 amdgpu-install 包。这将添加两个仓库:"AMDGPU some_number 仓库" 和 "AMDGPU some_number 专有仓库"。
- 之后,您可以通过安装 opencl-legacy-amdgpu-pro-icd 包来安装 AMD ORCA OpenCL 驱动程序。
- 某些版本的 ROCm 具有空的专有仓库。要获取包,请选择包含内容的版本。
对于 Leap 15.4,使用带有 "--opencl=legacy" 选项的安装脚本。
对于 Leap 15.3,安装 AMD 专有驱动程序 - 所有包或仅 OpenCL ('headless' 选项)。通过安装 headless AMD 驱动程序,您将使用 Mesa 3D 驱动程序进行 3D,并使用 AMD OpenCL 驱动程序进行 OpenCL。
另一种方法:从 20.10 驱动程序中提取 ORCA 驱动程序。
您需要 amdgpu 内核驱动程序才能使用 AMD OpenCL 驱动程序。对于 GCN1 和 GCN2,您需要内核参数才能使用 amdgpu 而不是 radeon。阅读 此处 以获取详细信息。
对于 GCN2 – GCN4 与 AMD PAL 驱动程序,您将获得 OpenCL 2.0 而不是 OpenCL 1.2。
AMD PAL
对于 Leap 15.3,使用 此 说明。通过安装 headless AMD 驱动程序,您将使用 Mesa 3D 驱动程序进行 3D,并使用 AMD OpenCL 驱动程序进行 OpenCL。
对于 Leap 15.6,从 20.40 驱动程序安装 OpenCL 包,并从 https://repo.radeon.com/amdgpu/ 仓库安装其他包。
此说明模拟使用安装脚本安装 20.40 驱动程序。具体而言,针对 5.7.1 仓库
- 将 amdgpu-install rpm 包下载到某个文件夹。
- 将此文件夹添加为仓库。
- 安装 amdgpu-install 包。这将添加两个仓库:"AMDGPU 5.7.1 仓库" 和 "AMDGPU 5.7.1 专有仓库"。
- 从 AMDGPU 5.7.1 仓库安装这些包
- amdgpu-core
- amdgpu-doc
- libdrm-amdgpu
- libdrm-amdgpu-common
- libdrm-amdgpu-devel
- llvm-amdgpu
- llvm-amdgpu-libs
- llvm160-amdgpu
- 卸载 libdrm_amdgpu1 包。
- 从 AMDGPU 5.7.1 Pro 仓库安装这些包
- amdgpu-pro-core
- clinfo-amdgpu-pro
- 从 Linux 20.40 存档下载 Radeon Software,将其放入某个文件夹。存档链接为 此处。将文件从 tar 提取到某个文件夹。查看该文件夹。其中找到 RPMS 子文件夹。将带有 rpm 包的 RPMS 文件夹添加为“AMDGPU Pro 20.40”仓库。
- 从此“AMDGPU Pro 20.40”仓库安装这些包
- ocl-icd-amdgpu-pro
- ocl-icd-amdgpu-pro-devel
- opencl-amdgpu-pro-comgr
- opencl-amdgpu-pro-icd
要使用来自 AMDGPU Pro 仓库的 clinfo,请运行
:~> /opt/amdgpu-pro/bin/clinfo
安装 AMD PAL OpenCL 驱动程序的简短形式
您只需要两个文件 - OpenCL 驱动程序 (libamdocl64.so 文件) 和链接到它的文件 (amdocl64.icd 文件)。您可以从 Linux 20.40 存档 安装 opencl-amdgpu-pro-icd 包。或者,您可以从包中提取这些文件并将其复制到所需的位置 (/etc/OpenCL/vendors/amdocl64.icd 用于 icd 文件,一些可见的文件夹用于 libamdocl64.so 文件。此 icd 文件显示 OpenCL 驱动程序所在的位置)。
有关更多信息,请阅读从“下载 Radeon Software for Linux 20.40 存档...”开始的上述内容。您不需要从 https://repo.radeon.com/amdgpu/ 安装包。您不需要用 libdrm-amdgpu 替换 libdrm_amdgpu1 包。
AMD ROCm
文档位于 此处。说明位于 此处。
默认设置下无法与 GCN5.0 配合使用 - 错误 已提交。
前言
ROCm 是 AMD 针对使用 HIP 和 OpenCL(以及通过翻译器 CUDA)在 AMD GPU 上进行计算的完全开源解决方案。AMD 主要为超级计算机市场创建 ROCm,用于 CDNA 产品线及其前身 GCN5(又名 Vega 显卡)。默认情况下,仅 PRO 系列显卡支持 ROCm,并且仅支持独立显卡。您可以使用调整后的环境变量在消费级显卡上使用 ROCm - 详情请参阅“ROCm - 在不受支持的硬件上运行”章节。GCN3 & GCN4 可能会工作,可能需要在更改参数后重新编译 ROCm,GCN1 - GCN2 代需要测试和额外工作。使用 GCN5 显卡的 iGPU 上的 OpenCL 有时有效,可能速度降低(与 PAL 驱动程序相比)。Bruhnspace 提供 ROCm 3.10(和 3.3.0)的 APU 特殊版本,但它可能存在一些 限制。
要求
支持的硬件参考指南 在此,通常已过时且存在错误。
对于 AMD ROCm 驱动程序,您需要支持 PCIe 原子操作 功能(PCIe 3.0 及更新版本)。一些旧的 CPU 和主板不支持 PCIe 原子操作。AMD Ryzen 系列(包括 Athlon 200GE/300GE/3000G 及更新版本)支持 PCIe 原子操作。PCIe 桥接器和重整时器也必须支持 PCIe 原子操作,才能在 CPU(s) 和 GPU(s) 之间提供此功能。AMD AM3+ 及更旧的插槽缺少 PCIe 原子操作。
要检查兼容性,请使用命令(GPU 已安装时)
sudo dmesg | grep -i kfd
如果您看到类似内容
kfd kfd: added device 1002:15d8
,则您的系统支持 PCIe 原子操作。如果没有 PCIe 原子操作,您将看到类似内容
kfd: skipped device 1002:7300, PCI rejects atomics
从 AMD 仓库安装
AMD 为 SUSE SLES 提供软件包,这对应于 openSUSE Leap。对于 Tumbleweed,请使用 openSUSE 仓库。
将用户添加到“video”和“render”组。
安装软件包使用 AMD 仓库,先安装软件包“amdgpu-install”,然后添加一个 ROCm 仓库并从中安装所需的软件包。阅读 AMD 手册 此处。一些 ROCm (https://repo.radeon.com/rocm/zyp/) 仓库(使用其中一个)
https://repo.radeon.com/rocm/zyp/latest/
https://repo.radeon.com/rocm/zyp/zypper/
https://repo.radeon.com/rocm/zyp/5.3.2/
通常您需要完全重新安装 ROCm 软件包,而不仅仅是简单升级。
ROCm 可能需要额外的 Perl 软件包。为 Leap 添加 Perl 仓库
sudo zypper addrepo https://download.opensuse.org/repositories/devel:/languages:/perl/$releasever/
从 openSUSE 仓库安装
OpenSUSE 为不同的版本提供软件包,包括 Tumbleweed。
将用户添加到“video”和“render”组。
从 https://software.opensuse.net.cn/package/rocm 添加所需的仓库。然后安装 ROCm 元软件包。
您可以在 此处 阅读用户体验。
检查 udev 规则
安装后,检查位于“/etc/udev/rules.d/”中的 udev 规则
1. 对于 amdgpu 驱动程序(文件 nn-amdgpu.rules)
KERNEL=="kfd", GROUP=="video", MODE="0660"
2. 对于 amdkfd 驱动程序(文件 nn-kfd.rules)
SUBSYSTEM=="kfd", KERNEL=="kfd", TAG+="uaccess", GROUP="video"
ROCm - 在不受支持的硬件上运行
您可以使用 HSA_OVERRIDE_GFX_VERSION 环境变量强制 ROCm (HIP) 在不受支持的硬件上运行(链接 1,链接 2,链接 3)。例如,对于 RDNA1 & RDNA2,您可以使用
export HSA_OVERRIDE_GFX_VERSION=10.3.0
这会欺骗 ROCm,将您的显卡视为 Navi 21 显卡(链接)。
对于 RDNA3 显卡,请使用
export HSA_OVERRIDE_GFX_VERSION=11.0.0
最好使用同一代产品的 GFX 号码。对于 GCN,使用 GCN 替代品,而不是 RDNA。要模拟 Vega (GCN5),请尝试这个 (GCN5.0)
export HSA_OVERRIDE_GFX_VERSION=9.0.0
或 (GCN5.1 - 有效吗?)
export HSA_OVERRIDE_GFX_VERSION=9.0.6
对于 GCN4(Radeon RX 400 & 500 系列),尝试使用
ROC_ENABLE_PRE_VEGA=1
您不需要最新的 ROCm 才能使旧硬件上的 OpenCL 正常工作。例如,对于 RX Vega 56/64 (Vega 10, GCN5.0),您可以使用 ROCm 4.5 (4.5.2 是最新版本)。ROCm 5.0 需要一些更改才能在 GCN5.0 硬件上运行,因为它使用了来自 GCN5.1 的新指令。
ROCm - Tumbleweed 和带有长期内核的 Docker
AMD 的建议是在容器中运行使用 ROCm 的应用程序。Docker 容器与主机共享内核,因此对于这种用例需要 amdgpu-dkms 驱动程序。如果可以使用长期内核,在 openSUSE Tumbleweed 上很容易做到这一点。您可以切换到 Slowroll 变体,以默认获得 LTS 内核。
安装内核
sudo zypper install kernel-longterm kernel-longterm-devel
重新启动并选择长期内核以确保其正常工作
sudo systemctl reboot
删除默认内核,因为它会在稍后编译时导致问题
sudo zypper remove kernel-default
添加 amdgpu 仓库的最新分支
sudo zypper addrepo https://repo.radeon.com/amdgpu/latest/sle/15.6/main/x86_64/ amdgpu-latest
安装 amdgpu-dkms
sudo zypper install amdgpu-dkms amdgpu-dkms-firmware
从这里开始,按照 AMD 网站上的文档 AMD 网站。主要是,您需要添加设备标志 --device /dev/kfd --device /dev/dri。
您还可以阅读更多关于 Docker on openSUSE 的信息。
openSUSE Tumbleweed 上的 GPGPU
您可以使用 openSUSE 仓库 或虚拟化或 Docker 或 Distrobox 使用 ROCm 和其他驱动程序。您可以切换到 Slowroll 变体以使某些事情更容易。
虽然 AMD 仅在 SUSE SLE(= openSUSE Leap)上支持 HIP & OpenCL,但您可以通过手动选择要安装的软件包在 Tumbleweed 上使用 ROCm。或者您可以自己编译驱动程序。
用户关于通过 Distrobox 在 Tumbleweed 上使用 ROCm 的说明和讨论 在此。
当然,您可以使用 Mesa 3D OpenCL (Rusticl) 驱动程序与 Tumbleweed。
OpenSUSE 提供带有 GPU:ROCm 仓库的一些软件包。将 GPU:ROCm 仓库添加到您的系统中以查看所有可用软件包。
添加仓库
zypper addrepo https://download.opensuse.org/repositories/science:GPU:ROCm/openSUSE_Tumbleweed/science:GPU:ROCm.repo
或
zypper addrepo https://download.opensuse.org/repositories/science:GPU:ROCm/openSUSE_Factory/science:GPU:ROCm.repo
安装 AMD HIP 运行时 (https://software.opensuse.net.cn/package/hip)
zypper refresh zypper install hip
安装 OpenCL 驱动程序 (https://software.opensuse.net.cn/package/amd-opencl)
zypper refresh zypper install amd-opencl
这将安装这些文件
/usr/lib64/libamdocl64.so /usr/share/OpenCL/vendors/amdocl64.icd /usr/share/doc/packages/rocm-ocl-icd/LICENSE
此 GPU:ROCm 仓库是 openSUSE-Factory 类型,与 Leap 不兼容。将此仓库添加到 openSUSE Leap 将破坏您的操作系统。
openSUSE Tumbleweed 中 OpenCL icd 文件的非标准路径
*.icd 文件的默认路径是“/etc/OpenCL/vendors”。作为不必要的复杂性,Tumbleweed 使用路径“/usr/share/OpenCL/vendors”而不是默认路径。使用符号链接或复制文件以获得标准行为。有关详细信息,请阅读 链接1,链接2,链接3。
APU (iGPU) 上的 GPGPU
AMD 不为消费产品的集成 GPU 提供 GPGPU 的官方支持。一些 ROCm 版本支持 iGPU,但它们的工作速度可能比预期慢得多(与 PAL 驱动程序相比)。驱动程序安装程序支持旧选项,但此旧驱动程序是 ORCA 驱动程序,支持(?) GCN1 - GCN4,并且不支持 GCN5(Vega)和更新的 GPU。
ROCm 6.x 需要禁用受支持的 AMD iGPU 以使用 AMD dGPU - 请参阅之前的 信息。有关 iGPU 设置的一些信息:链接。Amdgpu 驱动程序在 Linux 6.10 内核中获得了一些增强 - 新闻,补丁。
PAL 驱动程序有效。但 AMD 放弃了 PAL 驱动程序,转而支持 ROCm,因此自 20.40 驱动程序以来,没有提供新版本。
一个不错的选择是使用 Mesa Rusticl OpenCL 驱动程序。
使用 amdgpu 驱动程序代替 radeon 的 GCN1 & GCN2
默认情况下,GCN1 & GCN2 硬件使用 drm/radeon 内核驱动程序。对于 GCN1 & GCN2,amdgpu 驱动程序仍处于实验阶段,因此您需要内核参数才能使用 amdgpu 驱动程序而不是 radeon 驱动程序。使用 amdgpu 有利,因为您可以使用它获得 Vulkan 和 OpenGL 4.6 支持(带有 SPIR-V)。
使用内核参数获取 amdgpu 驱动程序而不是 radeon
对于 GCN1
radeon.si_support=0 amdgpu.si_support=1
对于 GCN2
radeon.cik_support=0 amdgpu.cik_support=1
阅读 此处 以获取详细信息。
使用 GCN1 & GCN2 和 amdgpu 驱动程序,显卡上的 VGA 输出可能无法工作。
为 GPGPU 分配 GPU
使用 GPU 进行 GPGPU 时,很容易获得 100% 的 GPU 负载,因此您的桌面窗口可能会卡顿,网络浏览器可能会挂起。为了避免这种行为,请为桌面使用分配一个 GPU(辅助 GPU,最简单的那个),并使用其他 GPU 进行 GPGPU。此解决方案还将加速器中的一些视频 RAM 释放出来用于计算。
为 GPGPU 分配 GPU 的主要规则:不要将视频电缆连接到您选择用于计算的显卡。将视频电缆连接到辅助 GPU。
反向分配:您可以使用图形卡进行通用用途,并使用集成 GPU 进行 GPGPU。
为了获得最佳性能,请将 GPGPU 卡安装到主图形插槽(最靠近 CPU 的 PCIe x16 插槽)。有关详细信息,请阅读主板手册。一些主板(例如,带有 AMD X370/470/570/670/等芯片组的主板)可以将 GPU 的 PCIe x16 通道拆分为一对 PCIe 8x 通道,因此您可以在主板上获得两个 PCIe x16 图形插槽,可以在 BIOS 中配置为使用 x16 + x0 通道或 x8 + x8 通道。您可以使用芯片组提供的 PCIe 插槽用于辅助 GPU。如果您的主板没有提供所需数量的 PCIe x16 插槽,则可以使用立式卡将 PCIe x1 转换为 PCIe x16。如果 PCIe 插槽位于末端,则可以在其中安装更长的 PCIe 卡。
AMD GPU 最适合用于视频输出和辅助任务。使用带有 amdgpu 驱动程序的 GCN1 和更新的 GPU。要使用 GCN1 & GCN2 芯片的 amdgpu 驱动程序,请阅读 此 说明。但存在一些限制
- AMD ROCm 与支持架构的 iGPU 不兼容
- AM4 APU 比 AM4 CPU 慢,并且为 GPU 提供的 PCIe 通道有限
特殊情况
Blender
从 blender.org 下载存档,解压缩,并将其用作便携式安装。Blender 2.91 以来不支持 Terascale 芯片,仅需要 GCN1 及更新版本才能运行。对于 Terascale 2 & 3,请尝试使用 Blender 2.90(尽管不受支持,但它可能仍然有效)。Blender 2.x 可以使用 OpenCL。在 Previous versions 页面下载旧版 Blender。
您可以使用 openSUSE 仓库:https://software.opensuse.net.cn/package/blender。对于 Leap,请使用 Experimental 仓库。
自从 Blender 4.3 发布以来,Linux 上可以使用 HIP RT 进行光线追踪硬件加速(新闻)。要获得 HIP RT 的加速,您需要在硬件中支持 RT,这从 RDNA2 架构开始可用(PR#135179)。RDNA1 和更旧的芯片在硬件中没有 RT 块。另请阅读 此 部分的手册。
对于 GCN5.1,请使用 ROCm 5.3 - 5.7 中的 HIP。自从 Blender 4.3 以来,AMD HIP 不可用于使用 Cycles 渲染引擎加速 Vega GPU(GCN 5.0、GCN 5.1)(提交)。
您可以使用 此 网站检查 GPU 在 Blender 工作负载中的兼容性和速度(使用 Cycles_X ("Cycles X") 渲染器)。注意:NVIDIA OptiX 产生可接受的,但并非 100% 准确的结果。
对于 Cycles X 渲染器(Blender 3.0+),AMD GPU 是最糟糕的情况
- Blender 3.0+ 不支持 OpenCL,需要使用来自 AMD ROCm 的 AMD HIP。但 AMD HIP 经常不可用或无法正常工作。旧于 RDNA1 的 GPU 不受 Blender + HIP 的官方支持。
- 如果 GPU 正常工作,那么它的速度比 Nvidia 和 Intel 的竞争对手慢得多。
但是,如果您使用其他渲染器(EEVEE,Indigo),那么您将获得不同的结果。
可以使用 ZLUDA 翻译器使用 CUDA 后端运行 Blender(测试)。使用 ZLUDA + CUDA + ROCm 后端,Blender 的速度比 HIP + ROCm 快 约 20%,但可能由于 渲染错误。
DaVinci Resolve
DaVinci Resolve 需要非常规的 OpenCL 扩展 cl_khr_gl_sharing 和 cl_khr_image2d_from_buffer,这些扩展可能在某些驱动程序中不可用。扩展 cl_khr_image2d_from_buffer 是 OpenCL 2.0 的一部分。ORCA OpenCL 驱动程序符合 OpenCL 1.2 标准,并且可以轻松地挂起。使用兼容的驱动程序(PAL、ROCm/ROCr)。有关详细信息,请阅读 链接1,链接2,链接3。您可能还需要安装 Workstation (Proprietary)(以前的 AMDGPU-PRO)OpenGL 驱动程序。扩展 cl_khr_gl_sharing 已实现 在 Mesa 3D 中用于 radeonsi。扩展 cl_khr_image2d_from_buffer 已实现 在 Mesa 3D 中用于 mesa、llvmpipe 和 iris,但未用于 radeonsi。
Zink 驱动程序 将在 Mesa 25.1 中获得对 cl_khr_gl_sharing 和 cl_khr_image2d_from_buffer 扩展的支持(链接1,链接2)。
Darktable
Darktable 需要 OpenCL 1.2,因此您可以使用相当旧的硬件和驱动程序。Terascale 芯片缺少一些命令,因此您需要在文件中进行调整才能在 Darktable 中使用 OpenCL - 请阅读其手册以获取详细信息。
POCL
POCL = Portable Computing Language - 一个 OpenCL 实现(软件包)- 可能由于路径错误而无法工作:请参阅 Bug 1182054。
提示
- 旧的 AMD 驱动程序包含安装程序和其中的所有软件包。脚本在根目录下创建包含所有软件包的子文件夹,然后从该文件夹安装软件包。新的 AMD 驱动程序安装程序使用 AMD 仓库,地址为 https://repo.radeon.com。
- 当系统同时拥有 GCN 和 Terascale GPU 时,需要进行特殊调整才能同时使用 amdgpu 和 radeon 驱动程序(链接1,链接2)。
- 安装 ROCm 驱动程序默认会禁用“radeon”视频驱动程序。
- 在 Terascale 1 及更旧的 AMD/ATI 芯片上不支持 GPGPU(好吧,虽然可行,但没有意义)。Rusticl 驱动程序在 Terascale 2 和 3 上不可用图像支持。Mesa 3D 正在放弃对 Terascale 2 和 3 的 OpenCL 支持(使用 r600g 驱动程序)。
- AMD 仅官方支持选定的独立显卡和服务器 APU 的 GPGPU。但是,GPGPU 可以在消费级 APU 上工作。
- 以前 amdkfd 是一个单独的驱动程序。现在它是 amdgpu 驱动程序的一部分 - 新闻,补丁。
- 在 2025 年夏季,AMD 开始将重点从 AMDVLK 转移到 RADV,并直接为 RADV 做出贡献。