英特尔是否有专门为其GPU设计的指令集?

9

假设我使用的是没有独立GPU的基于Intel x64的笔记本电脑,那么我必须有一些内置GPU才能使我的屏幕工作,对吗?

  1. 内置GPU通常嵌入到CPU中吗?
  2. 英特尔是否为其GPU拥有单独的指令集?如果有,是否有文档?
  3. GPU指令是否与CPU大不相同?例如,GPU是否也具有移位(shift)、加法(add)、加载(load)和存储(store)等指令?它们还有哪些指令是普通CPU所没有的?
  4. 内置GPU与独立GPU的指令集/流水线有区别吗?还是仅仅与额外核心数量和专用RAM有关?
  5. 在拥有独立GPU的计算机上,C++ OpenGL代码生成的指令如何在GPU上执行而不是在常规CPU上结束?

GPU核心根本不是x86核心,完全独立的指令集。内置GPU位于与CPU核心相同的物理硅芯片上,例如在Intel上连接到与核心、内存控制器和系统代理相同的环形总线上。请参见https://www.anandtech.com/show/3922/intels-sandy-bridge-architecture-exposed/4,了解四核Sandybridge的图表。https://www.realworldtech.com/sandy-bridge/8/是详细撰写的一部分,重点关注IA核心(Intel Architecture = x86 = CPU核心)。 - Peter Cordes
是的,不同的GPU供应商有自己的指令集。这就是为什么程序中的OpenGL着色器必须由特定GPU的GPU驱动程序从可移植语言编译而成。 - Peter Cordes
如果我在我的笔记本电脑上编译某些内容,然后在另一台配备专用 NVIDIA 的 Intel x64 上运行它会发生什么呢?我猜它不会使用 NVIDIA 吧? - user13493313
图形驱动程序在运行时编译着色器程序,每次运行都会进行。这就是为什么游戏等应用可以分发一个单一版本的程序,在任何OpenGL系统上都能正常工作,包括未来的GPU,即使这些GPU在游戏编写时并不存在。反之,图形驱动程序也可以提供稳定的可移植API / ABI。 - Peter Cordes
假设我编写了一些使用OpenGL的C++代码并进行了编译。我猜测生成的代码在运行时会进行系统调用,这些调用将由图形驱动程序处理,然后生成实际的指令来执行图形工作? - user13493313
显示剩余2条评论
1个回答

9

完整的硬件参考

您可以在01.org找到Intel图形控制器的完整文档:

硬件规格说明-PRMs 作者:Paul Parenteau 最后修改日期:2020年6月15日

回答问题2:是的,有单独的汇编指令,如下所述(来自“GEN汇编简介”)

英特尔GPU汇编的一般格式

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

[(pred)] opcode (exec-size|exec-offset) dst src0 [src1] [src2]

(pred) 是可选的谓词。我们现在要跳过它。

opcode 是指令的符号,例如add或mov(下面有完整的指令表)。

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

exec-offset 是告诉EU哪个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

SIMD32汇编的mov指令

由于GRF每个操作数只能访问有限数量的字节,编译器必须发出四个8宽度操作。

dst 是目标寄存器

src0 是源寄存器

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

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

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

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

体系结构寄存器文件(ARF)寄存器

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

Architecture Register File (ARF) Registers

可用的GEN(通用)汇编指令

Available GEN (general) Assembly Instructions Available GEN (general) Assembly Instructions 2


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接