【问题标题】:Do short instructions have better performance?短指令有更好的性能吗?
【发布时间】:2016-02-03 09:25:50
【问题描述】:

我真的需要关心在哪里可以发出.s 指令吗?或者它只会影响尺寸但实际性能是一样的?

生成的 dll 也将用于 AOT 平台。对于带有 .s 和不带有 .s 的 IL,生成的 AOT-ed dll 是否相同?

我的意思是br.sldloca.s 等等。

【问题讨论】:

  • 请分享一个代码?不清楚你对.s-instructions 的意思。
  • @HimBromBeere - 例如beqbeq.s
  • 我相信 .s 后缀只是为了允许压缩 IL,即中间代码。这可能会减少一些下载时间,例如在网络解决方案中。我不相信它对渲染的机器代码有任何影响。

标签: c# il opcode aot


【解决方案1】:

这取决于。 .s(以及像ldc.i4.1这样的包含文字的操作码)的主要目的只是为了减小代码的大小,而减小方法大小的好处是可以在生成native时内联方法来自调用方法的 CIL 的代码(x86 抖动的限制是 32 字节的 IL)。因此,在这种情况下,如果在 inline-candidate 方法中使用简短指令,则可以提高应用程序的性能。

否则,由于执行的不是 CIL,短操作码和普通操作码生成的机器码应该是相同的(并且在可能的情况下也经过优化)本机代码。

【讨论】:

  • MSIL 的大小与方法是否内联无关。只有机器代码的大小会影响这一点。
  • 如何减小方法的字节大小使得内联方法成为可能?我认为这可能取决于 IL 指令 count 而不是大小。
  • @HansPassant 根据this 文章,“inlinee 的大小限制为 32 字节的 IL”。确实它依赖于 JITter,但我已经看到至少三篇文章提到了这个限制。此外,如果内联和非内联方法的机器码可能由于与其参数相关的优化而不同,那么机器码的大小如何影响它?
  • @Vlad 也许对于其他版本的 JIT,但大多数文章都将 x86 的限制为 32 个字节。
猜你喜欢
  • 2019-04-08
  • 2014-04-02
  • 2011-05-08
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
  • 2015-09-29
  • 1970-01-01
  • 2021-08-27
相关资源
最近更新 更多