我有几个现代 GPU,既有 ATI(就拿 Polaris 480 来说)也有 Nvidia(就拿 1080 来说)型号。我将它们用于各种目的,例如挖矿、视频渲染、物理处理。每个任务在四个基本参数(核心和内存电压和时钟)的某些特定值下都稳定且快速。
我曾经使用 Windows 和 MSI Afterburner 来设置上述参数。我还知道 OverdriveNTool.exe 之类的实用程序,它具有命令行界面。这声称在 Windows 中可以进行此类控制。
另外,我注意到 GPU 本身就是一台独立的计算机,几乎能够独立于 PC 运行。它有自己的 BIOS、RAM 和核心芯片。操作系统与 GPU 操作无关,因为操作系统只是在 CPU 上运行的“固件”,试图通过与操作系统无关的协议“要求”GPU 执行某些操作。这表明 GPU 控制协议与操作系统无关。
结合上述两个说法,我可以得出结论,在运行时(以编程方式)修改任何操作系统上的 GPU 时钟和电压是绝对可能的。
我想在 Linux 上这样做(我的意思不是某些特定的发行版,比如 Ubuntu,而是 Linux 本身 - 一些简约的环境:)kernel+glibc+busybox
到目前为止我发现的是:
我amdgpu
发现了两件事:
首先是一些奇怪的工艺(更像是儿童玩具 - 谁把它放在那里,为什么放在那里?:),它被称为 powerplay 文件系统,存在于内核中
/sys/class/drm/card?/ mclk_od
并允许设置 0-20% 的提升(它甚至有int
内核 amdgpu 源类型!!!)。它在我的 busybox 版本上从未工作过,并且不允许设置精确的参数。像这它使用了 AMD ADL,但我找不到在哪里下载/构建该 ADL 库,甚至听说它已经过时并且不起作用。Linux 的官方 amdgpu 驱动程序下载没有这样的库,我不知道在哪里可以得到它。
我nvidia
找不到任何方法来在 kernel+glibc+busybox 等最小环境中控制 GPU 参数
目前,我直接在 bios 中硬刷所需的频率和电压。但这很浪费时间,需要重新启动,并且会很快耗费 bios 闪存写入周期。因此,我要求提供设置时钟和电压的简单方法。
如何在原始 Linux(没有 xorg,很少有第三方库)中为 ATI RX 480 和 NVidia 1080 显卡设置核心时钟和电压?