首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我们需要SPIR-V?

为什么我们需要SPIR-V?
EN

Stack Overflow用户
提问于 2018-04-02 21:24:45
回答 1查看 7.4K关注 0票数 12

我一直在阅读关于异构计算的文章,并偶然发现了斯皮尔-V。我在那里发现了以下情况:

SPIR是第一个开放标准的跨API中间语言,用于本机表示并行计算和图形。

这幅图像中我可以看到,所有高级语言,如GLSL、HLSL、OpenCL C等,都被编译成SPIR,并以这种方式传递给要执行的正确的物理设备。

,我的问题是,为什么我们需要编译我们的着色器/内核代码到SPIR-V,而不是直接编译成机器指令,将由所选的物理设备执行?如果这个问题不正确,你能解释一下为什么我们需要SPIR-V吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-02 21:46:36

通常,您可以将编译器分为两个部分:特定语言(或语言系列)的前端和后端,后者与语言无关,可以为一个或多个特定的体系结构生成机器代码(您可以进一步分解它,但现在已经足够了)。可以在这两个部分进行优化;其中一些在任何地方都更合适。这就是clang和LLVM之间的关系,例如: clang是C族语言的前端,LLVM是后端。

由于不同的GPU有明显不同的机器代码(通常比arm64和x86_64差得多),所以后端编译器需要在GPU驱动程序中。但是没有理由让前端也出现在那里,尽管在OpenGL中是这样工作的。通过将两者分开,并使用SPIR-V作为它们用于通信的语言,我们得到:

  1. 一个解析和语法检查实现,而不是每个供应商一个。这意味着开发人员只针对语言的一个变体,而不是一堆特定于供应商的变体(因为实现了不同的版本、bug、解释上的差异等等)。
  2. 支持多种语言。您可以使用ESSL (OpenGL ES的GLSL变体)、GLSL、HLSL和OpenCL编写Vulkan着色器,使开发人员更容易支持多个API。它们都发出SPIR-V,所以驱动程序不必支持每种语言。理论上,有人可以设计自己的语言,或者支持MetalSL等等。
  3. 由于SPIR-V应该是机器编写/机器读取,而不是对人友好的,所以它比GLSL更简单、更规则。因此,让所有供应商以高质量实现它应该更容易。(目前,实现要比GL驱动程序成熟得多,所以我们还不太成熟。)
  4. 一些昂贵的优化可以脱机进行,例如,作为应用程序构建过程的一部分,而不是在运行时,当您试图在16或33毫秒内完成一个框架时。
票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49619038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档