プリフェッチを使用してコードを最適化し、関数呼び出しの前にプリフェッチを配置するために、高度な最適化を有効にした優れた C コンパイラは可能ですか?
struct *abc;
//...
function_first(&(abc->field1));
abc->field2= abc->field3+ abc->field4 + abc->field5 + ...;
// a lot work on struct fields
function_second(&(abc->field1))
そのため、次のように、コンパイラの最適化後にコードを記述して、フィールドのプリフェッチを行い、呼び出しabc
よりも上に移動できます。function_first()
struct *abc;
//...
__prefetch(abc->field2);__prefetch(abc->field5);
function_first(&(abc->field1));
abc->field2= abc->field3+ abc->field4 + abc->field5 + ...;
// a lot work on struct fields
function_second(&(abc->field1))
関数function_first()
には注釈を付けることができますclean
(field1 以外の abc フィールドに副作用はありません)。または、プログラムをプログラム全体の最適化 (インテルの場合は -ipo /Qipo) でコンパイルすることができfunction_first
ます。
更新:呼び出しなしでプリフェッチは可能ですが、この質問は呼び出しとプリフェッチの混合に関するものです
ありがとう。