0%

MPI自己的总结

2019年6月13日 下午2:07

  1. 这篇文章主要参考这个网站的教程,他没有涉及到上课讲到的advance topic内容,但是这些基本的用法对于新手来理解MPI是一个很好的教程
    A Comprehensive MPI Tutorial Resource · MPI Tutorial

  1. 同一个程序,执行时指定不同的-n,也就是process的个数,会有很大的区别
  2. MPI Send and Receive · MPI Tutorial
    1. 每个人都有自己的数据区域,MPI的核心就是send_recv ,其他的操作可由这两个操作自己写出来
    2. MPI 乒乓程序
    3. 环程序
  3. MPI 广播以及集体(collective)通信 · MPI Tutorial
    1. 集合通信:最关键是要有一个同时的起点,这个用barrier来实现
  4. MPI Scatter, Gather, and Allgather · MPI Tutorial
    1. 对于所有的collective 操作,Processor 0 是一个特殊的存在
    2. 使用MPI_Scatter和MPI_Gather来计算平均数
      1. 代码中如果没有通过if rand来指定那个process来执行或者没有MPI_API的地方,那么就是所有processor都会执行,也就是说:::在写代码的时候需要两种思考角度::
        1. 站在单个processor的角度,考虑这些processors的通用步骤
        2. 站在全局的角度,考虑这几个processor的统筹安排(这时往往要考虑使用barrier,collective 操作就默认使用barrier)
          1. 对于代码中同一个位置的同一个MPI的内置函数api,不同的进程会有不同给的执行方法。
    3. MPI_Allgather 以及修改后的平均程序
  5. ::串行控制的是一个人,并行是同一套规则控制的是多个人::。当然,可以通过if来指定让谁做。好的地方是:对于一个人来说,其实是依然串行执行的,不会翻来赴去,坏的地方是:他们之间执行的先后次序每次执行是不一样的,每次执行都不一样。所以,重点是,最起码我们要保证在自己代码的功能,和自己需要的功能在与先后次序是无关的,不需要完全与次序无关。这才是最难的地方。
  6. MPI Reduce and Allreduce · MPI Tutorial

  7. 关于一些先进的Topic lesson3MPI_3_Advanced_Topics.pdf
    1. 这里总体思想就是和计算机网络的思想有点像:将硬件层和上层的软件层分离,作为程序与我们可以忽略硬件的排列和规格,进行be "programmed" by the application developer.