次の for ループがあります。型配列をオンにすると、コードはベクトル化されません。タイプを '1' に固定すると、gcc はプリミタイズ ベクトル化を実行します。ある種のベクトル化をトリガーするための推奨事項はありますか?
#define type(M,N) type[(M)*sizeX + (N)]
for (int i = 0; i < sizeY - 1; i++)
{
for (int j = 0; j < sizeX - 1; j++)
{
const int id = type(i, j);
//const int id = 1; //vectorizes
const float A = this->A[id];
const float B = this->B[id];
a(i, j) = A * a(i, j) + B * (b(i, j) - b(i + 1, j))*(p[i]);
}
}
gcc 4.7.1 からのおおよその誤差
45: not vectorized: not suitable for gather A_26 = *D.14145_25;
編集 1
すべての配列はポインターとして格納され、restrictキーワードを使用して何らかのクラスのメンバーとして定義されます。
編集 2
type
「 」が小さい場合、何かできることはありますか?
編集 3
小さいとは 8 を意味します。