码迷,mamicode.com
首页 > 其他好文 > 详细

MPI实现并行计算统计数据

时间:2015-04-19 18:00:28      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:mpi   并行计算   数据统计   

给定一个数据文件data.txt,存放有N个整型数据(测试数据为13个,1-13),要求统计素数个数。

#include "mpi.h"
#include <stdio.h>
#include <math.h>
#define SIZE 10000

int isPrime(int num){
    if(num<2){
        return 0;
    }else if(num==2 || num==3){
        return 1;
    }else{
        int primeFlag=1;
        for(int i=2;i<(int)sqrt(num)+1;i++){
            if(num%i==0){
                primeFlag=0;
                break;
            }
        }
        return primeFlag;
    }
}

int main(int argc,char* argv[]) {
    int number[SIZE];
    FILE *fp=fopen("data.txt","r");
    if(fp==NULL) {
        printf("can not open data.txt!\n");
    } else {
        int totalNum=0;
        while(!feof(fp)) {
            if(totalNum<SIZE-1) {
                int num=0;
                fscanf(fp,"%d",&num);
                num?number[totalNum++]=num:0;
            } else {
                break;
            }
        }
        int rank,size;
        MPI_Init(&argc, &argv);
        MPI_Comm_rank(MPI_COMM_WORLD, &rank);
        MPI_Comm_size(MPI_COMM_WORLD, &size);
        if(rank==0){
            int result=0;
            int total=0;
            for(int i=1;i<size;i++){
                MPI_Recv(&result,sizeof(int),MPI_INT,i,0,MPI_COMM_WORLD,MPI_STATUS_IGNORE);
                total+=result;
            }
            printf("total number:%d\n",total);
        }else{
            int start=totalNum/(size-1)*(rank-1);
            int tail=(rank==(size-1))?totalNum-1:start+totalNum/(size-1)-1;
            int mySize=0;
            for(int i=start;i<=tail;i++){
                printf("[rank %d] judge number:%d\n",rank,number[i]);
                mySize=isPrime(number[i])?mySize+1:mySize;
            }
            printf("[rank %d]total prime number:%d\n",rank,mySize);
            MPI_Send(&mySize,sizeof(int),MPI_INT,0,0,MPI_COMM_WORLD);
        }
        MPI_Finalize();
    }
    return 0;
}


执行编译命令:

mpicc prime_test.cpp -lm -o prime_test

注意-lm参数表示需要链接数学库,编译环境为mpich2-1.0.2p1 + ubuntu14.04 b4bit

然后执行:

mpiexec  -n 4 ./prime_test

运行截图如下:

技术分享

MPI实现并行计算统计数据

标签:mpi   并行计算   数据统计   

原文地址:http://blog.csdn.net/hzylmf/article/details/45130197

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!