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 设计的时候要考虑随增长的工作负载而扩展。