Page 78 - 《软件学报》2021年第8期
P. 78

2360                                   Journal of Software  软件学报 Vol.32, No.8,  August 2021

                 5.4   凸包求解
                    在一个实数向量空间 V 中,对于给定点集 X,所有包含 X 的凸集的交集 S 被称为 X 的凸包.本文只讨论二维
                 空间中点集的情况.图 7 中红色连线确定了一个含有 12 个点的平面点集形成的凸包.图 7(a)~图 7(f)分步展示了
                 该凸包的快速求解算法的递归步骤:首先确定含有最小横坐标值和最大横坐标值的点 a 和 b 并进入递归步骤:
                 以有向线段 ab 为基准,分别在其两侧进一步确定凸包中的其他点.以 ab 上侧为例,点 c 为距离 ab 最远点,将 c
                 加入凸包并由此形成有向线段 ac 和 cb.之后分别以 ac 和 cb 为基准线段,分别在它们外侧进一步寻找凸包中
                 的点.






























                                     Fig.7    Demonstration of the recursive convex-hull algorithm
                                              图 7   凸包问题的递归求解算法示意

                    给定一条基准线段和对应点集,将源任务定义为求在基准线外侧距该基准线段距离最远的点.以源任务
                 为基础使用 SWAN 可轻易实现并行的凸包求解程序(附录 2).但由图 7 可以看到,在算法的初始阶段,由于有向
                 基准线段的数量较少导致了程序的并行度很低.但在该阶段,少量的线程需要计算大量的点到基准线段的距
                 离,因此形成了程序的性能瓶颈.针对这种情况,我们使用 SWAN 的任务挂起和上下文保存功能,使程序在初
                 始阶段就派生诸多距离计算子任务以使更多的处理核心参与计算.在所有距离计算子任务结束后,由源任务
                 进行归约产生目标点.如图 8 所示,在初始阶段提高并发度后,凸包求解程序的性能最终达到 MPE 串行版本性
                 能的 23.6 倍.
   73   74   75   76   77   78   79   80   81   82   83