SIMDロード命令を使用してメモリから要素をロードしています。たとえば、Altivecを使用して、アドレスが整列していると仮定しています。
float X[SIZE];
vector float V0;
unsigned FLOAT_VEC_SIZE = sizeof(vector float);
for (int load_index =0; load_index < SIZE; load_index+=FLOAT_VEC_SIZE)
{
V0 = vec_ld(load_index, X);
/* some computation involving V0*/
}
ここで、SIZEがFLOAT_VEC_SIZEの倍数でない場合、最後のループ反復でV0に無効なメモリ要素が含まれている可能性があります。これを回避する1つの方法は、ループを1回繰り返すことです。別の方法は、潜在的な無効な要素をマスクすることです。他に役立つトリックはありますか?上記を考慮すると、ネストされたループのセットの中で最も内側にあります。したがって、SIMD以外の追加の命令には、パフォーマンスの低下が伴います。