2019年6月13日 下午1:30
1.1OpenMP知识点回顾
- OpenMP的目的是利用多线程进行加速,最重要的两个问题是:对什么进行拆解并行和并行完之后如何进行合并。在上面的样例中,对于求面积的问题,我们拆解的对象就是将大面积拆解为互不干扰的众多小面积,合并的对象就是这些小面积求和,对于Fibonacci问题,我们无法对于一个Fibonacci进行并行运行,但是可以让多个Fibonacci计算同时进行。
- 网站( https://computing.llnl.gov/tutorials/openMP/ )中介绍了OpenMP的发展史、基础编程模型、OpenMP的三个基本构成等重要问题,对于理解和使用OpenMP有重要的作用。
1.2Fail sharing
- 网页( https://software.intel.com/en-us/articles/avoiding-and-identifying-false-sharing-among-threads ) 是intel的官网重点讲解了cache line的问题。本质来说就是由于cache的引入导致了数据的不唯一化,那么多数据时间的同步就会让并行的效率有所下降。解决方案就是使用线程的局部数组,_不再操作同一片内存区域,而不是不同的线程操作不同的区域_。正如代码中所描述的:Note that this program avoids the false sharing problem by storing partial sums into a private scalar.