《基于线程构造块的超大规模矩阵多核并行克劳特分解方法.pdf》由会员分享,可在线阅读,更多相关《基于线程构造块的超大规模矩阵多核并行克劳特分解方法.pdf(10页完整版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 102486727 A (43)申请公布日 2012.06.06 C N 1 0 2 4 8 6 7 2 7 A *CN102486727A* (21)申请号 201010571856.6 (22)申请日 2010.12.03 G06F 9/44(2006.01) G06F 17/16(2006.01) (71)申请人同济大学 地址 200092 上海市杨浦区四平路1239号 (72)发明人马健 张丽岩 李克平 孙剑 (74)专利代理机构上海科盛知识产权代理有限 公司 31225 代理人赵继明 (54) 发明名称 基于线程构造块的超大规模矩阵多核并行克 劳特分解方法 。
2、(57) 摘要 本发明涉及基于线程构造块的超大规模矩 阵多核并行克劳特分解方法,该分解方法包括以 下步骤:1)将传统Crout方法中可以并行计算的 部分改写为符合TBB需要的规范类;2)设置问 题初始值;3)进入Crout方法的行循环;4)调用 parallel_reduce并行模块类,将每一行的最大 主元保存在临时向量中,同时计算并保存比例因 子;5)进入Crout方法的列循环;6)确定新的主 元及比例因子,修改TINY,每一行除以主元;8)完 成超大规模矩阵分解,得到因部分主元法而改变 了的行列排列次序。与现有技术相比,本发明具有 能够大幅度提高矩阵LU分解的运行效率、且能跨 平台、可扩展。
3、、应用广泛等优点。 (51)Int.Cl. 权利要求书1页 说明书6页 附图2页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书 1 页 说明书 6 页 附图 2 页 1/1页 2 1.基于线程构造块的超大规模矩阵多核并行克劳特分解方法,其特征在于,该分解方 法包括以下步骤: 1)线程构造块(TBB)并行计算平台的安装与环境设置; 2)分析并抽取传统克劳特(Crout)方法中可以并行计算的部分,利用TBB并行模板类 改写为符合TBB需要的规范类; 3)设置问题初始值; 4)进入Crout方法的行循环; 5)调用parallel_reduce并行模块类,将每一行的最大主元。
4、保存在临时向量中,同时 计算并保存比例因子; 6)进入Crout方法的列循环; 7)确定新的主元及比例因子,修改TINY,每一行除以主元,判断列循环是否结束,如果 判断为否则转到步骤6),判断行循环是否结束,如果判断为否则转到步骤4); 8)运行结束,完成超大规模矩阵分解,得到因部分主元法而改变了的行列排列次序。 2.根据权利要求1所述的基于线程构造块的超大规模矩阵多核并行克劳特分解方法, 其特征在于,所述的步骤3)中的问题初始值包括矩阵的规模、矩阵的行数、列数,输入矩 阵。 权 利 要 求 书CN 102486727 A 1/6页 3 基于线程构造块的超大规模矩阵多核并行克劳特分解方法 技术。
5、领域 0001 本发明涉及一种超大规模矩阵分解方法,尤其是涉及基于线程构造块的超大规模 矩阵多核并行克劳特(Crout)分解方法。 背景技术 0002 Intel刚刚推广的线程构建模块(Threading Building Blocks,TBB)是基于C+ 的多线程并行编程模型,用于支持多核处理器的并行计算,具有成熟的数据结构,支持可扩 展的线程嵌套并行,支持可扩展内存分配、支持多种系统平台以及多种编译器支持。TBB的 编程模式是使用模板作为并行迭代模型。这使得程序员很方便的处理同步、负载平衡、缓存 优化等问题,而能轻松地实现自动调度的并行程序,充分利用CPU的多核运算能力及其他 系统资源。T。
6、BB提升了程序的伸缩性及可扩展性,并且完全支持嵌套的并行编程。程序员可 以创建自己的并行组件,以构建大型的并行程序。同时由于TBB是芯片制造商Intel开发 的,对于多核平台有着更好的支持。 0003 TBB是一个开源的C+模板库,它可将线程抽象成任务,然后创建可靠、可移植且 可扩展的并行应用程序。使用TBB编写基于任务的并行应用程序,有助于提高跨多核平台 上运行的可扩展软件的开发效率。通本地线程和线程封装器等其它线程化方法相比,TBB是 执行并行应用程序最高效的方式,它能够充分利用多核平台的并行性能。TBB有以下三个显 著的优点:1)TBB对线程进行抽象,将其提高到任务的高度,简化了并行应用。
7、程序的开发工 作;2)基于TBB开发的应用程序的性能可以随着处理器内核数量的增加而自动提升;3)TBB 能够减少死锁和资源竞争等常见线程错误,提供了一个跨平台、可扩展的并行解决方案。 0004 目前,在理论研究和实际应用中,矩阵求逆都有广泛的应用,如求解线性方程组、 动态规划、计算机图形处理、控制工程等等。目前,矩阵求逆的方法主要有以下几种:(1)伴 随矩阵法;(2)初等变换法;(3)高斯-约当消去法;(4)三角分解法。下面分别加以介绍。 0005 (1)伴随矩阵法。利用矩阵的伴随矩阵及矩阵的行列式来求得矩阵的逆矩阵。此 方法一般适用于维数较小的矩阵 0006 (2)初等变换法。原矩阵和单位矩。
8、阵同时进行初等行(或列)变换,当原矩阵变成 单位矩阵的时候,单位矩阵就变成了原矩阵的逆矩阵。 0007 (3)高斯-约当消去法:又称高斯消去法、高斯消元法,实际上就是我们俗称的加 减消元法。数学上,高斯-约当消去法,由高斯和约当得名,它是线性代数中的一个算法,用 于求解线性方程组的解,求解矩阵的秩,以及求解可逆方矩阵的逆。当用于一个矩阵时,高 斯消去产生“行消去梯形形式”。 0008 在消元的过程中,可能出现主元为零的情况,这时消元法无法进行;即使主元不为 零但很小时,若用其作除数,会导致其它元素的数量级严重增长和舍入误差的扩散,最后也 使得计算解不可靠。为使高斯-约当消去法具有较好的数值稳定。
9、性,可以使用完全主元素 消去法,但完全主元素消去法在选主元时要花费较多机器时间,为此又考虑使用列主元消 去法,但由于仍须选主元,计算量也较大。对于良态问题,高斯-约当消去法也可能给出很 说 明 书CN 102486727 A 2/6页 4 坏的结果,这说明高斯-约当消去法的算法很不稳定。事实上,一般的矩阵都是病态矩阵, 采用高斯-约当消去法不能得到满意的结果。 0009 (4)三角分解法 0010 三角分解法是将方阵分解成一个上三角矩阵和一个下三角矩阵,该方法又被称为 LU分解法。该分解方法的用途主要在简化大矩阵的行列式值的计算,矩阵求逆运算和求解 联立方程组。需要注意的是,这种分解方法所得到。
10、的上下三角形矩阵不是唯一的,还可找到 若干对不同的上下三角矩阵对,它们的乘积也会得到原矩阵。矩阵可以进行LU分解是有条 件的,它要求其为方阵且它的所有顺序主子式均不等于零。LU分解的主要优点在于它能用 公式表示费时的消去步骤,只对系数矩阵进行操作。LU分解的一个动机是它为矩阵求逆提 供了一个有效的方式,也为评估方程组的状态提供了一个方法。 0011 在上述的矩阵求逆方法中,伴随矩阵法及初等变换法,易于理解,适合手动求解, 而对于大规模矩阵的求解,这两种方法不太适合;高斯-约当消去法及LU分解法便于程序 的实现,在大多数条件下,能够适应大规模矩阵的求解。但是,对于大规模或超大规模矩阵, 高斯-约。
11、当消去法及传统的串行LU分解法的计算量往往过大,对计算机的性能要求较高, 算法的实时性不高,对于某些时间有严格要求的应用不太适合。 发明内容 0012 本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种能够大幅度提 高矩阵LU分解的运行效率、且能跨平台、可扩展、应用广泛的基于线程构造块的超大规模 矩阵多核并行克劳特分解方法。 0013 本发明的目的可以通过以下技术方案来实现:基于线程构造块的超大规模矩阵多 核并行克劳特分解方法,其特征在于,该分解方法包括以下步骤:1)TBB并行计算平台的安 装与环境设置;2)分析并抽取传统Crout方法中可以并行计算的部分,利用TBB并行模板 类改写为符。
12、合TBB需要的规范类;3)设置问题初始值;4)进入Crout方法的行循环;5)调 用parallel_reduce并行模块类,将每一行的最大主元保存在临时向量中,同时计算并保 存比例因子;6)进入Crout方法的列循环;7)确定新的主元及比例因子,修改TINY,每一行 除以主元,判断列循环是否结束,如果判断为否则转到步骤6),判断行循环是否结束,如果 判断为否则转到步骤4);8)运行结束,完成超大规模矩阵分解,得到因部分主元法而改变 了的行列排列次序。 0014 所述的步骤3)中的问题初始值包括矩阵的规模、矩阵的行数、列数,输入矩阵。 0015 与现有技术相比,本发明具有效率高、跨平台、可扩展。
13、、应用广泛等优点,本发明的 并行Crout方法能够大幅度提高矩阵LU分解的运行效率;在此基础上,通过本发明能够大 幅度提高矩阵求逆的效率,进而验证了本发明的有效性与高效性。并行Crout方法的适用 条件为:如果矩阵的所有子式都是非零的,即可使用本发明来进行LU分解,进而可以求得 该矩阵的逆或线性方程组的解等。当矩阵规模达到百万级别的时候,本发明比串行Crout 方法约提高了13.7,并比高斯-约当消去法约提高了77。故本发明具有非常大的实用 价值和广泛的应用前景。 附图说明 说 明 书CN 102486727 A 3/6页 5 0016 图1为本发明的满足TBB的求最大主元类结构图; 0017。
14、 图2为本发明的并行Crout方法流程图; 0018 图3为利用本发明的并行Crout方法求矩阵逆阵的流程图; 0019 图4为利用本发明求解矩阵逆阵的结果示意图。 具体实施方式 0020 下面结合附图和具体实施例对本发明进行详细说明。 0021 实施例 0022 TBB定义了任务的概念,在初始化TBB任务调度时,由任务调度器对象task_ scheduler_init实现多任务的分配和并行计算,支持多线程的划分。在调用并行计算的模 板类时,由模板类参数指定循环处理的数值范围以及任务粒度参数。任务粒度参数决定了 任务划分的粒度,如果粒度太大,不能充分提高运行效率;如果粒度太小,过度的并行化任 。
15、务分配造成的开销反而降低了运行效率。在无法获得合适任务粒度情况下可以使用TBB提 供的自动分配函数auto_partitioner()帮助用户设置合适的任务粒度参数。 0023 以parallel_reduce设计的求解最大主元素模板类为例,详细说明TBB设计并行 最大主元素算法的实现过程,以供Crout方法调用。首先,基于parallel_reduce模板将此 过程封装成类MaxElement,其作用是求解最大主元素。类MaxElement必须包括的接口为 operator和构造函数,具体形式如下: 0024 class MaxElement 0025 0026 void operator(。
16、)(const blocked_range&r) 0027 void operator()(const blocked_range&r) 0028 for(size_t ir.begin();i!r.end();+i) 0029 0030 0031 /分出一个支线,如果要访问x,应该保证原子操作 0032 MaxElement(MaxElement&x,tbb:split): 0033 my_a(x.my_a),value_of_max(FLT_MIN),index_of_max(-1) 0034 /合并支线 0035 void join(const MaxElement&y) 0036 00。
17、37 0038 /构造函数 0039 MaxElement(DOUBLE*a): 0040 my_a(a),value_of_max(FLT_MIN),index_of_max(-1) 0041 ; 0042 其中operator接口是并行处理的主要部分,主要功能是进行并行循环优化,将循 环的参数修改成TBB定义的blocked_range模板类,能够支持循环体内任务的并行划分。 在operator接口中,并行地执行各小块中的比较大小操作,并返回小块中的最大值。当 说 明 书CN 102486727 A 4/6页 6 TBB决定分出一个blocked_range时,会调用MaxElement(。
18、MaxElement&x,tbb:split),这 个tbb:split只是一个点位符,用于和拷贝构造函数相区别。当TBB合并blocked_range 时,会调用voidjoin(MaxElement&y),本例中合并就意味着把多个结果进行运算,将最终的 结果保存并返回。构造函数主要实现参数的初始化以及从整个任务空间中分离并构建子任 务。在完成并行模板类的编写之后,初始化TBB任务调度器,调用上述编写的并行模板,返 回计算结果,最后结束TBB任务调度。 0043 利用TBB设计并行Crout方法的基本步骤如下: 0044 步骤一:TBB并行计算平台的安装与环境设置; 0045 步骤二:分析并。
19、抽取传统Crout方法中可以并行计算的部分,利用TBB并行模板类 改写为符合TBB需要的规范类; 0046 步骤三:设置问题初始值,即矩阵的规模、矩阵的行数、列数,输入矩阵等; 0047 步骤四:进入Crout方法的行循环; 0048 步骤五:调用parallel_reduce并行模块类,将每一行的最大主元保存在临时向 量中,同时计算并保存比例因子,因此采用TBB进行并行设计对提高方法效率至关重要; 0049 步骤六:进入Crout方法的列循环; 0050 步骤七:确定新的主元及比例因子,修改TINY,每一行除以主元。若列循环未结束 则转到步骤六,判断行循环是否结束,如果判断为否则转到步骤4)。
20、;否则转到步骤四; 0051 步骤八:结束,得到因部分主元法而改变了的行列排列次序。 0052 为了验证并行Crout方法的正确性、有效性及评价本发明的实用性,下面通过本 发明求解矩阵的逆来验证与评价,其基本步骤如下: 0053 步骤一:TBB并行计算平台的安装与环境设置; 0054 步骤二:读入文件,其中包括输入矩阵及相关参数设置; 0055 步骤三:设置问题初始值,即矩阵的行数、列数,输入矩阵; 0056 步骤四:利用本发明的并行Crout方法对输入矩阵进行LU分解; 0057 步骤五:进入矩阵的行循环; 0058 步骤六:进入矩阵的列循环; 0059 步骤七:通过回代函数将矩阵按列求逆;。
21、 0060 步骤八:增加列计数,若列循环未结束则转到步骤六;增加行计数,若行循环未结 束则转到步骤五; 0061 步骤九:结束,得到输入矩阵的逆矩阵,写入到文件。 0062 如图1、2所示,本发明对传统Crout分解方法进行分析,把其中的关键步骤进行并 行化处理,并利用Intel公司的线程构建块来实现并行化。本发明充分利用了线程构建块 的灵活性、跨平台性及稳定性,实现基于线程构建块的并行Crout分解方法,并将该方法应 用于矩阵求逆,经过大量仿真实验显示,本发明能够大幅度提高传统Crout分解方法的效 率,进而大幅度提高使用了本发明的矩阵求逆方法的效率。 0063 本发明由一个符合线程构建块规。
22、范的求最大主元类、最大主元调用类和利用了最 大主元调用类的Crout分解方法组成,符合线程构建块规范的求最大主元类提供了具体的 并行处理的部分、任务的线程分支划分及合并等功能;最大主元类调用类提供了对求最大 主元类的调用封装,且提供了对其进行线程划分的粒度控制参数;并行化的Crout分解方 说 明 书CN 102486727 A 5/6页 7 法利用了线程并行化的优点,充分利用了计算机的资源,提高了传统Crout分解方法的效 率。本发明可以运行于多个系统平台,如Windows,Linux,Unix等系统。 0064 图1为本发明求最大主元类的结构图,以下对图中的各部分的详细描述: 0065 在。
23、部分101中,实现operator接口,其是并行处理的主要部分,主要功能是进行并 行循环优化,将循环的参数修改成TBB定义的blocked_range模板类,能够支持循环体内任 务的并行划分; 0066 在部分102中,实现带tbb:split的分支创建函数接口,当TBB决定分出一个 blocked_range时,会调用MaxElement(MaxElement&x,tbb:split),这个tbb:split只是 一个点位符,用于和拷贝构造函数相区别; 0067 在部分103中,实现join合并函数接口,当TBB合并blocked_range时,会调用 void_join(MaxElemen。
24、t&y),本例中合并就意味着把多个结果进行运算,将最终的结果保存 并返回; 0068 在部分104中,实现构造函数接口,构造函数主要实现参数的初始化以及从整个 任务空间中分离并构建子任务。 0069 图2为本发明的并行Crout方法流程图,下面对图中的各步骤进行详细描述: 0070 在步骤201中,读入需要分解的矩阵,初始化行值i,列值j,内含比例因子向量 vvi,极小数TINY,临时变量等。然后执行步骤202; 0071 在步骤202中,按行循环,递增行,求内含比例因子。然后执行步骤203; 0072 在步骤203中,调用并行的求最大主元类算法:求解各行的主元素和比例因子。然 后执行步骤20。
25、4; 0073 在步骤204中,按列循环,递增列。然后执行步骤205; 0074 在步骤205中,计算新的候选主元素及交换比例因子,替换原有的候选主元素及 交换比例因子。然后执行步骤206; 0075 在步骤206中,判断矩阵是否为奇异矩阵,如果是则赋TINY为零,否则TINY保持 不变。然后执行步骤207; 0076 在步骤207中,矩阵中的每一行除以主元素。如果按列循环未结束,则执行步骤 204;如果按列循环结束但按行循环未结束,则执行步骤202;如果按列循环与按行循环都 已结束,则执行步骤208; 0077 在步骤208中,结束函数:输出因部分主元法而改变了的行排列次序,可以根据此 排列。
26、次序得到矩阵的LU分解矩阵。 0078 图3为利用并行Crout方法求矩阵的逆阵的流程图,下面对图中的各步骤进行详 细描述: 0079 在步骤301中,通过对话框选择需要的输入文件,选择的矩阵文件为TXT格式,数 据结构格式为:第一行为矩阵的行数(row);第二行为矩阵的列数(col),在本应用中行数 等于列数(rowcoln),即这里的矩阵为n维方阵;第三行开始为矩阵的值。然后执行 步骤302; 0080 在步骤302中,根据读入的矩阵维数读取需要的数值并初始化相关变量及数据结 构。然后执行步骤303; 0081 在步骤303中,利用本发明并行Crout方法对读入的矩阵进行分解。然后执行步 。
27、说 明 书CN 102486727 A 6/6页 8 骤304; 0082 在步骤304中,控制矩阵的行循环i,然后执行步骤305; 0083 在步骤305中,控制矩阵的列循环j,然后执行步骤306; 0084 在步骤306中,通过回代函数对计算的矩阵进行处理。若in且jn,则返回 步骤305;若in且jn,则返回步骤304;若in且jn,执行步骤307; 0085 在步骤307中,结束矩阵求逆计算,输出矩阵的逆及相关的计算参数:方法的名 称、运算时间、方法线程数,方法子矩阵大小等。执行步骤308; 0086 在步骤308中,将结果写入到TXT文件中,供使用者进一步分析。 0087 图4中详细。
28、比较了并行crout方法、串行crout方法、高斯-约当消去法在求解矩 阵时的效率。由参考线可以看出,当矩阵维数大于等于256时,并行crout方法的运行时间 优于串行crout方法,更明显优于高斯-约当消去法的运行时间;并且随着矩阵维数的增 加,这种趋势越明显。当矩阵规模达到百万级别的时候,本发明比串行Crout方法约提高了 13.7,并比高斯-约当消去法约提高了77。即对于大规模或超大规模矩阵而言,并行 crout方法明显优于高斯-约当消去法,也优于串行crout方法。因此,本发明具有很高的 实用价值与广泛的应用前景。 说 明 书CN 102486727 A 1/2页 9 图1 图2 说 明 书 附 图CN 102486727 A 2/2页 10 图3 图4 说 明 书 附 图CN 102486727 A 10 。