並行編程學習筆記

 

 

線程化方法學的四個步驟。算法

1, 分析(Analysis)編程

a)       必須對程序結構十分熟悉,算法精通。緩存

b)       判斷算法是否能夠修改成並行算法。多線程

c)        經過調試工具,獲取程序最耗時的地方。併發

d)       修改佔用時間最多的算法,得到最大收益。dom

2, 設計與實現(Design and implementation)分佈式

a)        函數

3, 測試正確性(Test for Correctness)工具

a)       知道全部線程化得錯誤,產生的緣由和產生的現象。性能

b)       學會使用線程調試工具和Debug調試工具。

4, 性能調優(Tune for Performance)

a)       線程化代碼調優經常使用方法。

b)       學會使用線程調優軟件。

 

 

開發方法:從串行到並行。先串行保證算法的正確,而後修改並行,跳過程序的性能。

 

理論模型:

 

並行隨機訪問機(Parallel Random Access Machine, PRAM)

問題核心:共享內存。共享內存致使兩種類型的讀操做限制和寫操做限制:併發或者獨佔(Exclusive)。

內存訪問模式

描述

併發讀,併發寫

(Concurrent Read, Concurrent Write,CRCW)

多線程同時寫一個內存位置,而且多個線程同時寫入一個內存位置

併發讀,獨佔寫

(Exclusive Write,Concurrent Read, CREW)

 

獨佔讀,併發寫

(Concurrent Write,Excusive Read, ERCW)

 

獨佔讀,獨佔寫

(Concurrent Write,Excusive Read, EREW)

 

 

 

分佈式內存模型(Distributed-Memory)

經常使用可移植庫:

l  PVM(Parallel Virutual Machine,並行虛擬機)

l  MPI(Message Passing Interface, 消息傳遞接口)。更多信息能夠從Beowulf項目得到。

 

共享內存編程與分佈式內存編程的比較

 

共有功能:

冗餘工做:

1, 分佈式確定會由於發送數據和接受數據產生執行開銷。

2, 多線程產生數據產生冗餘開銷。

 

分解工做:

1, 分配工做到不一樣的線程和進程中。

 

共享數據:

1, 部分數據根據程序須要被線程和進程共享。

 

工做的靜態/動態分配:

1, 總執行時間大體等於每一部分工做的執行時間之和,應用於靜態分配。

2, 當工做的數量遠多於線程的數量,而且時間不能計算,應用於動態分配。

 

共享內存獨有功能:

         局部變量和線程局部存儲。Windows和POSIX線程都定義了線程局部存儲(Thread-Local Storage, TLS) API。TLS的值在不一樣函數之間保持不變,相似於靜態變量。

 

內存效應:

         多核之間共享緩存,要處理緩存置換問題。

         多核之間獨有緩存,效率比較低。

僞共享。線程的不一樣變量被包含在同一條緩存線(Cache Line)中。根據緩存一致性原則,當某個線程更新緩存中的一個變量,若是另外一個線程但願訪問緩存線其餘內容是,須要先將改緩存線寫回到內存中。

                                                              

內存中的通訊:

對同一個內存區域,進行讀寫。

互斥:

         每次只容許一個線程訪問相同的共享變量。

 

生產者和消費者:

 

讀/寫鎖

 

 

緩存一致性協議參考文檔:

http://yefeng.iteye.com/blog/210067

http://www.core.org.cn/NR/rdonlyres/Electrical-Engineering-and-Computer-Science/6-823Computer-System-ArchitectureSpring2002/AECFE2BE-F2D5-4A44-867E-4BC83249E2EF/0/lecture18.pdf

相關文章
相關標籤/搜索