簡體   English   中英

SSE:將__m128轉換為float

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM