当今许多尖端技术的解决都离不开并行处理, 许多国家都将其列入关键技术. 并行机的发展和智能计算等实际应用的需要共同促进了并行算法的研究[1,2]. 算法是求解问题的步骤和方法[3]. 简单的讲, 并行算法是用多台处理器联合求解问题的方法和步骤[4,5]. 并行算法不能仅通过时间复杂度[6]来进行评价, 因为人们在对计算速度的渴求的同时, 对于并行处理所需要的处理器数量急剧增长的问题也开始关心. 所以, 评判并行算法综合性能的指标“成本”显得格外的重要. 并行算法的成本是指并行算法在并行机各处理器上运行时间总和
本文以最大值查找算法为基础, 探讨了3种并行化查找最大值的方法(平衡树方法、双对数深度树方法、快速查找法), 进而提出提出了一种比平衡树算法, 快速查找法, 双对数深度树方法并行成本(Cost)更优的基于数据划分方法的最大值查找并行算法. 该方法通过减少处理器使用的数量, 维持处理问题时间与平衡树方法一致, 以此取得相比平衡树方法, 双对数深度树方法, 快速查找法在并行成本上表现更优的算法. 为之后的相关并行算法的优化提供一个改进的方向, 为大数据处理中查找最大值提供了一个可行的办法.
本文并行算法研究是在PRAM[8,9]模型下进行的, 但微型计算机CPU架构中的SIMD并行机制, 由于实现指令的复杂性, 几乎没有编译程序将高级语言设计的程序优化到SIMD指令级别[10]. 因此本文通过模拟仿真实验对几种并行查找算法的实际运行时间进行对比.
1 并行查找最大值的算法 1.1 平衡树查找方法 1.1.1 算法原理利用平衡二叉树[11–13](Balanced Binary Tree)抽象出并行求解最大值的方法, 树的叶节点是输入元素集合, 树的非叶节点用于比较操作, 树的高度为H. 在树的同一深度上内节点并行计算. 树中的节点都包含两个子节点, 所以每个节点只需要一个处理器就可以在常数时间内做出比较操作, 同一深度并行计算需要的处理器数目与内节点数相同, 这样仅需要O(H)的时间就可以完成最大值查找. 需要处理器数目为2H–1. 如图1.
下面是平衡树方法的伪代码[14]:
输入: n = 2m个数存于数组A(n:2n–1)中.
输出: 最大值, 位于A(1).
Balance(Element A[])
{
for k=m–1 to 0 do
for j=2k to 2k+1–1 par-do
A[j]=max{A[2j], A[2j+1]}
}
1.1.2 算法分析
平衡二叉树算法的运行时间为
通过比较手段快速获取集合中的最大值[17], 每次操作就需要确定更多元素之间的大小关系, 也就是每次操作需要更多元素进行比较. 快速并行算法利用一个n*n的逻辑二维表来存储某一个元素与集合中其余元素的大小关系(0表示小于, 1表示不小于), 如表1. 当某一行或者某一列元素关系都为“大于”时, 该行(列)代表的元素为最大值.
下面是快速并行算法的伪代码[14]:
输入: 存有n个不同元素的数组A.
输出: 布尔数组M, 当且仅当A(i)=max{A}时, M(i)=1.
Quick(Element A[])
{
(1) for 1<=i, j<=n par-do
if A[i] >= A[j]
B[i][j] = 1
else
B[i][j] = 0
(2) for 1<=i<=n par-do
M[i]=B[i][1]∩B[i][2]∩…∩B[i][n]
}
该算法要求步骤(1)同时读, 步骤(2)要求同时写.
1.2.2 算法分析算法执行时间为
所有输入数据作为叶节点, 节点u的子节点数为
下面是双对数深度树方法的伪代码:
输入:n =
输出: 布尔数组M, 当且仅当A(i)=max{A}时, M(i)=1.
DoubleTree(Element A[])
{
(1) for j=1 to n/2 do
A[j]=max{A[2j–1], A[2j]}
(2) for i=k–1 to 0 do
for m=0 to m=
Quick(A[m*
}
1.3.2 算法分析算法执行时间
基于数据划分的最大值查找算法(以下简称为“数据划分方法”)针对平衡树算法处理器工作分配不均导致工作效率低下, 快速查找算法对于处理器数量需求过大, 以及双对数深度树方法难以实现的问题进行了改进. 汲取了双对数深度树中处理器工作饱满, 查找时间快, 快速查找算法逻辑表比较数据法的优点. 提出了一种比平衡树算法, 快速查找法, 双对数深度树方法并行成本Cost更优的基于数据划分方法的最大值查找并行算法, 通过降低处理器(P)数量, 保证处理时间(Tp)达到O(logn)量级, 来达到降低并行成本的目的.
数据划分方法使用比第一节中3种并行方法更少的处理器, 保证处理速度达到O(logn)级, 就必须充分利用每个处理器的工作效率, 从而保证数据划分方法不会因为处理器数目的减少, 而使得问题处理速度远远慢于平衡树方法. 研究过程中发现利用逻辑表将数据进行合理的划分为多个组, 可以提升每个处理器的效率, 且能快速降低待查找数据集.
最终实现了一种比平衡树算法, 快速查找法, 双对数深度树方法并行成本额Cost更优的高度可行的基于数据划分查找最大值的并行算法.
2.1 算法原理从逻辑上将集合中的数据进行分组, 假设共N个元素, 分为logN组, 每组N/logN个元素, 共N/logN个处理器.
Step1. 每组都采取两两元素比较的方式, 使每组元素个数都减少为N/(2logN)个元素. 由于每组需要N/(2logN)个处理器, 所以每两组可以并行计算, 共需要(logN)/2步完成所有操作.
Step2. 此时每组所剩元素为N/(2logN)个, 继续采用两两比较的方式, 使每组元素个数都减少为N/(4logN). 由于每组需要N/(4logN)个处理器, 所以每四组可以并行计算, 共需要(logN)/4步完成所有操作.
Step3. 此时每组所剩元素为N/(4logN)个, 继续采用两两比较的方式, 使每组元素个数都减少为N/(8logN). 由于每组需要N/(8logN)个处理器, 所以每八组可以并行计算, 共需要(logN)/8步完成所有操作.
依次类推, 最终的目的是使得每组剩余元素个数为1. 而此时需要log(N/2logN)步完成. 当每组只剩1个元素的时候, 就可以采用平衡树或双对数深度树进行求解最终的最大值.
下面是基于数据划分算法的伪代码:
输入:n个数存放于A[logn][logn]数组中
输出: 最大值A[1][1]
Data_Partition(Element A[][])
{
fori = 1 to log(n/(2logn))
for m=1 to logn par-do
blance(A[m][1:(logn)/i])
Blance(A[1:logn][1])
}
2.2 算法分析求解组内最大值共需要
Pan[19]和Pavel[20]提出了并行计算模型具备可重配置流水线总线的线性阵列模型(Linear Arrays with a Reconfigurable Pipelined Bus System, LARPBS), 并且在该模型上实现了平衡树与双对数深度树查找的并行算法[21]. 由于实验条件所限, 无法实现真正搭建并行机和LARPBS. 鉴于此种情况, 本文采用多核并行计算进行仿真模拟实验. 深度学习[22]中神经网络利用Tensorflow学习库来构建计算图, 通过GPU进行计算图中部分节点并行计算, 从而实现并行加速效果. 因此本文也使用基于TensorFlow的GPU[23,24]处理框架来进行仿真模拟实验.
3.1 实验原理利用TensorFlow构建各个并行查找算法的计算图, 如图3–图6(为了显示方便, 图中只显示一定数据量下的计算图), 将计算图中的每个节点视为并行机中的一个处理器, 计算图中每个节点的连线(数据传递)代表处理器之间的通信. 通过TensorFlow自带的GPU加速来实现同计算层次中节点的并行计算, 以此来仿真并行机运行查找算法的过程. 实验测试数据共分为5组, 每组数据通过随机数生成, 每组数据个数依次为512, 1024, 2048, 4096, 8192. (为了简化程序将数据量都设置为2n). 每组数据测试1000次取运行时间的平均值, 作为最后实验分析数据.
3.2 实验环境
操作系统: Windows7
编程语言: Python3.6
机器学习库: Tensorflow-GPU 1.12.0
处理器: CPU i7-4790 3.6 GHz
加速器: GPU GTX1070
编辑器: Pycharm Community Edition 2017.1.2
3.3 实验结果与分析
从数据划分方法运行时间(见表2, 图7)来看, 数据划分方法随着测试数据量的增加其实际运行时间的增长符合理论时间复杂度的增长规律, 说明仿真模拟实验从运行时间结果上来看是满足实验需要的, 实验数据具有一定的可参考性. 表2中有一个现象, 快速查找算法理论时间复杂度是
从运行所需的处理器数量来看(见表3, 图8), 随着数据量的增长, 快速查找方法所需要的处理器数量爆炸增长, 因而在当前坐标轴下已经无法看到快速查找方法的曲线, 而数据划分方法所需要的处理器数量远低于平衡树查找法和双对数深度树查找法, 并且随着数据量的增多, 数据划分方法对处理器数量的需求相较其他查找算法优势越大. 达到了数据划分方法最初对其所需处理器数量的要求.
从运行成本来看(见表4, 图9), 由于快速查找方法并行成本过高, 因而在当前坐标轴下已经无法看到快速查找方法的曲线. 数据划分方法的综合成本相比于其他最大值查找的并行算法是更优的, 说明数据划分方法是有效的, 达到了研究目的.
4 结论与展望
通过对比实验, 数据划分方法的并行成本(Cost)相较平衡树方法, 双对数深度树方法, 快速查找法是更优的, 说明数据划分方法到达了最初的研究目的. 数据划分方法使用更少处理器, 有效降低了所需处理器数量, 保证了问题处理时间达到并行处理的目的, 使其执行时间与平衡树方法一致的改进算法, 略低于双对数深度树方法. 最终减少并行算法的成本, 节约了资源.
随着并行技术越来越多的应用到学术研究, 生产生活等方面, 人们对于算法运行产生的并行成本的要求会更高. 希望可以保证处理速度的同时, 降低并行算法的成本. 本文最大值查找算法的改进, 就是在此背景下进行的. 并行算法众多, 文章通过比较具有代表性的最大值查找算法进行改进. 为此后类似并行算法降低并行成本提供一个方向. 随着更多学者和专家的投入, 相信会有更多具有高额成本的并行算法在快速解决问题的同时, 有效减低并行技术产生巨额的成本.
[1] |
王青云, 罗泽. 基于LOD的海量地形数据并行渲染技术. 计算机系统应用, 2017, 26(12): 200-206. DOI:10.15888/j.cnki.csa.006113 |
[2] |
李晓梅. 并行算法的发展及其前沿研究课题. 中国科学基金, 1995(3): 13-18. |
[3] |
严蔚敏, 李冬梅, 吴伟民. 数据结构(C语言版). 计算机教育, 2012(12): 62. |
[4] |
罗贵章, 陈忠伟. 并行算法综述. 计算机光盘软件与应用, 2013(15): 51-52. |
[5] |
陈国良, 孙广中, 徐云, 等. 并行算法研究方法学. 计算机学报, 2008, 31(9): 1493-1502. DOI:10.3321/j.issn:0254-4164.2008.09.002 |
[6] |
Shiloach Y, Vishkin U. Finding the maximum, merging, and sorting in a parallel computation model. Journal of Algorithms, 1981, 2(1): 88-102. DOI:10.1016/0196-6774(81)90010-9 |
[7] |
胡峰, 胡保生. 并行计算技术与并行算法综述. 电脑与信息技术, 1999(5): 47-59. |
[8] |
Acharya HB. Parallel processing of packets with a PRAM. Proceedings of the 19th International Conference on Distributed Computing and Networking. Varanasi, India. 2018. 45.
|
[9] |
Forsell M, Leppänen V. An extended PRAM-NUMA model of computation for TCF programming. Proceedings of the IEEE 26th International Parallel and Distributed Processing Symposium Workshops & Phd Forum. Shanghai, China. 2012. 786–793.
|
[10] |
明玉瑞, 李思泽. 基于SIMD机制的并行排序算法. 计算机系统应用, 2009, 18(11): 87-90. DOI:10.3969/j.issn.1003-3254.2009.11.022 |
[11] |
赵军, 张东梅. 平衡二叉树. 电脑学习, 2007(2): 33-34. DOI:10.3969/j.issn.2095-2163.2007.02.018 |
[12] |
陈海涛, 李宗惠. 平衡二叉树的失衡调整方法探讨. 中国科教创新导刊, 2010(34): 146, 148. |
[13] |
Ha PH, Anshus OJ, Umar I. Efficient concurrent search trees using portable fine-grained locality. IEEE Transactions on Parallel and Distributed Systems, 2019, 30(7): 1580-1595. DOI:10.1109/TPDS.71 |
[14] |
陈国良. 并行算法的设计与分析. 3版. 北京: 高等教育出版社, 2009. 63–64, 78–80.
|
[15] |
Huang D, Han DZ, Wang J, et al. Achieving load balance for parallel data access on distributed file systems. IEEE Transactions on Computers, 2018, 67(3): 388-402. DOI:10.1109/TC.2017.2749229 |
[16] |
Jackson A, Campobasso MS, Drofelnik J. Load balance and parallel I/O: Optimising COSA for large simulations. Computers & Fluids, 2018, 173: 206-215. |
[17] |
Berkman O, Matias Y, Vishkin U. Randomized range-maxima in nearly-constant parallel time. Computational Complexity, 1992, 2(4): 350-373. DOI:10.1007/BF01200429 |
[18] |
Olariu S, Overstreet M, Wen ZF. Reconstructing a binary tree from its traversals in doubly logarithmic CREW time. Journal of Parallel and Distributed Computing, 1995, 27(1): 100-105. DOI:10.1006/jpdc.1995.1075 |
[19] |
Pan Y, Hamdi M. Quicksort on a linear array with a reconfigurable pipelined bus system. Proceedings of the 2nd International Symposium on Parallel Architectures, Algorithms, and Networks. Beijing, China. 1996. 313–319.
|
[20] |
Pavel S, Akl SG. Efficient algorithms for the hough transform on arrays with reconfigurable optical buses. Proceedings of 1996 International Conference on Parallel Processing. Honolulu, Hawaii, USA. 1996. 697–701.
|
[21] |
李庆华, 蒋廷耀. 基于LARPBS模型的最大值查找算法. 计算机科学, 2004, 31(3): 183-185. DOI:10.3969/j.issn.1002-137X.2004.03.052 |
[22] |
陈旭, 孟朝晖. 基于深度学习的目标视频跟踪算法综述. 计算机系统应用, 2019, 28(1): 1-9. DOI:10.15888/j.cnki.csa.006720 |
[23] |
梁娟娟, 任开新, 郭利财, 等. GPU上的矩阵乘法的设计与实现. 计算机系统应用, 2011, 20(1): 178-181, 149. DOI:10.3969/j.issn.1003-3254.2011.01.038 |
[24] |
Campos V, Sastre F, Yagües M, et al. Scaling a convolutional neural network for classification of adjective noun pairs with TensorFlow on GPU clusters. Proceedings of the 17th IEEE/ACM International Symposium on Cluster, Cloud and Grid Computing. Madrid, Spain. 2017. 677–682.
|