首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成的SPIR-V码应该优化吗?

生成的SPIR-V码应该优化吗?
EN

Stack Overflow用户
提问于 2017-04-30 23:56:45
回答 1查看 881关注 0票数 0

我目前正在考虑将一些代码从OpenGL/GLSL移植到Vulkan/ SPIR-V,其中一部分代码在运行时生成GLSL,因此我不得不生成SPIR-V。我想知道的是,我应该如何与生成的SPIR-V中的优化相关联。

特别是,我真的找不到任何关于我应该对驱动程序的编译器有什么样的期望的信息。我是否应该期望它自己进行积极的优化,从而尽量保持SPIR代码的整洁,并尽可能多地保持“原始意图”,供编译器查看?或者,我应该期望它进行相当简单的代码生成,并在生成SPIR-V时尽可能地进行积极的优化?

也许对于特定的例子,在生成SPIR-V时,我应该做哪些事情呢?

  • 消除冗余存储-然后-负载的局部变量?
  • 循环展开或剥离/功能内衬?
  • 常量传播/公共子表达式消除?
  • 保持尽可能多的SSA形式,而不是加载和存储局部变量?

我非常天真的期望是,编译器将希望使其优化传递适应硬件的具体情况,因此我应该尝试保持SPIR-V代码的干净和高级别,在这种情况下,循环展开会破坏信息并阻止驱动程序自行决定展开,但我真的只是猜测,没有任何真正的信息。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-01 01:40:32

您通常可以期望运行时编译器(在驱动程序中,使用SPIR-V)执行许多标准优化。在许多实现中,它与GL驱动程序中的后端相同,并且执行大多数相同的优化。但是,如果没有太多不必要的垃圾,解析SPIR并将其转换为驱动程序内部表示的过程将会更快。因此,如果您正在编写自己的生成器,就值得在生成“干净的”SPIR-V上付出一点努力。

您可能会看到遮阳,它是一个易于集成的库,它使用glslang作为GLSL到SPIR-V转换的俚语,还可以运行spirv-选择执行您命名的一些优化。当spirv-opt获得额外的优化(正在积极开发中),shaderc将获得这些优化。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43712587

复制
相关文章

相似问题

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