根据SPIR-V 1.3规范,据我所知,all instructions are segmented in 4 byte words.这与传统的字节码IR语言不同,如Pythons字节码和Java的JVM字节码,如果我理解正确的话段操作作为单个字节。我甚至听说过人们不知不觉地谈论这是一件好事("字码"),但从未详细说明原因。为什么Khronos小组决定沿着这条路线进行SPIR-V定义,而不是使用单字节格式或其他任意大小?
答案 0 :(得分:2)
有很多原因,但可能最大的原因是它以简单,高效和可扩展的方式解决了endian问题。
SPIR-V被定义为小端编码。因此,在大端系统上,第1步必须将数据转换为正确的endian。在更加面向字节的汇编样式中,您必须读取并解释每个操作码,然后确定哪些操作数必须进行字节交换。基本上,endian-swapping需要解释数据。使用SPIR-V,您只需转换每4个字节:一个简单而有效的循环。
另外,SPIR-V是可扩展的;扩展可以添加到操作码集。在面向字节的程序集中,您需要能够理解每个扩展操作码才能进行字节序转换。使用SPIR-V,您无需关心是否能够理解所有操作码;只需转换每4个字节即可完成。因此,您可以编写一个至少可以读取SPIR-V程序集的工具,即使它不能理解所有操作码。
这使得SPIR-V与其他字节码相比更加笨重,但它更容易咀嚼。