我正在學習HLA Assembly的過程,Art of Assembly Language,2nd Edition。我剛開始學習有關shr和shl的說明,我想知道如果換一個更大的數量,比換一個更小的數量要花費更多的時間。 shr(1,dest)vs shr(7,dest)。shr(7,dest)比shr(1,dest)需要更多時間嗎?
如果指令的語法錯誤,我很抱歉。
我正在學習HLA Assembly的過程,Art of Assembly Language,2nd Edition。我剛開始學習有關shr和shl的說明,我想知道如果換一個更大的數量,比換一個更小的數量要花費更多的時間。 shr(1,dest)vs shr(7,dest)。shr(7,dest)比shr(1,dest)需要更多時間嗎?
如果指令的語法錯誤,我很抱歉。
http://agner.org/optimize/具有x86 CPU和microarch指南的指令時序。
移位和旋轉立即(編譯時間常數)計數是最近AMD和英特爾的單週期延遲。
除了1以外的任何計數的旋轉進位都很慢,但可能是恆定時間。 (依賴於數據的時序會使無序的執行依賴關係跟蹤更加棘手,所以我認爲他們只是最大限度的
另一個奇怪的事情:顯然IvyBridge/Haswell採用額外的縮寫ROL/ROR
rotate-因此吞吐量是一般操作碼的一半,其中imm8
的計數爲1.
回覆:HLA:C和C++編譯器現在對內在函數有很好的支持(函數可以轉換成內聯指令)。我認爲我記得閱讀,根據某些我不記得的東西(抱歉> <),現在你可能只是學習正常的asm,很多時候,你可以從使用向量instr中獲得加速通過C/C++中的內在函數(或者位操作,如popcount)。
如果你對學習HLA很有興趣,並認爲它很有用,那麼祝你好運。
它取決於處理器。您需要閱讀數據表以瞭解您所針對的處理器的性能特徵。現代實現使用桶式移位器,它不關心你正在移動多少。 –