4.3
實現(xiàn)并行計算具備的條件:
(1)多個物理處理單元轧膘,否則只能實現(xiàn)邏輯上的并行兔甘;
(2)通信機制(網絡與協(xié)議);
(3)編程架構:多線程洞焙,多進程,協(xié)程澡匪;進程與線程的概念:
(1)程序是初始數據和指令的靜態(tài)集合熔任,進程是程序的一次動態(tài)運行唁情。
(2)操作系統(tǒng)是現(xiàn)將程序的指令和數據加載至內存,然后將內存的起始地址交給PC寄存器荠瘪,然后將控制權釋放給CPU;CPU先從PC寄存器開始執(zhí)行哀墓,執(zhí)行之后將下一條指令地址給PC寄存器趁餐;
(3)線程是進程的組成基本單元篮绰,也是操作系統(tǒng)調度的最小單位,每個進程至少包含一個線程(稱主線程)吠各;
(4)進程間是獨立的地址空間臀突;無法通過共享存儲來交換數據贾漏;通過消息方式通信;
(5)線程間是共享地址空間纵散;通過共享存儲來交換數據隐圾;通過內存通信(加鎖);
注:共享內存操作是很危險的掰茶,需要通過鎖的方式保護臨界資源;
3.明確地址空間越界的原因濒蒋,進行安全訪問:
(1)訪問不該訪問的位置:邏輯上不該但實際上不會報錯;訪問了不能訪問的位置沪伙,直接導致內存異常報錯瓮顽;
(2)全局變量和局部變量在地址空間內的組織方式是不同的:
堆(heap):全局變量和靜態(tài)變量焰坪;
棧(satck):臨時變量;其中會用沙箱機制保護函數返回某饰;
- 進程間通信:
(1)首先要明確“我是誰”:即自身進程編號儒恋;
(2)其次要明確“還有誰”:即其他進程數量;
(3)以“數值規(guī)格化”為例:
輸入:A組數據[x1:y1]; B組數據[x2:y2]诫尽;
輸出:B組數據通過公式 (b-x2)*(y1-x1)/(y2-x2)+x1 線性轉換至[x1:y1區(qū)間];
求解:求的局部最值-->歸一求得全局最值-->廣播給各進程求得相應值-->歸一整合炬守;
4.10
- 合理分布數據使得進程間負載均衡:
以“求質數個數”為例子:
for(i=pidn;i=(pid+1)n;i++)分布會導致pid過大的進程計算數值過大而計算速度慢;
for(i=pid; i=max; i=i+n)分布會導致某個進程的所有數都不是質數减途,但仍要判斷計算; - 加速比的概念鳍置;