资源简介
陈国良院士编著的《并行算法实践》一书的程序源码,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安装包
- 下一篇:串口通信实验报告 含代码
相关资源
- scratch3.0 源程序(说相声)
- 改进的BP神经网络算法
- 光立方制作(原理图 源程序 LED搭接方
- FM1702调试源程序
- 西安电子科技大学 并行计算 霍红卫
- 智能寻迹机器人源程序及pcb图
- 单片机数字时钟包附电路图 源程序
- C 纸牌游戏——21点
- 16X16点阵程序(附仿真图和源程序)
- 基于ARM蓝牙传输源程序
- C读DXF源程序及AutoCAD中的DXF参考文件
- 路由选择算法源程序(最短路径算法
- 基于遗传算法的排课系统
- 数字电压表(源程序 protues仿真)
- 基于LabVIEW的并行数据采集系统设计
- 源程序量统计小工具
- delphi rfid 读写卡读卡器/写卡器源程序
- Exact Conditions of Blow-up and Global Existen
- doneex xcell compiler 2.1.2.9绿色汉化版(
- 基于FPGA的快速并行FFT及应用
- 全屏的俄罗斯方块源程序
- CC2530的分布式无线数据采集系统设计
- 获取外网IP地址小工具,VC 简单源程
- 山东大学编译原理PL/0语言 compiler实验
- 无刷电机控制源程序
- 达梦DM产品白皮书包含共享集群,交换
- 基于Spark的PSO并行计算
- 指纹识别源程序与指纹库
- 暗通道去霾处理源程序
- 四路抢答器源程序+Pro7仿真文件
评论
共有 条评论