如果您正在尋找VC對準指令++是__declspec(align(16))
。 (或任何你想要的比對來定)
而且使用例子是這樣的:
__declspec(align(16)) float x[] = {1.,2.,3.,4.};
http://msdn.microsoft.com/en-us/library/83ythb65.aspx
注意兩個attribute
(海合會)和__declspec
(在VC++)是編譯器特定的擴展。
編輯:
現在我走在代碼中的第二次看,它會採取更多的工作不僅僅是用VC++相當於讓它在VC++編譯更換__attribute__
線。如果這些宏/函數,您正在使用
VC++沒有任何:
__builtin_ia32_xorps
__builtin_ia32_mulps
__builtin_ia32_addps
__builtin_ia32_storeups
你最好用SSE intrinsics代替所有這些 - 這些都可以在GCC和VC++上運行。
這裏的轉化爲內部函數的代碼:
float *mv_mult(float mat[SIZE][SIZE], float vec[SIZE]) {
static float ret[SIZE];
float temp[4];
int i, j;
__m128 m, v, r;
for (i = 0; i < SIZE; i++) {
r = _mm_xor_ps(r, r);
for (j = 0; j < SIZE; j += 4) {
m = _mm_loadu_ps(&mat[i][j]);
v = _mm_loadu_ps(&vec[j]);
v = _mm_mul_ps(m, v);
r = _mm_add_ps(r, v);
}
_mm_storeu_ps(temp, r);
ret[i] = temp[0] + temp[1] + temp[2] + temp[3];
}
return ret;
}
嗨了! :)是的。我注意到了。我將不得不從v4sf轉換爲m128類型...讓我試試:)謝謝。上證所對我來說是新的。哈。 – CppLearner
實際上看起來並不難。我使用轉換後的代碼編輯了我的答案。但是,我想指出,未對齊的訪問可能會導致您的性能下降。所以您可能需要考慮修改算法以對齊數據。 – Mysticial
嗚。非常感謝你。我創建了一個聯合__m128來對齊數據。謝謝Mysticial的未對齊。 – CppLearner