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