
1.1 并行和向量化的作用
并行和向量化的首要作用是尽量发挥硬件提供的全部计算能力,以减少延迟(更快地完成计算任务)或提高吞吐量(在相同的时间内完成更多任务)。目前绝大多数软件都是标量且串行的,虽然目前CPU使用乱序执行、指令流水线等指令级并行技术提升了处理器效率,这些技术的使用使得从指令级来看程序的执行并不完全和串行的代码系列一致,但是软件依旧只有一个标量控制流。以Intel Haswell I3-4130处理器为例,它使用了256位的向量,集成了2个核心,那么在其上运行的、使用32位浮点计算的标量串行代码最多能够发挥峰值性能的1/16,其中标量计算意味着只能发挥向量运算性能的1/8,而串行代码只能发挥2核中1核的性能。标量串行软件只能利用多核向量处理器提供的部分计算能力,为了利用多核向量处理器提供的全部计算能力,必须采用向量化和并行化的思维方式编写软件代码,而现有的串行软件必须修改才能利用多核向量处理器的全部计算能力。
并行/并发的另一个作用是实现功能和同时满足多个用户请求:比如需要软件在计算的同时能够响应用户的交互,此时就必须使用并行/并发,因为存在两个或多个控制流;假设一个用户请求需要100ms完成,那么如果使用单线程服务的话,1秒钟可以满足10个用户请求,但是如果使用20个线程的话,每个用户请求的满足时间可能只需要150ms,甚至更少。
在科学计算中,物理模拟需要长时间的运行以获得更精确的结果,因此并行和向量化技术应用比较广泛。在这个领域,并行和向量化主要提供以下两方面的作用:
·让程序运算得更快,以节约时间。假设程序原来需要一年才能模拟一次,通过使用并行和向量技术,现在一个月就能够完成一次模拟,缩短的11个月时间就可以多做实验、提前发论文、提前毕业或陪女朋友逛街等。
·让程序能够计算更大规模的体系。大规模体系要求更大的计算能力,因此对并行和向量化的需求更为迫切,而且大规模意味着可以更真实地模拟现实系统。假设一个二维域分解问题的计算量和区域的大小成比,假设使用并行和向量化技术获得的计算能力是原来的36倍,那么可以将模拟区域两个方向都扩大为原来的6倍。