正在加载图片...
MPI Comm rank(MPI COMM WORLD index =(int ")malloc(sizeof(int)* &MyID); 2"SumID) Plus Num=60- if (index=0)error("malloc memory for DataS ize baseNum' Plus num index error! " if(MyID==0) The dataS ize MPI Barrier( MPI COMM WORLD) Psrs Maino mylength= DataSize/SumID and( Myl if (MyID==0) printf("n") printf("This is node %d n' printf("On node %d the input data is n", MyID); MPI Finalize for (FO; I<mylength, i++ arr[=(int)rando Psrs Maino printf("%d " arr) Int n 每个处理器将自己的nP个数据用串行快速 FILE* fp 排序( Quicksort),得到一个排好序的序 列,对应于算法13.5步骤(1) MPI Status status[32*32 2] MPI Barrier( MPI COMM WORLD) MPI Request request[32*32 21; MPI Barrier( MPI COMM WORLD) IPI Comm rank(MPI COMM WORLD /每个处理器从排好序的序列中选取第w,2 MPI Comm size(MPI COMM WORLD 3w,…,(P-1)w个共P-1个数据作为代 表元素,其中w=n/PP,对应于算法13.5 Spt= SumlD-1: 步骤(2) if (SumID>1 初始化参数考 arr=(int*)malloc(2*DataSize*sizeof(int)) MPI Barrier(MPI COMM WORLD), if(arr==0) =(int) (mylength/(Spt+ 1)); merror("malloc memory for arr error! " for(F0; i<Spt: i++) arrl =&arr DataSize] empl[=arr[(i+1)*n-11 MPI Barrier(MPI COMM WORLD) templ =(int*)malloc(sizeof(int)* if (MyID==0) SumID'Spt); (templ=0)error("malloc memory for 每个处理器将选好的代表元素送 到处理器P0中,对应于算法 66 MPI_Comm_rank(MPI_COMM_WORLD, &MyID); PlusNum=60; DataSize = BaseNum*PlusNum; if (MyID==0) printf("The DataSize is : %lu\n",PlusNum); Psrs_Main(); if (MyID==0) printf("\n"); MPI_Finalize(); } Psrs_Main( ) { int i,j; int MyID,SumID; int n,c1,c2,c3,c4,k,l; FILE * fp; int ready; MPI_Status status[32*32*2]; MPI_Request request[32*32*2]; MPI_Comm_rank(MPI_COMM_WORLD, &MyID); MPI_Comm_size(MPI_COMM_WORLD, &SumID); Spt = SumID-1; /*初始化参数*/ arr = (int *)malloc(2*DataSize*sizeof(int)); if (arr==0) merror("malloc memory for arr error!"); arr1 = &arr[DataSize]; if (SumID>1) { temp1 = (int *)malloc(sizeof(int)* SumID*Spt); if (temp1==0) merror("malloc memory for temp1 error!"); index = (int *)malloc(sizeof(int)* 2*SumID); if (index==0) merror("malloc memory for index error!"); } MPI_Barrier( MPI_COMM_WORLD); mylength = DataSize / SumID; srand(MyID); printf("This is node %d \n",MyID); printf("On node %d the input data is:\n",MyID); for (i=0;i<mylength;i++) { arr[i] = (int)rand(); printf("%d : ",arr[i]); } printf("\n"); /*每个处理器将自己的 n/P 个数据用串行快速 排序(Quicksort),得到一个排好序的序 列,对应于算法 13.5 步骤(1)*/ MPI_Barrier( MPI_COMM_WORLD); quicksort(arr,0,mylength - 1); MPI_Barrier( MPI_COMM_WORLD); /*每个处理器从排好序的序列中选取第 w,2w, 3w,…,(P-1)w 个共 P-1 个数据作为代 表元素,其中 w=n/P*P,对应于算法 13.5 步骤(2)*/ if (SumID>1) { MPI_Barrier(MPI_COMM_WORLD); n = (int)(mylength/(Spt+1)); for (i=0;i<Spt;i++) temp1[i] = arr[(i+1)*n-1]; MPI_Barrier(MPI_COMM_WORLD); if (MyID==0) { /*每个处理器将选好的代表元素送 到处理器 P0 中,对应于算法
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有