C_and_CPP 板


LINE

最近在練習 Rust,聽說執行速度可以跟 C 相當 但看了下面網頁的執行速度比較,似乎 Rust 還是略輸一截 https://benchmarksgame.alioth.debian.org/u64q/rust.html 請問這是為什麼? 在我的粗略理解上,Rust 的很多東西都是在編譯期就處理掉了 而且因為變數的定義較為嚴格,還有可能編出較短的機械碼 那理論上應該會比 C 快才對呀? --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.41.63.59
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1502545749.A.9F5.html
1F:→ loveflames: 你的理論依據沒有一個可以當成比C快的理由 08/12 22:08
2F:→ loveflames: 應該反過來問,為何你會覺得這些會是速度比較快的原因 08/12 22:09
3F:推 CoNsTaR: 雖然 rust 可以利用規則來簡化複雜的東西 08/13 06:11
4F:→ CoNsTaR: 但是相反的,因為 rust 只能照規則走 08/13 06:11
5F:→ CoNsTaR: 所以不在規則內的 hack 就沒辦法過 type check 08/13 06:11
6F:→ os653: 版上的教學網頁有提到 08/13 09:49
7F:→ os653: void foo(int* x, int* y, const int* z) 08/13 09:50
8F:→ os653: { 08/13 09:50
9F:→ os653: *x += *z; 08/13 09:50
10F:→ os653: *y += *z; 08/13 09:50
11F:→ os653: } 08/13 09:50
12F:→ os653: 這樣一個函數,因為C的編譯器無法確定x、y、z是否是同一塊 08/13 09:51
13F:→ os653: 記憶體位址,而Rust的編譯器可以確定,故C編出來的機械碼會 08/13 09:53
14F:→ os653: 比Rust多一次讀取的動作,就會比較慢一點 08/13 09:54
15F:推 CoNsTaR: 就說 rust 會在他知道的範圍內把東西做到最簡 08/13 11:10
16F:→ CoNsTaR: 所以如果 rust 知道所有最快的 hack 08/13 11:10
17F:→ CoNsTaR: 而且能夠知道同一個語意的所有不同寫法 08/13 11:10
18F:→ CoNsTaR: 那理論上它會是最快的,但事實是不可能,只能盡力 08/13 11:10
19F:推 CoNsTaR: 例如說,如果有一種機器,它有一個指令能夠在一個指令周 08/13 11:15
20F:→ CoNsTaR: 期內做完 foo 做的事,但是 rust 不知道這個指令,或者是 08/13 11:15
21F:→ CoNsTaR: rust 不知道直接呼叫那個指令和執行這一串程式碼是相等 08/13 11:15
22F:→ CoNsTaR: 的(操作語意上),那這兩個情況下 C 內嵌組語都會比 rust 08/13 11:15
23F:→ CoNsTaR: 快 08/13 11:15
24F:推 CoNsTaR: 而各個 libc 的實作都用了一大堆這種機器相關的 hack, 08/13 11:17
25F:→ CoNsTaR: 所以 rust 才會這麼難超過 C 08/13 11:17
26F:推 CoNsTaR: 至於為什麼我前面說不可能,第一因為這種 hack 可以有無 08/13 11:21
27F:→ CoNsTaR: 限種,你隨時爽往你的機器上加什麼特性都可以 08/13 11:21
28F:→ CoNsTaR: 第二因為對於所有正確的敘述,要判斷它們的語意是否相等 08/13 11:21
29F:→ CoNsTaR: ,常常是 undecidable 的 (有興趣可以參考 logical seman 08/13 11:21
30F:→ CoNsTaR: tics) 08/13 11:21
31F:推 CoNsTaR: 所以如果你不知道兩者語意相等,那你就沒辦法用快的取代 08/13 11:29
32F:→ CoNsTaR: 慢的 08/13 11:29
33F:→ CoNsTaR: 例如你上面的例子,如果 rust 不能判定少讀一次記憶體位 08/13 11:29
34F:→ CoNsTaR: 址的語意是否還和原本一樣,那它就沒辦法用少讀一次的版 08/13 11:29
35F:→ CoNsTaR: 本替換比較慢的版本(雖然這個 case 是可判定的) 08/13 11:29
36F:推 CoNsTaR: 不知道這樣講有沒有比較清楚… 08/13 11:33
37F:→ grayStone: 我對樓上的解讀是,沒錯Rust比較快 08/13 12:48
38F:→ PkmX: compiler和library實做完全不一樣啊... 08/13 15:24
39F:→ os653: 我想C大的例子就類似用DMA跟以byte為單位讀取資料的差別吧 08/13 18:37
40F:→ os653: 一個用一行指令就完事,一個要用for迴圈跑幾千次這樣 08/13 18:38
41F:→ os653: Rust平常小勝,遇到可以取巧的指令大輸,結果就變成小輸 08/13 18:42
42F:推 james732: Rust在實作上沒有取巧的空間嗎? 08/13 18:49
43F:推 Hazukashiine: @os653 可以用 restrict 提示 C Compiler 那兩個 08/13 20:42
44F:→ Hazukashiine: pointer 不會 alias 因此沒有你說的那個問題不存在 08/13 20:43
45F:推 Hazukashiine: -s 刪--xx-- 08/13 20:45
46F:推 LPH66: 不過 restrict 只有 C99 有, C++ 因為多型的關係狀況複雜 08/14 01:48
47F:→ LPH66: restrict 的語意碰上多型會有麻煩所以目前一直都沒有規定 08/14 01:48
48F:→ LPH66: (連 restrict 在 C++ 都不是關鍵字) 08/14 01:49
49F:→ LPH66: 雖然 g++ 有提供 __restrict 給 C++ 用但我不太清楚語意 08/14 01:50
50F:→ LPH66: 修正一下, 是 C99 以後的 C 才有 08/14 01:52
51F:推 ronin728: 那個網站寫測試程式的人都盡量壓榨效能,你可以點code 09/18 08:09
52F:→ ronin728: 來看看,C語言的code有強大的GMP護駕 XDD 09/18 08:09
53F:→ ronin728: GMP 好歹也是社區經營多年,測試結果數一數二的數學庫 09/18 08:10
54F:→ ronin728: 不過有好幾個測資確實無關lib,是rust比較慢 09/18 08:12







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BabyMother站內搜尋

TOP