ステートメント
a[i] += a[j] * a[k];
数千回から数百万回実行される可能性のあるループで数千回実行されます。のエントリへのランダム アクセスを表すインデックスi
、j
、およびは、ステートメントで設定できます。k
a
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_index
j_index
k_index
最初の方法は 2 番目の方法よりもきれいに見えますが、コンパイラに追加情報を提供する何らかの方法がない限り、遅くなるように見えます。XCode の GCC コンパイラーは、 、 、および 、 、および がほとんどの場合変更されないことを事前に発見するi_index
方法j_index
がk_index
ないap1
ようap2
ですap3
。パフォーマンスを向上させるために gcc コンパイラに注意を向ける方法はありますか?