1.了解 並行 併發 交錯併發 序列的意思
2.法則
amdahl 法則 ,通過以下**多處理器系統的最大理論效能提公升(即加速比),這個公式應用於執行在多核處理器上的並行演算法:
公式: 最大加速比(倍數)=1/((1-p)+(p/n));
其中:p 表示能夠完全並行執行的**比例
n 表示可用計算單元數(處理器或物理核心數)
缺點:amdahl法則考慮的只是物理核心數目的變化,並未考慮可以在既有應用程式中新增新功能以充分利用增加的並行處理能。
gustafson 法則,這個公式通過問題的大小來測量在固定時間內可以執行的工作量:
公式:總工作量(單元數)=s+(n+p)
其中:s 表示一次順序執行完成的工作單元數
p 表示能夠完全並行執行的**比例
n 表示可用計算單元數(處理器或物理核心數)
3.建立成功的基於任務的設計
遵循以下的步驟就可以建立出成功個的基於任務的設計:
3.1.將每個問題分解為很多子問題,完全不要考慮順序執行
3.2.將每個問題想象下面三類中的一類:
a. 能夠以並行的方式進行處理的資料---對資料進行分解以實現並行化,
b.需要很多任務,而且能夠以某種複雜的並行化驚喜處理的資料流---對資料和任務分解以實現並行化。
c.可以並行執行的任務---對任務進行分解以實現化。
3.3.將設計組織為能夠表達並行化的形式
3.4.考慮不同子問題連線起來的任務的必要性。盡量可能地避免依賴性
3.5.在進行任務的時候,心理要想著併發和潛在的並行化。
3.6.分析並行化的問題的執行計畫,考慮當前的多核微處理器和未來的架構。在設計的時候要準備好更高的可擴充套件性。
3.7.盡可能減少臨界區。
3.8.盡可能通過基於任務的程式設計實現並行化。
3.9.調優和迭代。
4.理解多核並行程式的設計原則
8個原則:
4.1 按照並行的方式思考
4.2 使用抽象程式設計
4.3 按照任務(事情)程式設計,而不是按照執行緒(cpu 核心)程式設計.
4.4 設計的時候要考慮關閉併發的情形.
4.5 避免使用鎖 -- 非常重要
4.6 利用為幫助併發而設計的工具和庫
4.7 使用可擴充套件的記憶體分配器
4.8 設計的時候要考慮隨增長的工作負載而擴充套件。
程式設計珠璣第一章
原文中的問題 如何在1mb的空間裡面對一千萬個整數進行排序?並且每個數都小於1千萬。實際上這個需要1.25mb的記憶體空間。1mb總共有838,8608。所以估計也可以在1mb左右的空間裡面進行排序了。include include define bitsperword 32 define shif...
第一章 C 程式設計
今天終於下定決心將資料結構與演算法重新在複習一遍,先是c 的一些比較容易忘記的特性簡單的溫習一遍 包括遞迴呼叫,異常操作,類模板,函式模板等等,這三天寫得原始碼如下 book name c structure and algorithm filename chapter1.cpp version 1...
第一章 程式設計原理
概述良好程式設計的重要原理,特別是它們在大型專案中的應用,然後介紹用於發現有效演算法的方法,如物件導向的設計和自頂向下的設計。在此過程中,我們提出將在後繼章中論述的程式設計和資料儲存方式方面的問題,並通過使用c 編寫程式,複習一下這門語言的一些基本特性。life遊戲實際上是一種模擬,並不是遊戲者之間...