MPI之自己實現Alltoall 函式

2021-06-22 07:30:36 字數 711 閱讀 8877

mpi_alltoall是組內程序之間完全的訊息交換,其中每乙個程序都向其它所有的程序傳送訊息,同時,每乙個程序都從其它所有的程序接收訊息。本質上,它實現的效果就是矩陣的轉置。

如果不呼叫系統的mpi_alltoall()函式,只用sendrecv()、send()或recv()該如何實現呢?

事實上,只要明白alltoall()函式的工作原理,是很容易實現的。

如:

#include "stdio.h"

#include "mpi.h"

#include "stdlib.h"

int my_alltoall(void *aa, int inputlen, mpi_datatype inputtype, void *bb, int outputlen, mpi_datatype outputtype, mpi_comm comm, int size, int rank)

{ int i,j;

mpi_status status;

for(i=0 ; i

編譯執行,結果如下:

rank=0, a= 0 1 2

rank=1, a= 3 4 5

rank=2, a= 6 7 8

rank=0, b= 0 3 6

rank=1, b= 1 4 7

rank=2, b= 2 5 8

可以看到結果確實實現了轉置。

MPI實現矩陣相乘

配置mpi 配置目錄,即載入include和lib庫 載入依賴項 3.編譯 根據程式設計員的習俗先從乙個helloworld開始 include mpi.h include int main int argc,char ar 4.mpi 矩陣相乘 接下來便開始我們的主題 實際的思想是使用0程序將矩陣...

MPI 列舉排序實現

dfdfdfssfd.cpp 定義控制台應用程式的入口點。include stdafx.h include stdlib.h include stdio.h include mpi.h void countrank int rank,int perlen,int len,int p,int tota...

MPI並行實現列舉排序

mpi並行實現列舉排序,如下 include include include 函式名 main 功能 主函式,實現列舉排序 輸入 argc為命令列引數個數 argv為每個命令列引數組成的字串陣列 輸出 返回1代表程式正常結束 int main int argc,char argv else if m...