并行编程中应注意的问题

      随着多核技术的发展和个人超级计算机的引入,如何更好的利用多核、多结点是一个亟需解决的问题。多核技术是在每个CPU芯片上集成多个计算核,它和SMP(对称多处理器)最大的区别就在于多核CPU有更大的L2 cache,并且多个计算核共用片上的缓存(有的共用L2 cache,有的共用L3 cache)。这就是说,如果编写的程序能够更好的利用cache,程序的性能将会得到10倍,20倍的提高。cache的低效率使用体现在:第一,程序的局部性不好,如数组的存放跨度大,内存的访问不具有顺序性,而是随即乱序访问。第二,对cache line的争用,即伪共享或者乒乓效应。多个线程同时争抢一个cache line,并写进行写操作,这样cache line将会频繁的刷新,降低效率。造成这个的原因就是多个线程访问的数据存放太近。

      在非内存统一编址的编程模型中,即多结点的集群系统,MPI是一个消息传递的标准。在消息传递中,集合通信和同步是耗时比较长的操作。如果程序任务划分的不均衡,在同步时的耗时将会更加严重。所以在MPI编程中,均衡的划分任务非常的重要。现在一般都会引入动态的任务划分,这样任务能够很均衡的分配到各个节点上,但是存在master进程这个失效点,以及额外的并行管理开销。所以一些能够静态划分好的任务就不需要用动态的分配方案。

      本文只是简要的介绍了一下在并行编程时需要注意的一些基本问题,如果需要更详细的资料可以和我探讨。

 

你可能感兴趣的:(并行编程中应注意的问题)