是否有可能提示特定的if语句分支最有可能在Delphi编译器中执行?

时间:2013-07-06 14:34:18

标签: delphi optimization micro-optimization

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

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

if UnlikelyCondition then
  HandleUnlikelyCondition
else
  HandleLikelyCondition
end;

通常不需要为可能的情况做任何事情:

if UnlikelyCondition then
  HandleUnlikelyCondition
else
  Exit
end;

我想向编译器暗示if语句的第二个分支是要优化的那个。我怎么能在Delphi中做到这一点?

当前代码

目前,我编写了我的代码,假设if statement's condition equalling true是优化的最佳选择:

if LikelyCondition then
  HandleLikelyCondition
else
  HandleUnlikelyCondition
end;

if LikelyCondition then Exit;
HandleUnlikelyCondition;

在刚刚使用这两个示例中的第一个的测试中,我得到了50%的额外性能提升,重构我的if这样的语句,即假设if语句的条件为{{1} }。也许另一种表达问题的方法是,这是我能做的最好的吗?

如果您之前没有遇到过分支误预测,this epic answer is an illuminating read.

1 个答案:

答案 0 :(得分:1)

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