常量条件的分支预测

时间:2017-10-30 22:40:11

标签: c++ optimization g++

我有一个我在编译时不知道的情况但是一旦初始化在程序期间没有改变。我的程序看起来像这样

void cond_func(const int cond){
    switch(cond){...}
}

void loop_func(const Some_class& param){
    for(...) cond_func(param.cond);
}

分支预测是否能够告诉cond 始终评估为相同的值?或者最好在循环之前编写switch然后调用适当的函数(这会导致代码重复性较差的可读代码)。或者我可以做一些事情来给编译器提示这个条件将保持不变,比如在循环之前提取值const int cond = param.cond)?如果我在循环期间将const Some_class& param传递给其他函数,那么会发生一些变化,因此理论上会通过一些奇怪的指针和/或cond来改变const_cast的值(虽然我不是) ?

我的循环通常是数百万甚至更长,所以我在前几次预测分支的调用中并不感兴趣,但是在每个循环计数的某些条件评估中花费的每个ms都计算....

1 个答案:

答案 0 :(得分:0)

我认为检查条件一次并循环数百万次,每次循环数百万次并检查,即使是分支预测。

也许你的设计不是最好的。 例如,根据交换机切换,循环并调用具有不同参数的函数。我不能说,我不知道你在那里做什么。