環(英特爾參考文獻人工輸入)ECX/RCX遞減,如果非零。雖然速度很慢,但英特爾不能便宜地讓它跑得更快嗎?dec/jnz已經宏熔斷為單個uop。在沙橋家族;唯一的區別是設置旗子。loop在不同的微體系結構上阿格納·福格(氏)指令表:K8/K10:7m-OPS推土機-家庭/Ryzen:1mop(與宏融合測試和分支相同的成本,或jecxz)P4:4 OOPS(同jecxz)P6(PII/PIII):8 OOPS奔騰M,核心2:11 uopsNehalem:6 uops。(11)loope / loopne)。吞吐量=4c(loop)或7c(loope/ne).SNB-家庭*7英尺。(11)loope / loopne). 吞吐量=每5個周期一個,就像將循環計數器保存在內存中一樣是一個瓶頸!jecxz只有兩個uop具有與常規的相同的吞吐量。jcc西爾佛蒙特:7烏普AMD捷豹(低功耗):8 uops,5c吞吐量通過Nano 3000:2 uops難道解碼器不能像lea rcx, [rcx-1] / jrcxz?那將是3次。至少在沒有地址大小前綴的情況下,它必須使用ecx截斷RIP到EIP如果跳下去了;也許控制減幅的地址大小的奇怪選擇解釋了為什么會有這么多uop?或者更好的是,把它解碼成一個不設置標志的融合的分叉?dec ecx / jnz在SNB上,解碼為單個uop(它確實設置了標志)。我知道真正的代碼不使用它(因為它一直緩慢從至少P5或什么),但AMD認為這是值得的,使它快速推土機??赡苁且驗檫@很容易。對于SNB家族的人來說,擁有快速的生活是件容易的事嗎?loop?如果是的話,他們為什么不呢?如果不是,為什么會很難呢?很多解碼器晶體管?或者在一個融合的Dec&分支uop中額外的位來記錄它沒有設置標志?那七個人能做什么?這是一個非常簡單的指示。開快車的推土機有什么特別之處?loop容易/值得嗎?或者AMD在制造過程中浪費了一堆晶體管loop快地?如果是這樣的話,大概有人認為這是個好主意。如果loop太快了,這將是完美的BigInteger任意精度adc循環,以避免部分旗檔/減速。(請參閱我對我的答案的評論),或任何其他情況下,您想要在不接觸標志的情況下循環。與代碼大小相比,它還具有較小的代碼大小優勢。dec/jnz。(和dec/jnz只有宏觀保險絲對SNB-家庭)。關于現代CPUdec/jnz在ADC循環中沒問題,loop對于ADCX/ADOX循環(保留)來說還是不錯的。如果loop如果是快速的,編譯器將已經使用它作為一個窺視孔優化的代碼大小+速度上的CPU,沒有宏融合。它也無法阻止我對所有使用錯誤16位代碼的問題感到惱火loop對于每個循環,即使當它們還需要在循環中另一個計數器時。但至少不會如壞的。
添加回答
舉報
0/150
提交
取消