メモリー割り当てとファーストタッチ

同カテゴリーの次の記事

インテル® C++ コンパイラーのオフロード機能を効率良く使用するには

この記事は、インテル® デベロッパー・ゾーンに掲載されている「Memory Allocation and First-Touch」の日本語参考訳です。


コプロセッサーにおけるメモリー割り当てはインテル® Xeon® プロセッサーよりもコストがかかるため、可能な場合はすでに割り当てられているメモリーを再利用するほうが効率的です。例えば、関数が (ループ内で) 繰り返し呼び出され、この関数が一時ストレージの配列を使う場合、(必要な最大サイズの) 配列を最初に割り当てて、後の呼び出しの配列に再利用します。

static real *temp_array=0;
 
void foo(..) {
         ...
                if (temp_array == 0) {
                temp_array = my_malloc(MAX_SIZE);
                }
         ... // temp_array の使用
}

また、Linux* での物理メモリー割り当てはファーストタッチ (malloc 時ではなく最初にメモリーにアクセスした) の時点で行われることも考慮する必要があります。このため、malloc されまだアクセスされていない配列を走査するループがある場合、最初の反復は残りの反復よりも時間がかかります。

コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

関連記事