• 大小: 828KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-03
  • 语言: 其他
  • 标签: 并行  mpi  源程序  

资源简介

陈国良院士编著的《并行算法实践》一书的程序源码,mpi实现。

资源截图

代码片段和文件信息

#include 
#include 
#include 

/*
  * 函数名: main
  * 功能:   主函数,实现枚举排序
  * 输入:argc为命令行参数个数;
  *            argv为每个命令行参数组成的字符串数组
  * 输出:返回1代表程序正常结束
*/
int main(int argcchar *argv[])
{
int DataSize MyLength;              /*DataSize:数组长度;MyLength:处理器分配到的数据长度*/
int *data_in *data_out;             /*输入和输出数组指针*/
int *rank;                           /*秩数组*/
int MyID SumID;
int i j;                                     

MPI_Status status;                   

MPI_Init(&argc&argv);                /*MPI 初始化*/
MPI_Comm_rank(MPI_COMM_WORLD&MyID);  /*每个处理器确定各自ID*/
        MPI_Comm_size(MPI_COMM_WORLD&SumID); /*每个处理器确定总处理器个数*/

if(MyID==0)                           /*主处理器*/
DataSize=GetDataSize();       /*读入待排序序列的长度*/

MPI_Bcast(&DataSize 1 MPI_INT 0 MPI_COMM_WORLD);
                                              /*主处理器广播待排序序列的长度*/
/*在各个处理器间划分任务*/
MyLength=DataSize/SumID;              
if(MyID==SumID-1)                     /*每个处理器确定各自要排序的序列长度*/
MyLength=DataSize-MyLength*(SumID-1);

data_in=(int *)malloc(DataSize*sizeof(int)); /*分配待排序序列的空间*/
if(data_in==0) ErrMsg(“Malloc memory error!“);


if(MyID==0){                     
data_out=(int *)malloc(DataSize*sizeof(int)); /*主处理器分配排序后数组的空间*/
if(data_out==0) ErrMsg(“Malloc memory error!“);

rank=(int *)malloc(DataSize*sizeof(int));     /*分配序号数组的空间*/
if(rank==0) ErrMsg(“Malloc memory error!“);
}
else{
rank=(int *)malloc(MyLength*sizeof(int));     /*分配序号数组的空间*/
if(rank==0) ErrMsg(“Malloc memory error!“);
}

if(MyID==0){
        int seed;
                printf(“Please Input Seed:“);
        scanf(“%d“&seed);                       /*获得随机数的种子*/
srand(seed);                          
printf(“Random Numbers:\n“); 
for(i=0;i data_in[i]=((int)rand())%10000;  /*生成随机数,并输出*/
printf(“%10d “data_in[i]);
}
printf(“\nOutput:“);
printf(“\n“);
}

/*向各个处理器播送待排序序列,对应于算法13.2步骤(1)*/
MPI_Bcast(data_in DataSize MPI_INT 0 MPI_COMM_WORLD);

/*各个处理器分别计算所属元素的秩,对应于算法13.2步骤(2)*/
CountRank(data_inDataSizeMyLengthrankSumIDMyID);

/*从各个处理器收集已排序好的数据,对应于算法13.2步骤(3)*/
if(MyID==0){
for(i=1;i if(i==SumID-1)
MPI_Recv(rank+MyLength*iDataSize-MyLength*(SumID-1)MPI_INTi0MPI_COMM_WORLD&status);
else
MPI_Recv(rank+MyLength*iMyLengthMPI_INTi0MPI_COMM_WORLD&status);
}
}
else
MPI_Send(rankMyLengthMPI_INT00MPI_COMM_WORLD);

/*根据所获得的秩重新定位各个数据,对应于算法13.2步骤(4)*/
if(MyID==0){
for(i=0;i data_out[rank[i]]=data_in[i];

for(i=0;i printf(“%10d “data_out[i]);
}
printf(“\n“);
}

MPI_Finalize();   
        return 1;
}
/*
 * 函数名: CountRank
 * 功能: 计算所属部分数据的秩
 * 输入: data:指向待排序序列的指针
 *        DataSize为待排序序列的长度
          MyLength为该处理器要排序的序列的长度
          rank:指向秩数组的指针
          SumID:总处理器个数
          MyID:处理器ID
 * 输出:返回1代表程序正常结束
 */
int CountRank(int *dataint DataSizeint MyLengthint *rankint SumIDint MyID)
{
int i j;
int start end;

start=DataSize/SumI

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4192  2003-07-14 02:22  并行算法实践-mpi源程序\13-1\rank_sort.c

    .CA....      1017  2003-07-14 02:22  并行算法实践-mpi源程序\13-1\readme.txt

    .CA....      5537  2003-07-14 02:22  并行算法实践-mpi源程序\13-2\quick_sort.c

    .CA....      1493  2003-07-14 02:22  并行算法实践-mpi源程序\13-2\readme.txt

    .CA....      8585  2003-07-15 11:14  并行算法实践-mpi源程序\13-3\psrs_sort.c

    .CA....      1478  2003-07-14 02:22  并行算法实践-mpi源程序\13-3\readme.txt

    .CA....       819  2003-07-14 02:22  并行算法实践-mpi源程序\14-1\gen_ped.c

    .CA....      7746  2003-07-14 02:22  并行算法实践-mpi源程序\14-1\kmp.c

    .CA....      1135  2003-07-14 02:22  并行算法实践-mpi源程序\14-1\readme.txt

    .CA....      9405  2003-07-14 02:22  并行算法实践-mpi源程序\14-2\rand_match.c

    .CA....       669  2003-07-14 02:22  并行算法实践-mpi源程序\14-2\readme.txt

    .CA....      9025  2003-07-14 02:22  并行算法实践-mpi源程序\14-3\app_match.c

    .CA....       691  2003-07-14 02:22  并行算法实践-mpi源程序\14-3\readme.txt

    .CA....      5299  2003-07-14 02:22  并行算法实践-mpi源程序\15-1\closure.c

    .CA....       593  2003-07-14 02:22  并行算法实践-mpi源程序\15-1\readme.txt

    .CA....      4729  2003-07-15 11:30  并行算法实践-mpi源程序\15-2\connect.c

    .CA....       419  2003-07-14 02:22  并行算法实践-mpi源程序\15-2\readme.txt

    .CA....     30104  2003-07-14 02:22  并行算法实践-mpi源程序\15-3\1.txt

    .CA....     31650  2003-07-14 02:22  并行算法实践-mpi源程序\15-3\1result.txt

    .CA....     60104  2003-07-14 02:22  并行算法实践-mpi源程序\15-3\2.txt

    .CA....     31607  2003-07-14 02:22  并行算法实践-mpi源程序\15-3\2result.txt

    .CA....     90104  2003-07-14 02:22  并行算法实践-mpi源程序\15-3\3.txt

    .CA....     31583  2003-07-14 02:22  并行算法实践-mpi源程序\15-3\3result.txt

    .CA....    120104  2003-07-14 02:22  并行算法实践-mpi源程序\15-3\4.txt

    .CA....     31587  2003-07-14 02:22  并行算法实践-mpi源程序\15-3\4result.txt

    .CA....    150104  2003-07-14 02:22  并行算法实践-mpi源程序\15-3\5.txt

    .CA....     31593  2003-07-14 02:22  并行算法实践-mpi源程序\15-3\5result.txt

    .CA....    180104  2003-07-14 02:22  并行算法实践-mpi源程序\15-3\6.txt

    .CA....     31561  2003-07-14 02:22  并行算法实践-mpi源程序\15-3\6result.txt

    .CA....    210104  2003-07-14 02:22  并行算法实践-mpi源程序\15-3\7.txt

............此处省略132个文件信息

评论

共有 条评论