Visual C++ >> GUI >> MFC

Unroll for、while


unroll關鍵字會把for、while指令展開,它的意思就是原本可能需要執行10次的迴圈,變成只執行5次,範例如下程式碼

原始程式

int test(unsigned int n)
{
  int bits = 0;

  while(n != 0){
    if(n & 1){
      bits++;
    }
    n>>= 1;
  }
  return bits;
}

unroll後的程式

int test_unroll(unsigned int n)
{
  int bits = 0;

  while(n != 0){
    if(n & 1){
      bits++;
    }
    if(n & 2){
      bits++;
    }
    if(n & 4){
      bits++;
    }
    if(n & 8){
      bits++;
    }
    n>>= 4;
  }
  return bits;
}

看完以上程式就可以知道展開的意思了,編譯器如果有支援unroll指令時,將會使用#pragma unroll(n)指令去定義unroll的深度,說到這個,司徒心有所感說一下話,當有人看到unroll的程式片段時,第一時間有人會說:你到底會不會寫程式呢?當然也可能有另一種人會說:做得好,你把效能加快了,這兩種人是完全不一樣的見解,一般第一種人就是沒寫過最佳化或者單晶片微處理機的人,而第二種人可能是寫過最佳化和單晶片微處理機的人,你要當哪一種人呢?還是建議各位,保有謙虛學習的心態,因為,天外有天,人外有人


返回上一頁