Re: [問題] 常用指令的時脈開銷?
※ 引述《DrStein (啤酒肚)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: x86, arm, mips, powerPC....etc
: 問題(Question):
: 常用指令 大體上就是:
: 整數 的加法,乘法 ,除法
: 32位 加法,乘法
: 64位 加法,乘法
: 想知道這些指令分別消耗多少時鐘數。。。
: 小弟只知道 x86 :
: 整數 加法 -> 2時鐘
: 整數 乘/除 -> 三時鐘數 ( 看架構,沙橋就是兩個時鐘(?))
: 平移,指定該是都一個時鐘數。
: 有這些才好精確定論,程式是卡在記憶體交換上還是運算上
: 有神人可以幫補完這張表嗎 謝謝
去找 CPU 的 spec 就會有這張表
但即使你有這張表,也沒有太大的幫助就是了
因為:
1. pipelining
一道指令在 CPU 中至少會經過 fetch/decode/load/execute/store 等階段
而 x86 架構下由於指令複雜,一般都會把一道指令再拆成更小的μOp
同樣的指令在不同的情況下 (前後指令都會影響到 pipeline 的執行效率)
會消耗不同的 cpu cycle
2. super scalar
現代的 CPU 都有複數個運算單元,因此如果有兩道不相依的相同指令:
add eax, ebx
add ecx, edx
像上述的情況,因為 CPU 擁有兩個加法器,它可以同時執行這兩道指令。
3. out-of-order
前述的 super scalar 有其限制,也就是指令必需互不相依才能同時執行。
因此在不影響結果的前提下,
CPU 會試圖調整指令的順序,儘量讓互不相依的指令排在一起以利平行化。
因為這些複雜的因素,直接把所有指令耗用的 cpu cycle 加起來是非常不精確的。
所以就如板友說的,要了解自己程式的時間花在哪裡,用 profiler 比較好。
另一個方法是使用 simulator 之類的來模擬真正的 CPU
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.15.163
推
05/13 11:23, , 1F
05/13 11:23, 1F
→
05/13 11:26, , 2F
05/13 11:26, 2F
→
05/13 11:27, , 3F
05/13 11:27, 3F
→
05/13 12:04, , 4F
05/13 12:04, 4F
→
05/13 12:05, , 5F
05/13 12:05, 5F
→
05/13 12:05, , 6F
05/13 12:05, 6F
→
05/13 12:06, , 7F
05/13 12:06, 7F
→
05/13 12:06, , 8F
05/13 12:06, 8F
→
05/13 12:06, , 9F
05/13 12:06, 9F
推
05/13 12:46, , 10F
05/13 12:46, 10F
→
05/13 12:47, , 11F
05/13 12:47, 11F
→
05/13 13:01, , 12F
05/13 13:01, 12F
→
05/13 13:30, , 13F
05/13 13:30, 13F
→
05/13 13:31, , 14F
05/13 13:31, 14F
→
05/13 13:42, , 15F
05/13 13:42, 15F
→
05/13 13:45, , 16F
05/13 13:45, 16F
推
05/13 14:32, , 17F
05/13 14:32, 17F
推
05/13 18:22, , 18F
05/13 18:22, 18F
→
05/16 13:05, , 19F
05/16 13:05, 19F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 3 篇):
問題
5
16