多核並行程式設計技術 一

2022-01-24 10:05:26 字數 954 閱讀 5844

首先需要先理解幾個概念:

序列:最基本的程式執行方式,序列程式的整個執行時,只有乙個呼叫棧和乙個執行時上下文,單程序/單執行緒程式可以認為是序列程式。

併發:多執行緒出現後比較常見的程式執行方式,多執行緒程式執行時,會有多個執行時上下文和對應的多個呼叫棧。邏輯上多個執行緒同時發生,物理上是有作業系統排程,cpu某一時刻依然只執行乙個執行緒的任務,但是某個執行中的執行緒隨時可能被os排程走,而隨後執行的執行緒操作的資料可能跟剛剛被排程走的執行緒造成衝突,所以有共享資料同步問題。

多程序如果有共享資料,也符合併發程式的特點,相對於多執行緒併發,多程序併發解耦更徹底,資料分割更清晰。

另外,前述併發情況是從使用者程式的角度,從核心的角度,還會有其他類似的場景,比如中斷。中斷處理程式和中斷之前執行的程式也有可能有共享資料衝突的問題。

簡單的說,併發指多個執行緒在同乙個硬體資源上交替執行的過程,也就是所有活動執行緒在某段時間內同時執行的狀態,但在某個給定的時刻都只有乙個執行緒在執行。

並行:多核處理器出現後會越來越常見的程式執行方式,物理上多個任務可以同時執行,這個概念介於作業系統和體系架構之間,從作業系統而言,依然是排程多個執行緒/程序去cpu執行,只不過有了多個cpu/核心,不同執行緒/程序可以繫結從而完全占用一顆核心,所以從體系架構的角度,同一時刻是有多個任務同時執行,另外一些說,如『多處理器程式』、『多核程式』都可以認為屬於並行程式的範疇。

簡單的說,並行指多個執行緒在不同的硬體資源或者處理單元上同時執行,也就是說多個執行緒在任何時間點都同時執行。

從概念的範圍看,並行 < 併發,即並行的程式肯定是併發的,併發的程式不一定是並行的。但是,無論是邏輯上的併發(單處理器,多執行緒/多程序)還是物理上的併發(並行,多處理器),所面臨的共享資料操作一致性問題是一樣的,在很多情況下,多核程式設計可以近似認為是多執行緒程式設計。

問題:微處理器為什麼要從單核發展到多核?

答案:功耗問題限制了單核不斷提高效能的發展途徑。

具體可以參考intel官網上面關於這個問題的解釋:

《多核程式設計技術》讀書筆記一

多核程式設計技術 讀書筆記一 1.馮.諾伊曼體系結構的計算機和圖靈機 馮 諾伊曼體系結構的計算機工作原理 在計算機內部使用二進位制 計算機採用五大模組 控制器 運算器 儲存器 輸入輸出裝置。程式能夠儲存並自動執行。資料通過輸入裝置進入計算機儲存器,在控制器的指揮下在運算器進行邏輯運算和算術運算處理,...

一些程式設計技術

大量程式設計資源 com 技術按我看來,他的思想是很有用的,實現dll二進位制相容,用 guid,clsid 等全域性唯一的id 標識元件的介面。值得學習一番 code project 這個 很多windows的技術和示例 com的通俗解釋 當然微軟的官方文件也是必不可少的 www.gotw.ca ...

Nios Flash程式設計技術

1.1 altera支援cfi flash程式設計 1.3 非支援cfi程式設計 由於我所用的nor flash晶元是am29lv320db,不再nios支援的列表,自己編輯了override檔案,但還是無法正確program進去,決定用列表支援的sst39vf800試一試,引腳相容,容量為1 4,...