我有以下for循環。當我打開類型數組時,代碼不會進行矢量化。當我將類型修復爲'1'時,gcc執行初始化矢量化矢量化。有沒有人有任何建議來觸發某種矢量化?內部if語句殺死向量化
#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
所有陣列的存儲作爲指針,與定義限制關鍵字作爲一些類的成員。
編輯2
是否有東西,如果 'type
' 小我能做什麼?
編輯3
小型裝置8
那麼,type()是什麼? – Mysticial
type是類中使用__restrict__關鍵字定義的整數數組(如同所有數組一樣) – Mikhail
您正在像函數一樣調用'type()'。你能展示那個函數的定義嗎? – Mysticial