ポインタおよび間接アドレス指定を含むループの非ベクトル化

間接アドレス指定は、配列が値のベクタによってアクセスされる場合に発生します。配列がメモリからフェッチされている場合、その操作は収集と呼ばれます。配列がメモリに格納される場合は、その操作は分散と呼ばれます。Example 9 では、a は分散され、b は収集されています。

Example 9. ベクトル化不可能な間接アドレス指定

float a[99], b[99];
int ia[99], ib[99], i, n, j;
...
for (i = 0; i < n; i++) a[ia[i]] = b[j + ib[i]];

NEON ユニットで処理できるのはメモリ内に連続して格納されるベクタだけなので、間接アドレス指定はベクトル化できません。ループ内に間接アレス指定および重要な計算が存在する場合は、間接アドレス指定を別のベクタ以外のループに移動すると効率性が増します。これによって、計算を効率的にベクトル化できます。

Show/hide関連項目

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0472EJ
Non-ConfidentialID081711