资源简介
枚举排序是一种最简单的排序算法,该算法的具体思想是对每一个待排序的元素统计小于它的所有元素的个数,从而得到该元素最终处于序列钟的位置。对该算法的并行化是很简单的,假设对一个长为n的输入序列使用n个处理器进行排序,只需使每个处理器负责完成对其中一个元素的定位,然后将所有的定位信息集中到主进程钟,由主进程负责完成所有元素的最终排位。
代码片段和文件信息
#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 “da
- 上一篇:ZEMAX单透镜设计详细多图
- 下一篇:飞行管理问题的线性化模型
评论
共有 条评论