資源簡介
陳國良院士編著的《并行算法實(shí)踐》一書的程序源碼,mpi實(shí)現(xiàn)。

代碼片段和文件信息
#include?
#include?
#include?
/*
??*?函數(shù)名:?main
??*?功能:???主函數(shù),實(shí)現(xiàn)枚舉排序
??*?輸入:argc為命令行參數(shù)個(gè)數(shù);
??*????????????argv為每個(gè)命令行參數(shù)組成的字符串?dāng)?shù)組
??*?輸出:返回1代表程序正常結(jié)束
*/
int?main(int?argcchar?*argv[])
{
int?DataSize?MyLength;??????????????/*DataSize:數(shù)組長度;MyLength:處理器分配到的數(shù)據(jù)長度*/
int?*data_in?*data_out;?????????????/*輸入和輸出數(shù)組指針*/
int?*rank;???????????????????????????/*秩數(shù)組*/
int?MyID?SumID;
int?i?j;?????????????????????????????????????
MPI_Status?status;???????????????????
MPI_Init(&argc&argv);????????????????/*MPI?初始化*/
MPI_Comm_rank(MPI_COMM_WORLD&MyID);??/*每個(gè)處理器確定各自ID*/
????????MPI_Comm_size(MPI_COMM_WORLD&SumID);?/*每個(gè)處理器確定總處理器個(gè)數(shù)*/
if(MyID==0)???????????????????????????/*主處理器*/
DataSize=GetDataSize();???????/*讀入待排序序列的長度*/
MPI_Bcast(&DataSize?1?MPI_INT?0?MPI_COMM_WORLD);
??????????????????????????????????????????????/*主處理器廣播待排序序列的長度*/
/*在各個(gè)處理器間劃分任務(wù)*/
MyLength=DataSize/SumID;??????????????
if(MyID==SumID-1)?????????????????????/*每個(gè)處理器確定各自要排序的序列長度*/
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));?/*主處理器分配排序后數(shù)組的空間*/
if(data_out==0)?ErrMsg(“Malloc?memory?error!“);
rank=(int?*)malloc(DataSize*sizeof(int));?????/*分配序號(hào)數(shù)組的空間*/
if(rank==0)?ErrMsg(“Malloc?memory?error!“);
}
else{
rank=(int?*)malloc(MyLength*sizeof(int));?????/*分配序號(hào)數(shù)組的空間*/
if(rank==0)?ErrMsg(“Malloc?memory?error!“);
}
if(MyID==0){
????????int?seed;
????????????????printf(“Please?Input?Seed:“);
????????scanf(“%d“&seed);???????????????????????/*獲得隨機(jī)數(shù)的種子*/
srand(seed);??????????????????????????
printf(“Random?Numbers:\n“);?
for(i=0;i data_in[i]=((int)rand())%10000;??/*生成隨機(jī)數(shù),并輸出*/
printf(“%10d?“data_in[i]);
}
printf(“\nOutput:“);
printf(“\n“);
}
/*向各個(gè)處理器播送待排序序列,對應(yīng)于算法13.2步驟(1)*/
MPI_Bcast(data_in?DataSize?MPI_INT?0?MPI_COMM_WORLD);
/*各個(gè)處理器分別計(jì)算所屬元素的秩,對應(yīng)于算法13.2步驟(2)*/
CountRank(data_inDataSizeMyLengthrankSumIDMyID);
/*從各個(gè)處理器收集已排序好的數(shù)據(jù),對應(yīng)于算法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);
/*根據(jù)所獲得的秩重新定位各個(gè)數(shù)據(jù),對應(yīng)于算法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;
}
/*
?*?函數(shù)名:?CountRank
?*?功能:?計(jì)算所屬部分?jǐn)?shù)據(jù)的秩
?*?輸入:?data:指向待排序序列的指針
?*????????DataSize為待排序序列的長度
??????????MyLength為該處理器要排序的序列的長度
??????????rank:指向秩數(shù)組的指針
??????????SumID:總處理器個(gè)數(shù)
??????????MyID:處理器ID
?*?輸出:返回1代表程序正常結(jié)束
?*/
int?CountRank(int?*dataint?DataSizeint?MyLengthint?*rankint?SumIDint?MyID)
{
int?i?j;
int?start?end;
start=DataSize/SumI
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????4192??2003-07-14?02:22??并行算法實(shí)踐-mpi源程序\13-1\rank_sort.c
????.CA....??????1017??2003-07-14?02:22??并行算法實(shí)踐-mpi源程序\13-1\readme.txt
????.CA....??????5537??2003-07-14?02:22??并行算法實(shí)踐-mpi源程序\13-2\quick_sort.c
????.CA....??????1493??2003-07-14?02:22??并行算法實(shí)踐-mpi源程序\13-2\readme.txt
????.CA....??????8585??2003-07-15?11:14??并行算法實(shí)踐-mpi源程序\13-3\psrs_sort.c
????.CA....??????1478??2003-07-14?02:22??并行算法實(shí)踐-mpi源程序\13-3\readme.txt
????.CA....???????819??2003-07-14?02:22??并行算法實(shí)踐-mpi源程序\14-1\gen_ped.c
????.CA....??????7746??2003-07-14?02:22??并行算法實(shí)踐-mpi源程序\14-1\kmp.c
????.CA....??????1135??2003-07-14?02:22??并行算法實(shí)踐-mpi源程序\14-1\readme.txt
????.CA....??????9405??2003-07-14?02:22??并行算法實(shí)踐-mpi源程序\14-2\rand_match.c
????.CA....???????669??2003-07-14?02:22??并行算法實(shí)踐-mpi源程序\14-2\readme.txt
????.CA....??????9025??2003-07-14?02:22??并行算法實(shí)踐-mpi源程序\14-3\app_match.c
????.CA....???????691??2003-07-14?02:22??并行算法實(shí)踐-mpi源程序\14-3\readme.txt
????.CA....??????5299??2003-07-14?02:22??并行算法實(shí)踐-mpi源程序\15-1\closure.c
????.CA....???????593??2003-07-14?02:22??并行算法實(shí)踐-mpi源程序\15-1\readme.txt
????.CA....??????4729??2003-07-15?11:30??并行算法實(shí)踐-mpi源程序\15-2\connect.c
????.CA....???????419??2003-07-14?02:22??并行算法實(shí)踐-mpi源程序\15-2\readme.txt
????.CA....?????30104??2003-07-14?02:22??并行算法實(shí)踐-mpi源程序\15-3\1.txt
????.CA....?????31650??2003-07-14?02:22??并行算法實(shí)踐-mpi源程序\15-3\1result.txt
????.CA....?????60104??2003-07-14?02:22??并行算法實(shí)踐-mpi源程序\15-3\2.txt
????.CA....?????31607??2003-07-14?02:22??并行算法實(shí)踐-mpi源程序\15-3\2result.txt
????.CA....?????90104??2003-07-14?02:22??并行算法實(shí)踐-mpi源程序\15-3\3.txt
????.CA....?????31583??2003-07-14?02:22??并行算法實(shí)踐-mpi源程序\15-3\3result.txt
????.CA....????120104??2003-07-14?02:22??并行算法實(shí)踐-mpi源程序\15-3\4.txt
????.CA....?????31587??2003-07-14?02:22??并行算法實(shí)踐-mpi源程序\15-3\4result.txt
????.CA....????150104??2003-07-14?02:22??并行算法實(shí)踐-mpi源程序\15-3\5.txt
????.CA....?????31593??2003-07-14?02:22??并行算法實(shí)踐-mpi源程序\15-3\5result.txt
????.CA....????180104??2003-07-14?02:22??并行算法實(shí)踐-mpi源程序\15-3\6.txt
????.CA....?????31561??2003-07-14?02:22??并行算法實(shí)踐-mpi源程序\15-3\6result.txt
????.CA....????210104??2003-07-14?02:22??并行算法實(shí)踐-mpi源程序\15-3\7.txt
............此處省略132個(gè)文件信息
評論
共有 條評論