5 opengl gpu x86-64 intel instruction-set
假设我使用的是基于 Intel x64 的笔记本电脑,没有专用的 GPU。我必须有一些板载 GPU 否则我的屏幕将无法工作,对吗?
shift, add, load,store指令?他们还有哪些其他指令是普通 CPU 没有的?可以在01.org找到英特尔图形控制器的完整文档:
硬件规范 - PRM 发布者:Paul Parenteau 最后修改时间:2020 年 6 月 15 日
回答问题 2:是的,有单独的组装说明,如下所示(来自“ GEN 组装简介”)
通常,所有指令都具有以下形式:
[(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 是一个可选的源寄存器。
每个线程都有 128 个寄存器的专用空间,从 r0 到 r127。每个寄存器为 256 位或 32 字节。
在上面的汇编代码中,我们只看到了这些特殊寄存器之一,即空寄存器,它通常用作发送指令的目的地,用于写入和指示线程结束。这是其他架构寄存器的完整表格: