台灣最大程式設計社群網站
線上人數
1192
 
會員總數:240686
討論主題:186544
歡迎您免費加入會員
討論區列表 >> C/C++ >> mul與shift的速度
[ 變換順序 ]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
mul與shift的速度
價值 : 100 QP  點閱數:108 回應數:2

樓主

歐迪崙
門外漢
0 1
18 1
發送站內信

在我的認知中,
shift的運算速度應該比mul快許多,

如:


可是實際測試
Visual Studio 2010 x64 Release


結果:
i * 997, time = 4524
i * 16, time = 4540
i << 4, time = 4508

結果似乎差不多,這究竟是什麼原因呢?

搜尋相關Tags的文章: [ mul ] , [ shift ] , [ 效能 ] ,
本篇文章發表於2017-09-05 17:18
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

IGBT
檢舉此回應
不管高階語言如何寫
必須以編譯器產生的組合語言為依據
可以嘗試改變最佳化的選項看看是否有差別
本篇文章回覆於2017-09-07 16:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

歐迪崙
檢舉此回應
修改最佳化shift還是沒比較快過

Visual Studio 2010 x64 Release

/Od
i * 997, time = 32854
i * 16, time = 32853
i << 4, time = 35911

/O1
i * 997, time = 6802 //???
i * 16, time = 8611
i << 4, time = 8580

/O2
i * 997, time = 4508
i * 16, time = 4509
i << 4, time = 4508

/Ox
i * 997, time = 4508
i * 16, time = 4509
i << 4, time = 4508

組合語言


Visual Studio 2010 x32
用組合語言不會另外優化
asm i * 16, time = 1123
asm i << 4, time = 858

程式接一起(uint64_t改uint32_t)
Visual Studio 2010 x32 Release /Ox

last = 0xffffffff;

i * 997, time = 1123
i * 16, time = 1123
i << 4, time = 1124
asm i * 16, time = 10186
asm i << 4, time = 6818


看得出來組合語言內shift是比mul快,
難道<<符會被compiler改為乘法?
還有,不知道怎麼搞得C++與asm混用asm效能會變很差。
本篇文章回覆於2017-09-08 14:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   
1

回覆
如要回應,請先登入.