MPI编程实现多个数组排序
1.1问题描述1.2算法实现1.3结果实现与分析1.4源码实现
1.1问题描述
对于课件中“多个数组排序”的任务不均衡案例进行MPI编程实现,规模可自己设定、调整。实验环境:联想笔记本,集成开发环境:Visual Studio
1.2算法实现
数组排序函数 主函数,进程分发任务
1.3结果实现与分析
规模512*5121024*10242048*2048
4进程耗时(s)0.0004130.0007540.0025818进程耗时(s)0.0002050.0004140.000815
使用MPI编程为各个数组排序更加高效,并且不用发送消息,只需每个进程执行任务,不用过多通信,节省了之前用pthread和mpi编程锁的开销,同一数据规模,多进程处理提高效率,数据越大,多进程去派发有可能与少进程处理相差一个量级的差别。多进程处理任务,数量差别不大,耗时在同一量级。 命令行执行程序
1.4源码实现
#include<stdio.h>
#include<mpi.h>
#include <algorithm>
#include <iostream>
#include <vector>
#include <time.h>
using namespace std
;
const int N
= 2048;
vector
<int> arr
[N
];
void init(void) {
srand(unsigned(time(nullptr)));
for (int i
= 0; i
< N
; i
++)
{
arr
[i
].resize(N
);
for (int j
= 0; j
< N
; j
++)
arr
[i
][j
] = rand();
}
}
void arr_sort(int myid
, int numprocs
) {
int r
= myid
, seg
= N
/ numprocs
;
for (int i
= r
* seg
; i
< (r
+ 1) * seg
; i
++)
sort(arr
[i
].begin(), arr
[i
].end());
}
int main(int argc
, char* argv
[]) {
MPI_Init(&argc
, &argv
);
int myid
, numprocs
;
double start
, end
;
MPI_Comm_rank(MPI_COMM_WORLD
, &myid
);
MPI_Comm_size(MPI_COMM_WORLD
, &numprocs
);
start
= MPI_Wtime();
arr_sort(myid
, numprocs
);
end
= MPI_Wtime();
if (myid
== 0) {
printf("ARR_NUM = %d \n", N
);
printf("MPI_arraysort time: %fs", end
- start
);
}
MPI_Finalize();
return 0;
}
我是一只努力飞的菜鸟,大家一起加油吧。 如有错误,请指出,大家一起进步哦! 2020/06/30