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寄存器。有stride 2訪問,我想讓編譯器忽略這一點,然後定期加載內存,然後屏蔽交替位,這樣我就可以使用SIMD寄存器的50%。我需要它可以用來加載,然後內在存儲回內存組件固有的做掩碼加載
PS之前屏蔽寄存器按位:我從來沒有做過裝配編碼你不能做一個蒙面加載之前
請注意,您的代碼存在錯誤。您可以訪問'u [i] [STRIDE]',這與'u [i] [2]'相同。 '2'是錯誤的:你只能訪問'u [i] [0]'或'u [i] [1]'。對'u [i] [2]'的訪問可能會進入'u [i + 1] [0]',除非當'i == SIZE-1'時,它訪問數組的末尾。 –
感謝您指出。在fortran世界裏已經有相當長的一段時間了,所以當遇到stride 2訪問時,會被'C' – arunmoezhi