函式呼叫太快了

2021-04-29 06:32:27 字數 832 閱讀 8119

在至強伺服器上,使用 febird/vcproj/test_trb 測試 trb。結果發現使用compare函式指標的find僅比直接比較快17%!我原本以為至少要快一倍,因為在windows(pentiumm dual core)上,直接比較的版本要快80%左右。

經過測試,發現:現代cpu的流水線真強!

執行時間顯示(單位是納秒):

伺服器(至強四核 2.29g): [doit=4971:  3.952, null=1648:  1.310, pse=4327:  3.440]

台式電腦(奔騰雙核 2.49g): [doit=6585:  5.301, null=1679:  1.352, pse=2246:  1.808]

doit表示pf_compare的那個迴圈

null表示那個啥也沒乾(volatile 用來禁止編譯器優化)

pse表示那個累加迴圈

雖然主頻低,但是伺服器明顯要快得多(不然至強怎麼比奔騰貴那麼多?)。

我看過pc下vc 2008 生成的**,累加的那個迴圈,其中迴圈體26條指令(包含跳轉指令)。平均每次迴圈僅消耗約4.5個時鐘週期!流水線、分支**這麼強,在包含跳轉的情況下,每個時鐘週期還能執行3~4條指令!

更可怕的,在伺服器上,乙個包含函式呼叫的迴圈,僅需要9個時鐘週期(2.29*3.95=9.05)!這完全顛覆了我對現代cpu的世界觀。

這個簡單的測試也說明,為什麼find函式的compare_fun_ptr版本這麼快(比較兩個整數的函式是非常trivial的)。

完整的測試**在:http://code.google.com/p/febird

在其中:$febird_home/vcproj/test_trb

太快了!安卓10還沒開始用 安卓11已經來了

在每一年的谷歌開發者大會上都會帶來全新版本的android系統,今年也不例外,而從這兩年的更新變化來看,其加入的內容和改善也變得更為重要,據悉,android10會在省電 手勢操作 通知管理進行更多改變。每一年谷歌開發者大會上都會帶來android新版本的訊息,與往年不同的是,今年新版本的發布會更晚...

系統呼叫 函式呼叫

linux下對檔案操作有兩種方式 提供了庫函式,如open close read write ioctl 等,需包含標頭檔案unistd.h。以write 函式為例 其函式原型為size t write int fd,const void buf,size t nbytes 其操作物件為檔案控制代碼...

python3呼叫函式函式 呼叫函式

python內建了很多有用的函式,我們可以直接呼叫。也可以在互動式命令列通過help abs 檢視abs函式的幫助資訊。呼叫abs函式 abs 100 abs 20 abs 12.34 12.34 呼叫函式的時候,如果傳入的引數數量不對,會報typeerror的錯誤,並且python會明確地告訴你 ...