【问题标题】:What is the most direct way of addressing a graphics chip?寻址图形芯片的最直接方法是什么?
【发布时间】:2020-07-02 23:23:45
【问题描述】:

我的旧电脑中装有 Intel HD 420。

我想知道 - 我们可以使用汇编代码直接寻址 CPU,使用 muladd 等命令。

如何将汇编计算命令传递给英特尔 HD 等图形芯片,或者说 AMD 锐龙的“gpu 部分”?它与 ARM 图形芯片的机制相同吗?

(没有 apu、onboard-graphics、intel-hd、ryzen 的标签)

编辑:我知道 OpenCL 是正确的方法,而且就通信而言,板载芯片与任何其他外围硬件(例如打印机)一样好。 然而,出于理论上的好奇,寻找最简单的 Assembly sn-p,它可以在 Intel HD XXX 等板载图形芯片上进行任何类型的普通计算。

【问题讨论】:

  • gpu 运行什么以及如何以及如何访问是特定于芯片/板的,可能会有一些重叠,但假设每个都是不同的。它是独立的逻辑,绝不会连接到主处理器,因此您如何使用它取决于设计。供应商也可能不会发布这些详细信息,因此您可能必须对开源项目进行逆向工程。
  • 没有理由假设英特尔、AMD、ARM 等将远程相同,更不用说英特尔产品 x 与英特尔产品 y。选择一个,研究它,如果你遇到了死胡同,选择另一个,重复,直到你放弃或成功。树莓派 GPU 已记录在案。
  • 如果看VGA卡是怎么访问的就够了,你可以搜索“VGA”和“assembly”,应该会有东西出来。如果您真的想了解如何使用 GPU 的可编程部分(即着色器),那么您可能需要先学习the Intel Graphic HD PRM。任何这样做的低级代码都太长而且晦涩难懂。请注意,GPU 有自己的程序集(例如 NVIDIA PTX),如果您正在寻找的话。

标签: assembly x86 gpu intel


【解决方案1】:

GPU 是一个单独的核心,您只能通过 MMIO 与之交互;它不是像 x87 最初那样的协处理器(fmul 在单独的芯片上运行)。您可以像图形驱动程序一样访问它。

没有直接在 GPU 上执行操作的 CPU 指令,因为它没有紧密耦合根本,因此高延迟是 GPGPU 的一个问题。将工作发送到 GPU 看起来就像存储到内存中,然后将指向该物理内存的指针传递给 GPU,例如通过 mov [mem], rax 或其他地址到 GPU 的 MMIO 寄存器之一的地址。

对于英特尔,如果您真的想深入研究 Linux DRM(直接渲染管理器)和 X11 驱动程序,这些驱动程序会在请求内核访问后与 GPU 对话。

【讨论】:

  • 你能举一个小例子来说明它是如何完成的,一些简单的向量计算吗?
  • @Jay:见鬼。无论问题多么简单,只要与 GPU 进行对话,您就需要一个巨大的复杂基线。我什至不知道如何为 i915 / Intel-HD 硬件编写最小的驱动程序!我只知道(就像其他所有现代设备一样),它们将涉及 MMIO 读取和写入,就像您对 PCIe 设备所做的那样,还涉及写入设备(视频)内存或让 GPU 读取系统内存。我认为您可以在 Linux 上进行 DRM 系统调用来请求访问这些系统,否则内核本身会进行真正的访问。
  • 感谢您的澄清。 OpenCL 被认为是与板载芯片对话的最低“合理”方式,对于某些芯片,它是预编译的,所以你不知道发生了什么?
  • @Jay:是的。尽管您可以对实际在 GPU 上运行的代码进行一些精细的控制,例如我认为您可以在 OpenCL 内核中使用内联 (GPU) asm。但是将 GPU 代码放到 GPU 上(并进行内存管理)最好留给图形驱动程序。不过,所有主要 GPU 都有开源 3D 驱动程序;在 NVidia 的情况下,它们是逆向工程的,所以不要立即支持最新的 NV 芯片。我不确定他们是否支持 OpenCL(我猜可能),他们确实支持着色器程序。所以信息就在那里,只是太复杂而无法重新实现。
【解决方案2】:

如果您需要英特尔高清显卡的 ISA,here it is。英特尔为其所有图形芯片提供程序员参考手册here。这些信息可用于为 Intel HD 显卡创建显卡驱动程序,这是访问 GPU 的最“直接”方式。

请注意,这是针对英特尔高清显卡的,因为据我所知,它们是唯一一家为开源驱动程序开发提供 ISA 文档的公司。

祝你好运!

【讨论】:

  • 请注意,Stack Overflow 上的答案应该能够自己站起来,而不仅仅依赖于链接。请考虑从该参考中添加一些示例或详细信息到答案,这样即使链接断开,它也很有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-26
相关资源
最近更新 更多