はprocess1()
とprocess2()
を実行するために時間の同じ長さを取ると仮定し、実行効率の点で次のコード、シングルの三次元配列のトラバースを考える:.NETコンパイラ - ネストされたループ最適化は組み込まれていますか?
float arr[mMax,nMax,oMax];
for (m = 0; m < mMax; m++)
for (n = 0; n < nMax; n++)
for (o = 0; o < oMax; o++)
{ process1(arr[m,n,o]); }
for (o = 0; o < oMax; o++)
for (n = 0; n < nMax; n++)
for (m = 0; m < mMax; m++)
{ process2(arr[m,n,o]); }
を今、それがことが知らのC#行の主要な構造として.NETフレームワークの配列を整理します。最適化がなければ、最初のループは2番目のループよりもはるかに高速に実行されると仮定します。
質問:CLRのJITまたはcs.exe/vb.exeコンパイラは、このようなループを検出して最適化しますか、おそらくネストの順序を変更しますか?私はループを並列化しようとするとどうなるでしょうか?
一般的には、コンパイラの最適化を望むべきではありません – oakio