3

这是其他编译器(C#VC++GCC)的常见问题。我想知道 Delphi 编译器的相同问题(任何版本;我目前使用的是 2010 和 XE2,很快就会使用 XE4。)

我在编写高性能代码时遇到了一种情况,必须检查条件,但在大多数情况下不需要采取任何措施:

if UnlikelyCondition then
  HandleUnlikelyCondition
else
  HandleLikelyCondition
end;

对于可能的情况,通常不需要做任何事情:

if UnlikelyCondition then
  HandleUnlikelyCondition
else
  Exit
end;

我想向编译器提示该if语句的第二个分支是要优化的分支。我怎么能在德尔福做到这一点?

当前代码

目前,我已经编写了我的代码,假设if语句的条件等于 true是优化的最佳对象:

if LikelyCondition then
  HandleLikelyCondition
else
  HandleUnlikelyCondition
end;

或者

if LikelyCondition then Exit;
HandleUnlikelyCondition;

在刚才使用这两个示例中的第一个的测试中,我得到了 50% 的额外性能提升if,像这样重组我的语句,即假设if语句的条件是true. 也许用另一种方式来表达这个问题是,这是我能做的最好的吗?

如果您以前没有遇到过分支错误预测,那么这个史诗般的答案将是一个很有启发性的读物。

4

1 回答 1

1

语言或编译器中没有任何内容允许您为分支预测提供提示。在任何情况下,即使编译器发出包含提示的目标代码,现代架构也会忽略这些提示。

于 2013-07-06T17:19:22.133 回答