基礎要素
任務/資料劃分
多個控制流並行,劃分帶來的負載均衡和通訊開銷也對程式的效能有決定性的作用
併發訪問控制
多個控制流需要訪問不同或者相同的資源,如何協調這些資源變得非常重要
並行化和物件導向
並行需要去除資料和控制的依賴關係,而物件導向把大問題解決成小問題,然後通過物件之間的通訊來解決小問題,進而解決大問題。
物件導向鼓勵隱藏物件擁有的資料,而並行化需要分析作用在資料上的操作的依賴關係。
對並行設計來說,合適的方法是:過程化的設計方法加上以資料為中心。並行化的本質是以資料為中心的,顯式的傳遞資料對於並行更為合適。通過過程化的設計方法設計程式流程,以資料為中心進行並行化已經是流行的設計方式。
實踐中,需要尋找資料熱點並優化資料熱點。
計算規模一定時,如果程式中存在不能並行的部分,那程式是很難實現完全線性加速的。
併發訪問控制
並行程式需要協調對某個控制資源的訪問。
基於訊息傳遞併發訪問控制,資料的交流通過傳遞訊息進行,各個控制流擁有自己的儲存器內容。
基於共享儲存的併發訪問控制,各個控制流訪問共享的資料,訪問之間有可能衝突,比如讀後寫、寫後寫、寫後讀,通常是採用互斥的方式來保證。
常見的併發訪問控制流是檔案
通常有兩種做法:
只有乙個檔案,乙個控制流讀取檔案並分發訊息給其他控制流。
把乙個檔案分割成多個子檔案,每個控制流讀取乙個子檔案。
前一種做法比較簡單,但資料分發是序列的,容易因為通訊開銷而成為瓶頸。
併發訪問控制的其他常見做法是分為寫和讀,不同的控制流可以讀同乙個資料,此時無需訪問控制,而多個資料流寫的就必須特殊控制,對於乙個資料流,有些控制流讀,有些控制流寫時必須特殊處理。
並行的實現
程序級並行、執行緒級並行,由於程序的資源是獨立的,而執行緒的資源是共享的,程序間的並行更加容易,但基於多核的處理器上線程間的並行通常更高效。因此多核處理器選擇執行緒級並行,而多機系統選擇程序級並行。也可以混用這兩種方式:節點間採用程序間並行,而節點內的多核上選擇執行緒間並行。也稱為超級並行。
同步和非同步、阻塞和非阻塞
阻塞和非阻塞是對程序或執行緒本身而言的,如果乙個操作不阻塞程序或執行緒,接著執行**,稱之為非阻塞,反之稱之為阻塞。相對於非阻塞,阻塞更為常見,非阻塞要求開發人員手動保證操作的完成。
同步和非同步值通訊的多個程序和執行緒,如果乙個程序或執行緒與其他程序或執行緒通訊時不需要等待其他程序和執行緒準備完成,那就是非同步,反之為同步。
OpenMP程式設計要素
編譯制導指令格式 pragma omp 功能指令 子句 子句 功能指令 parallel用於 塊之前,建立並行域,並將 塊分配到並行域所有執行緒並行執行 for用於for迴圈前,將迴圈分配到並行域執行緒並行執行 parallel for 用於for迴圈前,建立並行域並將迴圈分配到並行域執行緒並行執行...
網路程式設計要素
ip位址 解釋見計算機網路ip位址 有五類 協議 tcp udp tcp解釋 三次握手 第一次傳送請求,第二次獲取反饋 第三次建立連線 udp解釋 udp資料需要打包,因為包有大小,所以對資料大小有限制要求,udp不需要建立連線,所以不保證接受方能接受到資料,所以不可靠,但速度快 埠 物理埠 網絡卡...
網路程式設計要素
先來了解一下什麼是tcp協議 tcp傳輸控制協議 transmission control protocol tcp協議是面向連線的通訊協議,即傳輸資料之前,在傳送和接收端建立邏輯連線,然後在傳輸資料,它提供了兩台計算機之間可靠的無差錯的資料傳輸。在tcp連線中必須要明確客戶端和服務端,在客戶端向服...