天天看點

多核處理器介紹

多核是多微處理器核的簡稱,是将兩個或更多的獨立處理器封裝在一起,內建在一個電路中。多核處理器是單枚晶片(也稱為矽核),能夠直接插入單一的處理器插槽中,但作業系統會利用所有相關的資源,将它的每個執行核心作為分立的邏輯處理器。通過在多個執行核心之間劃分任務,多核處理器可在特定的時鐘周期内執行更多任務。

多線程是指從軟體或者硬體上實作多個線程并發執行的技術。具有多線程能力的計算機因有硬體支援而能夠在同一時間執行多于一個線程,進而提升整體處理性能。具有這種能力的系統包括對稱多處理機、多核心處理器以及晶片級多處理或同時多線程處理器。在一個程式中,這些獨立運作的程式片段叫作“線程”,利用它程式設計的概念就叫作“多線程處理”。

如果某個系統支援兩個或者多個動作(Action)同時存在,那麼這個系統就是一個并發系統。如果某個系統支援兩個或者多個動作同時執行,那麼這個系統就是一個并行系統。

多核程式設計技術主要包括并行計算、共享資源分布式計算、任務分解與排程、Lock-Free程式設計等内容。其中共享資源分布式計算、任務分解與排程是最重要的内容,也是大多數程式員未接觸過的内容,許多并行算法都可以通過它們來實作。多核程式設計模式主要是提供一種多核并行與分布式程式設計的普遍方法,有了這些程式設計模式後,程式員不再需要去學習各種複雜的并行算法,它可以複用現有的串行算法,很容易地實作并行和分布式計算。在多核程式設計技術中,最重要的一點是如何将計算均勻分攤到各個CPU核上。

多核時代的到來,給程式員的程式設計思維帶來了巨大的沖擊和挑戰。為了能夠充分利用多核性能,程式員必須學會以分塊的思維設計程式,以多程序或多線程的形式來編寫程式。到底應該使用多程序還是多線程的形式來編寫程式,是最讓程式員感到困惑的問題之一,這些需要根據具體的應用來決定。在通常情況下,使用多線程進行多核程式設計比使用多程序有更大的優勢,因為:

(1)線程的建立和切換開銷比程序更小。

(2)線程之間通信的方式比較多,而且簡單也更有效率。

(3)多線程有很多的基礎庫支援。

(4)多線程的程式比多程序的程式更容易了解和修改。

除了程式設計形式,使用多線程程式設計的動機也發生了改變。過去,Windows程式員使用多線程的主要原因之一是為了提高使用者程式運作效率,例如,在長時間的計算中提高GUI、I/O或者網絡的響應速度。而在多核時代編寫應用程式為了充分利用多個計算核心,縮短計算時間,或者在相同的時間段内計算更多任務。例如,在進行遊戲程式設計時,通過多線程的方式把碰撞檢測的計算分散到多個CPU核心,就可以大大縮減計算時間,也可以利用多核做更細緻的檢測計算,進而能夠模拟更加真實的碰撞。

處理器所能交換的最小存儲單元就是一個cache行,或者一個cache塊。兩個獨立的cache在需要讀取同一cache行時,會共享該cache行。但如果在其中一個cache中,該cache行被寫入,而在另一個cache中該cache行被讀取,那麼即使讀寫的位址不相交,也需要在這兩個cache之間移動該cache行。就像兩個人同時在寫一本日志的兩個不同部分,兩人的寫入動作互相獨立,但是除非将日志撕成兩半,否則這兩個人必須來回地互相傳遞這本日志。同樣地,兩個硬體線程在寫入一個cache的不同部分時,互相競争cache,就像在進行乒乓球比賽。

繼續閱讀