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

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

使用 goroutine 進行矩陣乘法會降低性能

使用 goroutine 進行矩陣乘法會降低性能

Go
素胚勾勒不出你 2023-04-04 17:16:08
我正在通過 Go 中的 goroutines 優(yōu)化矩陣乘法。我的基準測試顯示,每行或每元素引入并發(fā)會大大降低性能:goos: darwin goarch: amd64 BenchmarkMatrixDotNaive/A.MultNaive-8                            2000000               869 ns/op               0 B/op          0 allocs/op BenchmarkMatrixDotNaive/A.ParalMultNaivePerRow-8                  100000             14467 ns/op              80 B/op          9 allocs/op BenchmarkMatrixDotNaive/A.ParalMultNaivePerElem-8                  20000             77299 ns/op             528 B/op         65 allocs/op我知道緩存局部性的一些基本先驗知識,每個元素并發(fā)性降低性能是有道理的。但是,為什么即使在原始版本中每行仍然會降低性能?事實上,我還寫了一個 block/tiling optimization,它的 vanilla 版本(沒有 goroutine 并發(fā))甚至比 naive 版本更差(這里不存在,讓我們先關(guān)注 naive)。我在這里做錯了什么?為什么?這里怎么優(yōu)化?
查看完整描述

1 回答

?
慕桂英546537

TA貢獻1848條經(jīng)驗 獲得超10個贊

執(zhí)行 8x8 矩陣乘法是相對較小的工作。

Goroutines(雖然可能是輕量級的)確實有開銷。如果他們所做的工作是“小”的,那么啟動、同步和丟棄它們的開銷可能會超過利用多核/線程的性能增益,并且總體而言,您可能無法通過并發(fā)執(zhí)行此類小任務(wù)來獲得性能(見鬼,您可能甚至比不使用 goroutines 更糟糕)。措施。

如果我們將矩陣大小增加到 80x80,運行基準測試,我們已經(jīng)看到在以下情況下有一些性能提升ParalMultNaivePerRow

BenchmarkMatrixDotNaive/A.MultNaive-4???????????????2000?????1054775?ns/op
BenchmarkMatrixDotNaive/A.ParalMultNaivePerRow-4????2000??????709367?ns/op
BenchmarkMatrixDotNaive/A.ParalMultNaivePerElem-4????100????10224927?ns/op

(正如您在結(jié)果中看到的,我有 4 個 CPU 內(nèi)核,在您的 8 核機器上運行它可能會顯示出更多的性能提升。)

當行很小時,您正在使用 goroutines 來完成最少的工作,您可以通過在 goroutines 完成“微小”工作后不“丟棄”它們來提高性能,但您可以“重用”它們。


查看完整回答
反對 回復(fù) 2023-04-04
  • 1 回答
  • 0 關(guān)注
  • 121 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號