Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 如何获得我的CPU';s分支目标缓冲区(BTB)大小?_Performance_Hardware_Branch Prediction - Fatal编程技术网

Performance 如何获得我的CPU';s分支目标缓冲区(BTB)大小?

Performance 如何获得我的CPU';s分支目标缓冲区(BTB)大小?,performance,hardware,branch-prediction,Performance,Hardware,Branch Prediction,当循环>BTB_大小时执行此例程非常有用, 例如 从 int n=0; for(int i=0;i

当循环>BTB_大小时执行此例程非常有用, 例如

int n=0;
for(int i=0;i

int n=0;
int循环=循环/2;
对于(int i=0;i
可以减少分支未命中


BTB ref:但它并没有告诉我们如何获得BTB大小。

任何称职的现代编译器都应该将代码优化为
int n=LOOPS,但在更复杂的示例中,编译器将负责此类优化;例如,请参见,它处理多种循环展开。与其试图优化代码,不如找到合适的编译器标志,让编译器完成所有繁重的工作。

从BTB的角度来看,两个版本是相同的。在这两个版本中(如果未优化编译),只有一个条件跳转(每个跳转源自较新英特尔处理器上的
iCheck静态分支预测分支预测-第二部分及其后续出版物,位于同一标记();测试代码位于(tests/btb*py)和
int n = 0;
for (int i = 0; i < LOOPS; i++)
    n++;
int n = 0;
int loops = LOOPS / 2;
for(int i = 0; i < loops; i+=2)
    n += 2;
for(int i=0;i<n;i++){
    if(i%2==0)
        do_something();
}
for(int i=0;i<n;i++){
    if(i%2==0)
        do_something();
    if(i%3==0)
        do_something_different();
}