【MPI编程实现多个数组排序】

    技术2022-07-10  65

    MPI编程实现多个数组排序

    1.1问题描述1.2算法实现1.3结果实现与分析1.4源码实现

    1.1问题描述

    对于课件中“多个数组排序”的任务不均衡案例进行MPI编程实现,规模可自己设定、调整。实验环境:联想笔记本,集成开发环境:Visual Studio

    1.2算法实现

    数组排序函数 主函数,进程分发任务

    1.3结果实现与分析

    规模512*5121024*10242048*20484进程耗时(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

    Processed: 0.013, SQL: 9