int main()
{
const int STRIDE=2,SIZE=8192;
int i=0;
double u[SIZE][STRIDE];
#pragma vector aligned
for(i=0;i<SIZE;i++)
{
u[i][STRIDE-1]= i;
}
printf("%lf\n",u[7][STRIDE-1]);
return 0;
}
コンパイラはここでxmmレジスタを使用します。ストライド2アクセスがあり、コンパイラにこれを無視させ、メモリの定期的なロードを実行してから、代替ビットをマスクして、SIMDレジスタの50%を使用するようにします。メモリに保存する前に、レジスタをビット単位でロードしてマスクするために使用できる組み込み関数が必要です。
PS:私はこれまでアセンブリコーディングを行ったことがありません