第一章简介
并行编程被誉为编程中最困难的问题之一。 关于死锁、活锁、竞争条件、非确定性、限制可扩展性的阿姆达尔定律以及滥用实时延迟的危险。
新技术总是一开始很难使用,但随着时间的推移最终会变得更容易使用。
1.1 并行编程困难的历史原因
难度分类:
1.并行系统的历史高价和相对稀有。
2. 研究人员和实践者缺乏并行系统的经验。
3.缺乏公共并行代码。
4. 并行编程缺乏广泛理解的工程原理。
5. 即使在紧凑的共享内存系统中,通信相对于处理本身来说也是昂贵的。
现在所有困难都消失了。 情况已经大大好转,无需担心上述困难。
1.2 并行编程的目标
三大目标:
1. 性能
2. 生产力
3. 通过性
1.2.1 性能
大多数并行编程主要是为了提高性能,否则何苦呢!
看看什么是“性能”?
比较广泛。 包括可扩展性和效率。 对性能的关注已从硬件转移到并行软件。 并行化是充分利用现有系统性能的好方法。
因此,首要目标是性能而不是可扩展性。
当关注并行算法时并行计算机体系结构:硬件软件结合的设计与分析,不要忽视串行算法。
1.2.2 生产力
软件开发商的投入已经占了很大的比例,这个问题不得不考虑。
硬件变得越来越便宜并行计算机体系结构:硬件软件结合的设计与分析,生产力变得越来越重要。 怎样才能既不让马吃草,又能让它们跑得快呢? 此外,马现在需要吃得更好。
1.2.3 普遍性
降低并行程序高成本的一种方法是使程序尽可能通用。 通用软件可以赢得更多用户并更好地分摊成本。
但! 多功能性会带来更大的性能损失和生产力损失。
流行的并发编程环境:
1、C/C++“锁和线程”:包括POSIX线程、Windows线程以及很多操作系统内核环境。
2. Java:很好,但比前者低。
3. MPI:低于C/C++。
4. OpenMP:用于特定任务。 这也限制了它的性能并且比C/C++更简单。
5. SQL:仅用于数据库查询。