资源简介
陈国良院士编著的《并行算法实践》一书的程序源码,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个文件信息
- 上一篇:stata15.1安装包
- 下一篇:串口通信实验报告 含代码
相关资源
- Rosenbrock函数源程序
- 数字钟仿真+源程序.zip
- 编译原理讨论课PPTpl0编译器源程序讲
- KNN mapreduce实现
- 消消乐自动求解
- OpenMP程序
- 万能遥控器源程序
- 虚拟现实源程序代码虚拟现实代码
- CompilerTool源码(Delphi).7z
- gaot遗传算法优化工具箱介绍及源程序
- MPI并行遗传算法
- 书中源程序代码.rar
- 遗传算法的并行实现
- Delta机器人RBE595高级并行机器人项目代
- 并行遗传算法的程序源代码
- 并行计算——结构·算法·编程习题答
- 基于DS18B20的数字温度计设计原理图
- 基于DSP28335生成spwm源程序 三相120度移
- 悬挂运动控制系统详细源程序
- Hadoop倒排索引程序
- 基于MPI得并行矩阵乘法 Cannon算法实现
- 并行干扰抵消器的设计与仿真
- Verilog数字系统设计教程夏宇闻例题源
- 数电实验源程序gal20v8,串行数字密码
- 模糊神经网络算法源程序集合
- 学生综合测评管理系统源程序
- 多加热炉炉温检测课程设计报告
- Verilog HDL 数字跑表
- 单片机数字电压表 包含电路图 ,源程
-
Estimation of Dependences ba
sed on Empirica
评论
共有 条评论