多核,多CPU之間的資源共享

架構可以千變萬化,面向需求、綜合考量是王道。
來,簡單舉個例子。假設現在我們要設計一臺計算機的處理器部分的架構。現在擺在我們面前的有兩種選擇,多個單核CPU和單個多核CPU。

如果我們選擇多個單核CPU,那麼每一個CPU都需要有較爲獨立的電路支持,有自己的Cache,而他們之間通過板上的總線進行通信。假如在這樣的架構上,我們要跑一個多線程的程序(常見典型情況),不考慮超線程,那麼每一個線程就要跑在一個獨立的CPU上,線程間的所有協作都要走總線,而共享的數據更是有可能要在好幾個Cache裏同時存在。這樣的話,總線開銷相比較而言是很大的,怎麼辦?那麼多Cache,即使我們不心疼存儲能力的浪費,一致性怎麼保證?如果真正做出來,還要在主板上佔多塊地盤,給佈局佈線帶來更大的挑戰,怎麼搞定?

如果我們選擇多核單CPU,那麼我們只需要一套芯片組,一套存儲,多核之間通過芯片內部總線進行通信,共享使用內存。在這樣的架構上,如果我們跑一個多線程的程序,那麼線程間通信將比上一種情形更快。如果最終實現出來,對板上空間的佔用較小,佈局佈線的壓力也較小。

看起來,多核單CPU完勝嘛。可是,如果需要同時跑多個大程序怎麼辦?假設倆大程序,每一個程序都好多線程還幾乎用滿cache,它們分時使用CPU,那在程序間切換的時候,光指令和數據的替換就要費多大事情啊!

所以呢,大部分一般咱們使用的電腦,都是單CPU多核的,比如我們配的Dell T3600,有一顆Intel Xeon E5-1650,6核,虛擬爲12個邏輯核心。少部分高端人士需要更強的多任務併發能力,就會搞一個多顆多核CPU的機子,Mac Pro就可以有兩顆。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章