MPI实践——ParallelRank程序
来源:互联网 发布:域名投资怎么理解 编辑:程序博客网 时间:2024/06/07 13:08
MPI实践——ParallelRank程序
1、问题概述
每一个进程随机产生一个数字存储在本地,然后对比所有进程所包含的整个数字集,进行排序然后分发,最后将排序号输出。
输入输出如图:
2、算法思路
整个程序所要做的就是收集所有进程产生的一个随机数,然后进行排序,最后将排序结果发送给各自进程,最后将排序结果发回各进程并进行输出。
随机数可以用rand()产生,用MPI_Gather将各自数字收集进0进程,排序选用冒泡排序,排序之后利用MPI_Scatter将排序结果分发给各自进程。最后进行输出。流程图如下:
3、代码分析
#include <stdio.h>#include <mpi.h>#include <malloc.h>#include <stdlib.h>int main (int argc ,char** argv){int rank,size,i,j;MPI_Init(&argc, &argv);MPI_Comm_size(MPI_COMM_WORLD,&size);MPI_Comm_rank(MPI_COMM_WORLD, &rank);//int *sbuf = (int *) malloc(sizeof(int) * size);srand(rank*1000);int range;int send = rand();int *sbuf = (int *) malloc(sizeof(int) * size); int *rbuf = (int *) malloc(sizeof(int) * size);int *sort = (int *) malloc(sizeof(int) * size); printf("Process %d rand is %d\n",rank,send); MPI_Gather(&send, 1, MPI_INT, rbuf, 1, MPI_INT, 0, MPI_COMM_WORLD);if(rank==0) {for(i=0;i<size;i++){ sort[i] = rbuf[i]; printf("%d ",rbuf[i]);} putchar('\n');int t;for(i=0;i<size;i++){ for(j=i+1;j<size;j++){if(sort[i]<sort[j]){ t = sort[i]; sort[i] = sort[j]; sort[j] = t;} }}for(i=0;i<size;i++){ for(j=0;j<size;j++){if(sort[j]==rbuf[i]){ sbuf[i] = j;} }} }MPI_Scatter(sbuf, 1, MPI_INT, &range, 1, MPI_INT, 0, MPI_COMM_WORLD);printf("processa: %d : range %d \n",rank,range);/*if(rank==0){ for(i=0;i<size;i++){ printf("%d ",sbuf[i]); } putchar('\n');} */MPI_Finalize();return 0;}
4、结果演示
阅读全文
1 0
- MPI实践——ParallelRank程序
- MPI介绍与实践——理论介绍
- MPI—HelloWorld
- MPI—并行求和
- MPI—点对点通信
- MPI—双机运行
- MPI学习笔记——MPI环境配置
- MPI学习笔记——MPI基本框架
- POJ1502——MPI Maelstrom
- MPI—聚集函数MPI_Gather()
- MPI—统计素数个数
- MPI程序调试--笔记
- Linux mpi 程序示例
- Linux mpi 程序示例
- MPI调用C++程序
- mpi 程序 debug
- MPI示例程序
- mpi 程序打头
- Unity3D Shader(8)——Vertex Shader(漫反射)
- hdu 6103 -Kirinriki
- 2016 ACM青岛区域赛题解
- vimdesktop --goreliu 版本配置
- LeetCode 算法
- MPI实践——ParallelRank程序
- Excel 数据 存 MySQL
- Idea中ClassNotFoundException: org.springframework.web.filter.CharacterEncodingFilter
- 例题1.8 彩色立方体 Colored Cubes UVALive
- Java图形用户接口
- Java基础——HelloWorld2
- (7)字符串类型:varchar、char、text、enum和set(不常用)
- FileInputStream&FileOutputStream 和 BufferedInputStream&BufferedOutputStrem的性能测试小案例
- UVA 11054 Wine trading in Gergovia