正在加载图片...
if(y=y1)k&&(xl-x)°(X-x2)>=0) MPI Bcast( &x, 1, MPI DOUBLE,0 result=100 MPI COMM WORLD MPI Bcast(&y, 1, MPI DOUBLE,O, MPI COMM WORLD) return result, MPl Bcast(temp, n, MPI DOUBLE,O, MPI COMM WORLD) MPI Bcast(temp, n, MPI DOUBLE, 0, main(int argc, char* argv) MPI COMM WORLD) I 1, MPI Barrier(MPI COMM WORLD) MPI Init( &argc, &argv); /每一个处理器处理 n/group size条边上的情 MPI Comm rank(MPI COMM WORLD, 况并求和,对应于算法172步骤(3)* for(i0 i<n/group size+1; i++) MPI Comm size(MPI COMM WORLd &group size), mys+=cal inter(my rank, i, x, y) 各处理器计数器初始化,对应于 算法17.2步骤(2)* MPI Barrier(MPI COMM WORLD) /把mys的值规约到s,对应于 /主处理器读入多边形顶点和要判断的点 算法172步骤(4)和(5) 的坐标 MPI Reduce( &mys, &s, 1, MPI INT, MPI SUM my rank==0) O, MPI COMM WORLD); printf("请输入点的个数") γ根据s值确定输出结果,对应于 算法172步骤(6)° printf"请输入各点的坐标n") if( my rank==0) for(F=0;<n;i++) printf("%d: , 1), printf("vertex p is in polygon); scanf("%lf", &temp: scanf("%lf", &temp]); if(s%2==1) printf("请输入要判断点的坐标n"), polygonin"); scanf("%f %lf, &x, &y ) printf("vertex p is out of MPI Barrier(MPI COMM WORLD /把多边形的顶点数、顶点坐标与要判别的点} 坐标播送给所有进程 MPI Bcast(&n, 1, MPI INTO MPI COMM WORLD)if((y==y1)&&((x1-x)*(x-x2)>=0)) result=100; } } return result; } main(int argc,char* argv[]) { int i; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); MPI_Comm_size(MPI_COMM_WORLD, &group_size); /*各处理器计数器初始化,对应于 算法 17.2 步骤(2)*/ mys=0; /*主处理器读入多边形顶点和要判断的点 的坐标*/ if(my_rank==0) { printf("请输入点的个数:"); scanf("%d",&n); printf("请输入各点的坐标\n"); for(i=0;i<n;i++) { printf("%d:",i); scanf("%lf",&xtemp[i]); scanf("%lf",&ytemp[i]); } printf("请输入要判断点的坐标\n"); scanf("%lf %lf",&x,&y); } MPI_Barrier(MPI_COMM_WORLD); /*把多边形的顶点数、顶点坐标与要判别的点 的坐标播送给所有进程*/ MPI_Bcast(&n,1,MPI_INT,0, MPI_COMM_WORLD); MPI_Bcast(&x,1,MPI_DOUBLE,0, MPI_COMM_WORLD); MPI_Bcast(&y,1,MPI_DOUBLE,0, MPI_COMM_WORLD); MPI_Bcast(xtemp,n,MPI_DOUBLE,0, MPI_COMM_WORLD); MPI_Bcast(ytemp,n,MPI_DOUBLE,0, MPI_COMM_WORLD); MPI_Barrier(MPI_COMM_WORLD); /*每一个处理器处理 n/group_size 条边上的情 况并求和,对应于算法 17.2 步骤(3)*/ for(i=0;i<n/group_size+1;i++) { mys+=cal_inter(my_rank,i,x,y); } MPI_Barrier(MPI_COMM_WORLD); /*把 mys 的值规约到 s,对应于 算法 17.2 步骤(4)和(5)*/ MPI_Reduce(&mys,&s,1,MPI_INT,MPI_SUM, 0,MPI_COMM_WORLD); /*根据 s 值确定输出结果,对应于 算法 17.2 步骤(6)*/ if(my_rank==0) { if(s>=100) printf("vertex p is in polygon\n"); else if(s%2==1) printf("vertex p is in polygon\n"); else printf("vertex p is out of polygon\n"); } MPI_Finalize(); }
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有