英特尔是否有单独的 GPU 指令集

5 opengl gpu x86-64 intel instruction-set

假设我使用的是基于 Intel x64 的笔记本电脑,没有专用的 GPU。我必须有一些板载 GPU 否则我的屏幕将无法工作,对吗?

  1. 板载 GPU 通常是否嵌入到 CPU 中?
  2. 英特尔是否有单独的 GPU 指令集?如果有,有文档吗?
  3. GPU 指令与 CPU 有很大不同吗?例如,GPU 是否也有 shift, add, load,store指令?他们还有哪些其他指令是普通 CPU 没有的?
  4. 板载 GPU 与专用的指令集/流水线之间有区别吗?或者区别仅在于额外内核和专用 RAM 的数量?
  5. 在配备专用 GPU 的机器上,从 C++ OpenGL 代码生成的指令如何在 GPU 上执行而不是在常规 CPU 上执行?

Sol*_*eil 5

完整的硬件参考

可以在01.org找到英特尔图形控制器的完整文档:

硬件规范 - PRM 发布者:Paul Parenteau 最后修改时间:2020 年 6 月 15 日

回答问题 2:是的,有单独的组装说明,如下所示(来自“ GEN 组装简介”)

Intel GPU组装的一般形式

通常,所有指令都具有以下形式:

[(pred)] opcode (exec-size|exec-offset) dst src0 [src1] [src2]
Run Code Online (Sandbox Code Playgroud)

(pred)是可选谓词。我们暂时跳过它。

opcode 是指令的符号,如 add 或 mov (我们在下面有一个完整的操作码表。

exec-size 是指令的 SIMD 宽度,我们的架构中可以是 1、2、4、8 或 16。在 SIMD32 编译中,通常执行大小为 8 或 16 的两条指令组合为一个。

exec-offset是告诉欧盟的部分,从 ARF 寄存器的哪个部分读取或写入,例如 (8|M24) 查询执行掩码的第 24-31 位。发出如下所示的 SIMD16 或 SIMD32 代码时:

mov  (8|M0)   r11.0<1>:q   r5.0<8;8,1>:d   // id:1
mov  (8|M8)   r13.0<1>:q   r6.0<8;8,1>:d   // id:1
mov  (8|M16)  r15.0<1>:q   r9.0<8;8,1>:d   // id:1
mov  (8|M24)  r17.0<1>:q   r10.0<8;8,1>:d  // id:1
Run Code Online (Sandbox Code Playgroud)

(SIMD32汇编的mov说明)

由于 GRF 中每个操作数可以访问多少字节的限制,编译器必须发出四个 8 位宽的操作。

dst 是目标寄存器

src0 是一个源寄存器

src1是一个可选的源寄存器。请注意,它也可以是立即数,例如 0x3F000000:f (0.5) 或 0x2A:ud (42)。

src2 是一个可选的源寄存器。

通用寄存器文件 (GRF) 寄存器

每个线程都有 128 个寄存器的专用空间,从 r0 到 r127。每个寄存器为 256 位或 32 字节。

架构寄存器文件 (ARF) 寄存器

在上面的汇编代码中,我们只看到了这些特殊寄存器之一,即空寄存器,它通常用作发送指令的目的地,用于写入和指示线程结束。这是其他架构寄存器的完整表格:

架构寄存器文件 (ARF) 寄存器

可用的 GEN(通用)组装说明

可用的 GEN(通用)组装说明 可用GEN(通用)组装说明2