MPI学习-规约函数MPI_Allreduce

来源:互联网 发布:各类数据出售 编辑:程序博客网 时间:2024/05/22 00:22

全局规约函数MPI_Allreduce:
将所有的发送信息进行同一个操作,所有进程均接收信息;
相当于先做MPI_Reduce,然后再做MPI_Scatter。

语法规则:

int MPI_Alleduce(void *input_data, /*指向发送消息的内存块的指针 */void *output_data, /*指向接收(输出)消息的内存块的指针 */int count,/*数据量*/MPI_Datatype datatype,/*数据类型*/MPI_Op operator,/*规约操作*/MPI_Comm comm);/*通信器,指定通信范围*/

举例:

#include "stdafx.h"#include <stdio.h>#include <stdlib.h>#include <mpi.h>#define N 3int main(int argc, char *argv[]){    int i, myrank, nprocs;    int *send_buffer=new int[N];    int *recv_buffer = new int[N];    MPI_Init(&argc, &argv);    MPI_Comm_rank(MPI_COMM_WORLD, &myrank);    MPI_Comm_size(MPI_COMM_WORLD, &nprocs);    for (i = 0; i < N; i++)    {        send_buffer[i] = myrank;    }    MPI_Allreduce(send_buffer, recv_buffer, N, MPI_INT, MPI_MAX,        MPI_COMM_WORLD);    for (i = 0; i < N; i++)    {        printf("myrank = %d, recv_buffer[%d] = %d\n", myrank, i,            recv_buffer[i]);    }    MPI_Finalize();    return 0;}

进程总数为4的时候的输出:
output

注意:

send_buffer与recv_buffer 的datatype、datasize相同。

0 0
原创粉丝点击