[閒聊] 用if else規避一些條件反而更慢?

作者: ericerix (Ponwar)   2020-12-06 11:14:05
選手1號:
https://pastebin.com/TL2Ys690
選手2號:
https://pastebin.com/B6i600fX
這是integer轉羅馬的題目,
令我比較意外的是,
選手1號有去判斷temp是否為0,是的話直接換下一個不囉唆
而選手2號沒有去判斷,而是即使是0也照著做,感覺會多運算一些,例如下面mod
而實測結果居然是選手2號比較快?
所以可以理解成,判斷是否為0比mod還要慢囉?
那這樣到底要什麼時候去下if else來使程式變快而不是變慢?
作者: LP9527 (ㄊㄇ抽菸都去)   2020-12-06 13:46:00
大部分計算比判斷快
作者: art1 (人,原來不是人)   2020-12-06 14:07:00
因為 CPU 的分支預測猜錯了就會慢很多,所以一些最佳化方法會用特殊技巧讓判斷變成計算
作者: shane87123 (陽光大肥宅)   2020-12-06 15:38:00
借串問 dict和array存取速度是否也有差別?
作者: pmove (金疾檸檬)   2020-12-06 17:45:00
dict 是hash 很快喔
作者: OrzOGC (洞八達人.拖哨天王)   2020-12-06 18:24:00
dict存取感覺都慢array很多
作者: pmove (金疾檸檬)   2020-12-06 19:57:00
Array在Python叫list, 跟dict比速度,詳細要看您怎麼用?如果您要存取的list元素要線性搜尋,這時改用dict 會快很多
作者: miwuz (ibike)   2020-12-06 20:40:00
推樓上~
作者: germun (ger)   2020-12-06 22:49:00
不保證誰快 不過有些方法的優勢要在資料量大才顯現的出來
作者: DLHZ ( )   2020-12-07 01:25:00
詳情請見算盤本 簡單來說因為處理器中pipeline設計的緣故會有些難以處理的情況 而if系列的指令就是其中一種(control hazard) 雖然有更進一步改進解決的方法 但一般來說能避免判斷式的寫法還是會比較快 有錯還請指正
作者: leolarrel (真.粽子無雙)   2020-12-08 16:48:00
可以google "CPU 管線 分支預測"

Links booklink

Contact Us: admin [ a t ] ucptt.com