[英]SSE: convert __m128 to float
我有以下C代碼:
__m128 pSrc1 = _mm_set1_ps(4.0f);
__m128 pDest;
int i;
for (i=0;i<100;i++) {
m1 = _mm_mul_ps(pSrc1, pSrc1);
m2 = _mm_mul_ps(pSrc1, pSrc1);
m3 = _mm_add_ps(m1, m2);
pDest = _mm_add_ps(m3, m3);
}
float *arrq = (float*) pDest;
直到for循環結束的所有內容都有效。 我現在要做的是將__m128類型轉換回float。 因為它存儲了4個浮點數,我認為我很容易將其轉換為浮動*。 我究竟做錯了什么? (這是一個測試代碼,所以不要懷疑)。 我基本上嘗試了所有可能的轉換。 謝謝你的幫助。
您需要使用_mm_store_ps
將其恢復為浮動狀態。 碼:
// result must be 16-byte aligned
float result [4];
_mm_store_ps (result, pDest);
// If result is not 16-byte aligned, use _mm_storeu_ps
// On modern CPUs this is just as fast as _mm_store_ps if
// result is 16-byte aligned, but works in all other cases as well
_mm_storeu_ps (result, pDest);
如果你投射得當,我相信投射是有效的。 我沒有在我面前的代碼,但我很確定這對我有用:
float *arrq = reinterpret_cast<float*>(&pDest);
請注意,它使用C ++強制轉換來描述您正在執行的操作,並將其地址轉換為指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.