【发布时间】:2011-11-26 02:18:06
【问题描述】:
我的问题是:如何在不检查用户设置的真/假以导航分支的情况下向我的处理循环添加功能?循环上的所有迭代的设置都是相同的。具有分支预测功能的现代处理器是否不需要这样做?
我的程序遵循这种模式:
- 用户调整设置、复选框、滑块、数字条目。
- 触发更新时处理数据
- 将设置应用于局部变量
- 在大型数据集上运行循环
- 添加 if 语句以绕过用户设置中未使用的代码。
- 从循环返回
- 返回转换后的数据
如何提前对所有排列进行模板化或内联?
示例:
bool setting1 = true;
bool setting2 = false;
vector<float> data;
for(int i=0;i<100000;i++)
data.push_back(i);
for(int i=0;i<100000;i++) {
if (setting1)
{
doStuff(data[i]);
....
}
if (setting2)
{
doMoreStuff(data[i]);
.....
}
.... //etc
}
我知道这是一个愚蠢的例子。但我想知道当有很多分支时,模式会扩展什么。
【问题讨论】:
-
你为什么要问?您的循环是否存在性能问题?你量过吗? (如果没有,编写最容易维护的代码,并在分析显示您需要时对其进行优化,使用分析作为最佳优化指南。)
-
也许你应该首先选择清洁而不是性能。除了设置,您还可以使用
vector和std::functionS,这需要根据设置在迭代中执行。在其他语言中称为hooks。它非常易于维护且易于阅读。 -
我对反馈感到满意。
-
如果有人可以“模板化”分支调度功能,则可以获得奖励积分。例如。 if (setting1) 循环();否则循环();
标签: c++ performance theory