使用SSE/AVX 進行雙精確度/int64 轉換
SSE2 指令集提供了用於在單精確度浮點數和32 位元之間轉換向量的內在函數整數,但雙精確度和64 位元整數不存在等效項。 AVX 也缺少這些轉換。
有限的 AVX512 支援
AVX512 引入了用於與 64 位元整數(有符號和無符號)相互轉換的內在函數。但是,AVX2 及更早的配置缺乏此類功能。
近似Int64 轉換
對於AVX2 及以下版本,有一些方法可以模擬雙精度與uint64 和int64 之間的轉換具有特定值範圍限制和捨入行為。
快速雙倍 uint64_t 轉換:
此方法適用於 [0, 2^52) 範圍內的值。透過添加一個幻數並屏蔽高位,您可以獲得雙精度數的 uint64_t 表示的近似值。
Fast Double int64_t 轉換:
與 uint64_t 版本類似,此近似適用於 [-2^51, 2^51] 範圍內的值。
全範圍Int64 雙重轉換:
uint64_t -> double:
此方法使用5 條指令將完整的int64 範圍表示為double。
int64_t -> double:
此轉換需要 6 條指令,並正確捨入到最接近的可表示的 double。
結論
AVX512 提供對double 的直接支援/int64 轉換,但對於早期配置,提供的近似值提供了具有特定值範圍和舍入行為的高效解決方案限制。
以上是如何使用 SSE、AVX 和 AVX-512 在雙精度浮點數和 64 位元整數之間高效轉換?的詳細內容。更多資訊請關注PHP中文網其他相關文章!