显卡有自己的指令集吗?

62

图形卡有自己的指令集吗? 我认为它们有,但我一直在想它们是专有的还是存在某种开放标准。

每个GPU指令是否都需要由CPU指令前置,还是无缝的? 也就是说,OpenGL或DirectX是否通过CPU调用驱动程序层,然后将GPU指令发送到总线上,还是更加复杂?


1
你可以查看ARB汇编指南着色器汇编维基,因为汇编语言接近机器码,可能会提供底层指令集的见解。 - Hank W
6个回答

52
是的,他们有。AMD甚至目前提供了高达HD4000系列的规格说明。
这里查看AMD的R700指令集参考指南。
还有一个名为Nouveau的开源项目对Nvidia指令集进行反向工程。
请注意,Nvidia的体系结构略有不同,因为他们不使用VLIW而是标量执行(尽管多个线程另外分组成所谓的Warp或Wavefront)。
此外,并非每个OpenGL/Direct3D调用都映射到“GPU指令”。例如,在绑定纹理时,驱动程序只会设置适当的硬件寄存器,告诉GPU使用哪个纹理内存进行采样。
真正的程序仅在GPU上执行着色器或流处理内核时运行。

8

是的,GPU有自己专有的指令集。GPU指令独立于CPU指令执行。


7
好的,但是操作系统是如何知道如何做的呢?如果一个操作系统是为x86编译的,我了解它如何知道x86指令。但是如果一个系统有一个ATI显卡,它是如何知道要使用ATI指令集的呢? CPU首先调用驱动程序执行OpenGL指令吗?指令如何路由到相应的资源? - Matt
16
驱动程序负责所有操作。Windows以某种方式与驱动程序通信,而驱动程序以某种方式与GPU通信。 - Jed Smith
我认为它使用的是 PCI 设备 ID。至少这就是 nvidia 声称阻止加密货币挖掘者的方式。当然,这只是我的想法。 - Hank W

6
目前,NVIDIA使用一种名为PTX的中间ISA。您可以在此文档中了解相关内容:PTX ISA 1.1。 在安装时,PTX程序会被翻译成目标硬件指令集。

6

我的猜测是因为它本质上只是一个链接答案。 - faintsignal
这个答案可能不符合规定,但它确实很有价值。 - undefined

6

AMD Graphics Core Next (GCN)

https://en.wikipedia.org/wiki/Graphics_Core_Next

第一代被称为“南岛”。维基页面链接到 AMD 规格,其中记录了 ISA,例如:http://developer.amd.com/wordpress/media/2012/12/AMD_Southern_Islands_Instruction_Set_Architecture.pdf

甚至有一个名为 MIAOW 的开放 RTL 实现,https://github.com/VerticalResearchGroup/miaow,尽管它可能侵犯了 AMD 选择保持沉默的一些知识产权(来源)。

AMD CDNA

根据维基百科:https://en.wikipedia.org/wiki/AMD_Instinct ,新的 AMD 计算重点 GPU 产品(如 Instinct 系列)似乎使用 CDNA 架构,例如:

SPIR-V

https://en.wikipedia.org/wiki/Standard_Portable_Intermediate_Representation 是 Krhonos 标准的中间语言。

它很可能被设计成类似于现有的 GPU ISA,以便更易于实现并具有更好的采用率,因此它应该能够很好地反映实际的 GPU ISA。

如果这个标准确实受到欢迎,就像在 Vulkan 和 OpenCL 2.1 中采用的那样,未来的实现可能会被设计为密切实现以获得更好的性能。

如何获取和修改 PTX

如何创建或操作 GPU 汇编程序?

相关

https://computergraphics.stackexchange.com/questions/7809/what-does-gpu-assembly-look-like


2
请参见:CUDA编程指南版本3.0。
设备的计算能力由主要修订号和次要修订号定义。
具有相同主要修订号的设备具有相同的核心架构。基于Fermi架构的设备的主要修订号为2。先前的设备都是计算能力1.x(它们的主要修订号为1)。
次要修订号对应于核心架构的增量改进,可能包括新功能。
附录A列出了所有支持CUDA的设备以及它们的计算能力。附录G提供了每个计算能力的技术规格。

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