1

据我了解,根据 SPIR-V 1.3 规范,所有指令均以 4 字节字分段。这与传统的字节码 IR 语言(如 Python 字节码和 Java 的 JVM 字节码)不同,如果我正确地理解字面意义上的将操作分割为单个字节的话。我什至听过人们不经意地谈论这特别是一件好事(“文字代码”),但从未详细说明原因。为什么 Khronos 集团决定沿着这条路线进行其 SPIR-V 定义,而不是使用单字节格式或其他任意大小?

4

1 回答 1

2

原因有很多,但最大的可能是它以简单、高效和可扩展的方式解决了字节序问题。

SPIR-V 被定义为小端编码。因此,在大端系统上,步骤 1 必须将数据转换为正确的端。在更面向字节的汇编风格中,您必须读取和解释每个操作码,然后确定哪些操作数必须进行字节交换。基本上,字节序交换需要解释数据。使用 SPIR-V,您只需每 4 个字节转置一次:一个简单而高效的循环。

另外,SPIR-V 是可扩展的;扩展可以添加到操作码集中。在面向字节的程序集中,您需要能够理解每个扩展操作码才能进行字节序转换。使用 SPIR-V,您不必关心是否可以理解所有操作码;只需每 4 个字节转置一次,就完成了。因此,即使它不理解所有操作码,您也可以编写一个至少可以读取 SPIR-V 程序集的工具。

与其他字节码相比,这使得 SPIR-V 有点笨重,但它更容易咀嚼。

于 2018-04-20T15:10:45.097 回答