單核CPU,編譯n個原始檔,1 每次編譯乙個檔案,2 並行編譯,哪種方案比較快?

時間 2021-05-31 21:27:35

1樓:

手機上簡單回答一下,這明顯是作業題嘛,作業題極大地簡化了問題。

既然這道題是考試或者作業題,答案當然是多執行緒會快,而且最佳答案應該是5執行緒。

當然實際情況不一樣。經驗來說我用Mac Pro的Xeon 6核編譯,大工程-j12速度最快。當然不能一概而論。

2樓:Chen

如果原始檔之間沒有dependency

乙個乙個compile更快,時間是(100+compile_time)*n

如果使用並行,會增加不必要的context switch,時間是(100+compile_time+20*m)*n,m為平均context switch 次數

如果檔案之間有dependency

並行在通常情況下更快

試想有兩個檔案A,B,且A depend on B先compile B,花費100,此時context switch到A,compile A

並行總花費2*(100+compile_time)+20如果使用單執行緒

compile B

compile A,遇到dependencyload B again

compile A

總花費 100 * 3 + compile * 2

3樓:「已登出」

拋磚引玉了。

在我看來,如果你編譯的不是C++,實踐中一般就不考慮這個問題。意義不是很大,通常來說編譯時間都能接受。

如果是C++,會有幾個瓶頸,比如CPU,磁碟等等。

純經驗來說,100個circle到記憶體取一次資料都不夠,那我看成你用記憶體當成"磁碟"好了。

如果本身使用了大量模板,需要展開,那麼顯然cpu會是滿速,而記憶體瓶頸沒有達到。顯然這樣單程序編譯會更好。

如果沒有使用大量模板,編譯的瓶頸通常不在cpu,記憶體頻寬會飽和,造成cpu總是在等資料。這樣其實也沒有啥好辦法,因為CPU的記憶體頻寬總是有限的。(locality低多檔案編譯只會更低)

綜上,我認為不論哪種情況,都應該選擇單u單檔案,和context switch無關。

單核cpu可以跑超執行緒嗎

Caspar Cui 可以。Pentium4 3.06GHz 這就是乙個 也是首批 支援HT技術的CPU。超執行緒是一種把乙個處理器模擬為兩個處理器使用,這樣能有效地利用和分配資源,達到提高整體效能的目的的技術。缺點是因為將乙個核心的cache分成兩份 可能還不等 會增加cache不命中的概率。多核...

java多執行緒在單核CPU上,還是需要volatile synchronized嗎?

Jinglei 需要Thread有logical thread和physical thread 單核cpu不一定只有乙個執行緒 JVM做了執行緒標準化遮蔽了執行緒細節 每個執行緒都有各自的stack 有context switch所以還是需要同步的 gavin synchronized的乙個語義是防...

為什麼不把CPU多核心合併為單核心呢

dontpanic 老闆,我們招不到智商 800 的員工啊,因為這世上根本沒有這樣的人 不行的,我們沒辦法把 8 個員工合併成乙個智商 800 的超人 真的不行,400 也不行 這個問題其實挺有代表性的,代表了一類問題 分不清頻寬和效能 速度 還是舉我經常舉的高速道路的例子。假設有一條北京到上海的高...