第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么在 Go 中交換 []float64 的元素比在 Rust 中交換 Vec<f64>

為什么在 Go 中交換 []float64 的元素比在 Rust 中交換 Vec<f64>

Go
胡說叔叔 2023-04-24 16:52:41
我有兩個(等效的?)程序,一個在 Go 中,另一個在 Rust 中。平均執(zhí)行時間為:去~169ms休息~201ms去package mainimport (    "fmt"    "time")func main() {    work := []float64{0.00, 1.00}    start := time.Now()    for i := 0; i < 100000000; i++ {        work[0], work[1] = work[1], work[0]    }    elapsed := time.Since(start)    fmt.Println("Execution time: ", elapsed)}銹我編譯了--releaseuse std::time::Instant;fn main() {    let mut work: Vec<f64> = Vec::new();    work.push(0.00);    work.push(1.00);    let now = Instant::now();    for _x in 1..100000000 {        work.swap(0, 1);     }    let elapsed = now.elapsed();    println!("Execution time: {:?}", elapsed);}在這種情況下,Rust 的性能是否不如 Go?Rust 程序可以用慣用的方式編寫,以更快地執(zhí)行嗎?
查看完整描述

2 回答

?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

Rust 程序可以用慣用的方式編寫,以更快地執(zhí)行嗎?


是的。要創(chuàng)建包含幾個元素的向量,請使用vec![]宏:


let mut work: Vec<f64> = vec![0.0, 1.0];    


for _x in 1..100000000 {

    work.swap(0, 1); 

}

那么這段代碼更快嗎?是的。查看生成的程序集:


example::main:

  mov eax, 99999999

.LBB0_1:

  add eax, -11

  jne .LBB0_1

  ret

在我的 PC 上,它的運行速度比您的原始代碼快 30 倍。

為什么程序集仍然包含這個什么都不做的循環(huán)?為什么編譯器無法看到兩個pushes 與 相同vec![0.0, 1.0]?這兩個問題都很好,而且都可能指向 LLVM 或 Rust 編譯器中的缺陷。

然而,遺憾的是,從您的微基準測試中沒有太多有用的信息?;鶞蕼y試很難,真的很難。有太多的陷阱,連專業(yè)人士都會掉進去。就您而言,基準測試在幾個方面存在缺陷。首先,您以后永遠不會觀察向量的內容(它從未被使用過)。這就是為什么一個好的編譯器可以刪除所有甚至觸及向量的代碼(就像上面的 Rust 編譯器所做的那樣)。所以這不好。

除此之外,這與任何真正的性能關鍵代碼都不相似。即使稍后會觀察到向量,奇數次交換也等于單次交換。所以除非你想看看優(yōu)化器是否能理解這個交換規(guī)則,否則遺憾的是你的基準測試并不是很有用。


查看完整回答
反對 回復 2023-04-24
?
一只名叫tom的貓

TA貢獻1906條經驗 獲得超3個贊

(不是答案)但為了擴充 Lukas 所寫的內容,以下是 Go 1.11 為循環(huán)本身生成的內容:


    xorl    CX, CX

    movsd   8(AX), X0

    movsd   (AX), X1

    movsd   X0, (AX)

    movsd   X1, 8(AX)

    incq    CX

    cmpq    CX, $100000000

    jlt     68

(由https://godbolt.org提供)


在任何一種情況下,請注意,您測量的時間很可能主要由進程的啟動和初始化決定,因此您實際上并未測量循環(huán)執(zhí)行的速度。IOW 你的方法是不正確的。


查看完整回答
反對 回復 2023-04-24
  • 2 回答
  • 0 關注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號