有很多情況可以將整數與有序比較或相等比較進行比較;如果你知道 i 永遠不會大于 j,那么 i < j 和 i != j 是等價的。并且通常以相同的速度運行。
對于必須在所有 64 位上傳播進位標志的有序比較,理論上有可能比等式比較慢一個周期,但據我所知,通常情況并非如此。
是否存在任何現有或正在開發的 CPU,其中兩個比較運算子(機器字數,而不是 bignums)之間的速度甚至存在單個周期差異?
uj5u.com熱心網友回復:
是的。然而,這很復雜并且非常依賴于(可能有一些棘手的行為)特定的目標處理器。
在所有現代臺式機/服務器 x86-64 處理器(例如 Intel 和 AMD 處理器)上,由>
, <
, '==' 和!=
運算子產生的標量匯編指令的成本是相同的。在cmp
和test
指令用于這(和同樣快速)。在過去,test
指令更快一點,==
and!=
運算子也是如此。但是,這不適用于 SSE/AVX SIMD 指令在 Intel 處理器上的 64 位暫存器上:相等運算子比有序比較運算子更快(更高的互易吞吐量和更低的延遲)。對于 AMD 處理器上 64 位暫存器上的 SSE/AVX SIMD 指令,這有點復雜:Zen/Zen2 的行為方式與 Intel 處理器相同,但兩種操作的延遲相同,而在 Zen3 上使用有序比較運算子實際上是至少與相等運算子一樣快(實驗表明,由于更高的專用埠,它甚至更快)。對于 32 位暫存器上的 SSE/AVX 或 AVX-512(兩個比較運算子的行為相同),情況有所不同。
據我所知,在大多數 ARM 處理器上,TST
指令是一樣快的CMP
,而在 POWER 處理器上,只有一條指令用于兩種運算子,所以運算子應該是一樣快的。我希望相等運算子通常與有序比較運算子一樣快,并且在某些情況下更快。但是,我很確定,有一些奇怪的處理器(可能是非標準的 ARM 處理器),但事實并非如此。盡管如此,這在主流處理器上還是非常罕見的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/323500.html
下一篇:古斯塔夫森定律想論證什么?