ステートメント
a[i] += a[j] * a[k];
数千回から数百万回実行される可能性のあるループで数千回実行されます。のエントリへのランダム アクセスを表すインデックスi、j、およびは、ステートメントで設定できます。ka
i = i_index[l];
j = j_index[l];
k = k_index[l];
wherelはforループのインデックスです。整数配列i_index、j_index、およびk_indexは、プログラムの最初に設定され、時々変更される場合があります。
メモリ ポインター配列は代替手段です。例えば
*ap1[l] += *ap2[l] * (*ap3[l]);
ここで、メモリ ポインタ配列ap1、ap2、およびは、 、、および配列ap3によって最初に識別された場所を指すように事前に設定されています。また、不定期に変更する場合があります。i_indexj_indexk_index
最初の方法は 2 番目の方法よりもきれいに見えますが、コンパイラに追加情報を提供する何らかの方法がない限り、遅くなるように見えます。XCode の GCC コンパイラーは、 、 、および 、 、および がほとんどの場合変更されないことを事前に発見するi_index方法j_indexがk_indexないap1ようap2ですap3。パフォーマンスを向上させるために gcc コンパイラに注意を向ける方法はありますか?