1. 程式人生 > >如何編寫C++以減少CPU分支預測錯誤?

如何編寫C++以減少CPU分支預測錯誤?

利用Intel的vtune測試Hardware Issue選項可以看到分支預測的情況。

一般來講

95%的分支預測成功是正常的

90%表示還有提高的空間

75%表示非常糟糕

如何提高分支預測的效率, 下面列舉了一些特例表示可以考慮的優化方向

case 1

if(t1==0&&t2==0&&t3==0) {

// do something
}
====>
if(t1|t2|t3==0){ // 合併條件,提高分支預測成功率
// do something
}

case 2
if(int i=0; i<1000; ++i){  // for cpu 密集呼叫
	if(cond) // 分支預測
do();
	else 
		do2();
}
==============》
if(cond){  // 避免了CPU密集呼叫時進行分支預測
   if(int i=0; i<1000; ++i)   do();
}else{
   if(int i=0; i<1000; ++i)  do1();
}


case 3

for(int i=0; i<10000; ++i){  // 此時要進行多次分支預測
if(a<10){
 		fun1();
}else(a<25){
		fun2();
}else{a<50}{
		fun3();
}else{
		fun4();
}
}
==========》
typedef void(*Func)();
Func funarray[n];  // 利用函式指標陣列來避免多次執行時候的分支預測
Funarray[1] = &fun1;
…

for(int i=0; i<10000; ++i){
	funarray[a]();
}

case 4:
if(color<0)  color=0;

================⇒

color &=~(color>>31);  // 注: 右移 負數補1 正數補0