1

プリフェッチを使用してコードを最適化し、関数呼び出しの前にプリフェッチを配置するために、高度な最適化を有効にした優れた 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ます。

更新:呼び出しなしでプリフェッチは可能ですが、この質問は呼び出しとプリフェッチの混合に関するものです

ありがとう。

4

1 に答える 1

1

はい、インテルの ICC コンパイラーはこれを行うことができます (*)。ただし、実際にパフォーマンスに違いがあるかどうかは議論の余地があります。

(*) -opt-prefetch=nスイッチを参照してください。

于 2010-11-25T17:27:53.263 に答える