[MPI] MPI组通信 -- 归约

学习资料: 《MPI并行程序设计实例教程》(张武生)

学习笔记:

         该操作对组内所有进程的数据进行某种归约后,将结果保存在“根”进程中。假定根进程为1号进程,则下列代码:

          int cnt=1;

          int dst=1;

          //sbuf: 发送缓冲区

          //rbuf: 接收缓冲区

          //cnt: 接收数据个数

          //MPI_SUM: 归约操作类型

           //dst: 目标进程

           //COMM_WORLD: 通信子对象

          MPI_Reduce(sbuf, rbuf, cnt, MPI_INT, MPI_SUM, dst, MPI_COMM_WORLD);

          将得到如下结果。

                                    进程0               进程1                进程2                   进程3

          发送缓冲区             1                     2                        3                        4

          接收缓冲区                                    10        

 

MPI内置定义的归约操作:

     MPI_MAX、MPI_MIN、MPI_SUM、MPI_PROD、MPI_LAND(logical AND) 、MPI_BAND(bit-wise AND)、MPI_LOR(logical OR)、MPI_BOR(bit-wise OR)、MPI_LXOR(logical XOR)、MPI_BXOR(bit-wise XOR)、MPI_MAXLOC(max value and location) 、MPI_MINLOC(min value and location)

此外,MPI还支持自定义归约操作。

 

《并行程序设计》(都志辉) 一书介绍。

      MPI_REDUCE将组内每个进程输入缓冲区中的数据按给定的操作op进行运算, 并将其结果返回到序列号为 root 的进程的输出缓冲区中。输入缓冲区由参数sendbuf、count和datatype定义, 输出缓冲区由参数 recvbuf、count和datatype定义,要求两者的元素数目和类型都必须相同。因为所有组成员都用同样的参数count、datatype、op、root和comm来调用此例程, 故而所有进程都提供长度相同、元素类型相同的输入和输出缓冲区。每个进程可能提供一个元素或一系列元素,组合操作依次针对每个元素进行。

          [MPI] MPI组通信 -- 归约 - applesun - 计算机技术学习笔记
                                                                           MPI归约操作图示

 

学习感想:
        参与 Mapreduce的reduce操作,对结果进行归约。

posted on 2012-10-09 20:16  applesun0757  阅读(953)  评论(0)    收藏  举报