簡體   English   中英

SSE:將__m128和__m128i轉換為兩個__m128d

[英]SSE: convert __m128 and __m128i into two __m128d

兩個相關的問題。

這就是我的代碼需要處理相當大量的數據。 它在內部循環中完成,性能很重要。

  1. 將__int32的轉換和數組轉換為雙精度數(或將__m128i轉換為兩個__m128d)。
  2. 將浮點數和數組轉換為雙精度數(或將__m128轉換為兩個__m128d)。

基本上,我需要具有以下簽名的功能:

void convert_int_to_double(__int32 const * input, double * output);
void convert_float_to_double(float const * input, double * output);

輸入和輸出指針是對齊的,元素的數量是4的倍數。主要問題是如何快速將__m128解壓縮為兩個__m128d。

內在函數_mm_cvtepi32_pd_mm_cvtps_pd將值轉換為double。

這應該是循環:

__m128i* base_addr = ...;
for( int i = 0; i < cnt; ++i )
{
    __m128i epi32 = _mm_load_si128( base_addr + i );
    __m128d v0 = _mm_cvtepi32_pd( epi32 );
    epi32 = _mm_srli_si128( epi32, 8 );
    __m128d v1 = _mm_cvtepi32_pd( epi32 );
    ....
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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