所有提交的电磁系统将被重定向到在线手稿提交系统。作者请直接提交文章在线手稿提交系统各自的杂志。

调查需要循环转换的自动并行化

尼莎,Rafiya Shahana,穆斯塔法B
Bearys理工学院,印度芒格洛尔
相关文章Pubmed,谷歌学者

访问更多的相关文章国际期刊的创新在计算机和通信工程的研究

文摘

多核处理器的不断扩散,应用程序的并行化已成为一个优先级的任务。考虑编写新应用程序并行性,利用可用的计算能力。同样,并行化的遗留应用程序性能优势也很重要。在现代computersystem循环存在很大的机会增加指令级andThread级并行性。技术只需要避免不必要的检查,以确保正确的执行的迭代次数。在本文中,我们提出一个调查的基本循环转换techniquesthat可以提高性能通过消除一些不必要的检查迭代边界条件指令。这项工作的目的是提出的一个很好的调查循环转换。我们现在信息的数量instructionseliminated以及广大转换,主要是在源代码级别。根据目标架构,循环转换的目标是:改善数据重用和数据局部性,有效的利用内存层次结构,减少开销与执行循环,说明管道,最大化并行性。循环转换可以执行在不同级别的程序员,compileror专业工具。循环的过程优化是提高执行速度,减少循环相关的开销。 Thus, loops optimization is critical in high performance computing. Our techniques are applicable to mostmodern architecture including superscalar, multithreaded, VLIW or EPIC systems.

关键字

循环转换技术,循环优化,并行化。

我的介绍。

大多数时候,最耗时的部分程序在循环。在并行编程Loop-level并行性是众所周知的技术。域分解用于解决计算机视觉应用,虽然loop-level并行性是一种常见的方法所使用的标准如开放MP。因此,循环优化是高性能计算的关键。根据目标架构,循环转换有以下目标:改善数据重用和数据局部性,有效的利用内存层次结构,减少开销与执行循环指令相关管道和最大化并行。
循环转换可以执行在不同级别的程序员,编译器或专门的工具。在高水平,一些众所周知的转换通常被认为是:循环交换,循环逆转,循环扭曲,循环阻塞,循环(节点)分裂、融合、循环循环裂变,循环展开,循环un-switching,循环反转,循环向量化和循环parallelization.c

二世。动机

主要动机是使便携式编程不牺牲性能。循环变换可以改变空间的顺序迭代遍历。它也可以暴露的并行性,增加可用的独立,或改善记忆的行为。测试检查的有效性需要变换的依赖。
优化框架包括提高内存访问的顺序利用内存层次结构的各个层面,如在高速缓存线路的大小。它也提高了缓存重用除以迭代空间分成瓷砖和遍历这些瓷砖。为了提供更大的独立,我们可以展开循环,这样每一个新的迭代实际上对应于若干次迭代的循环。因此展开是有用的在不同的处理器,包括简单的管道,静态调度超标量体系结构和VLIW系统。
如果存在一个依赖两个声明实例引用同一个内存位置,(至少)其中一个是写。这两个语句之间不应该有写实例。也依赖发生如果S1和S2流依赖两个语句在一个循环中,然后S1写入一个变量在早期迭代中比S2读取这个变量。可用的各种依赖测试是:分离性测试,肾小球囊性肾病测试,测试和Fourier-Motzkin测试范围。时间关键型应用程序,昂贵的测试如ω测试可以使用。

三世。循环转换

各种循环转换,如循环交换,逆转,扭曲和阻塞是很有用的两个重要的目标:并行性和有效地使用内存层次结构。一项调查的各种循环变换给出如下:
答:标量扩展:
克服依赖我们使用标量扩张的消除虚假依赖性通过引入额外的存储。标量介绍S2_aS1循环依赖。他们可以表现为编译器生成的临时变量。
图像
这种依赖可以消除标量扩展到一个数组,有效地给每个迭代一个私人复制
图像
b循环排列:
循环交换简单的交流在一个循环中两个循环嵌套的位置。的一个主要用途是提高访问数组的行为。它也被称为循环交换。循环交换简单的交流在一个循环中两个循环嵌套的位置。
例如,给定一个列为主存储order1,下面的代码访问横跨的[]n。这可能非常糟糕,缓存交互,特别是如果步幅比高速缓存线路的长度是2的幂的倍数,导致set-associative缓存碰撞。
图像
交换循环改变了访问模式是在连续的内存位置[],大大增加缓存的有效性。
图像
然而,循环交换只是法律的依赖向量环路巢仍按积极交换后,这改变的顺序依赖关系匹配循环新秩序。例如,下面的循环嵌套依赖以来不能互换矢量(1−1)。交换循环最终使用的将来,uncomputed数组中的值。
图像
类似地,可以使用循环交换控制的粒度在嵌套循环工作。例如,通过并行循环向外移动,一定串行工作走向内部循环,增加工作每fork - join操作。
c循环逆转:
循环逆转逆转值被分配到索引的顺序变量。这是一个微妙的优化这有助于消除依赖性,从而使其他优化。此外,某些架构利用循环结构在汇编语言水平数只在一个方向(如decrement-jump-if-not-zero (DJNZ))。例如,下面的代码不能互换或其内部循环并行化,因为(1)−1)依赖关系。
图像
扭转内循环收益率(1,1)的依赖关系。循环现在可以交换和/或内部循环并行。
图像
d .循环扭曲
循环扭曲嵌套循环遍历一个多维数组,其中每个迭代的内循环取决于先前的迭代,并将数组访问,这样只外层循环迭代之间的依赖关系。
让我们用以下简单说明这个过程循环:
图像
假设64条数组元素是可取的。第一个新行计算最近的64多个n。外循环迭代对这多个64年增量。一个新的内部循环执行原来的循环对当前地带。最后,可能需要安排循环如果n不64的倍数。
注意,这个内循环也可以转化为一个做所有循环。
图像
f .循环(节点)分裂:
循环依赖在一个循环中防止循环裂变(4.8节)。例如,下面的循环流依赖S1_f0S2和anti-dependence S2_a1S1 bothon[],形成一个循环。
图像
h .循环裂变:
循环裂变/试图打破循环分布到多个循环在同一指数范围但每个只采取一个循环的身体的一部分。这可以提高当地的参考,数据被访问的循环和循环中的代码的身体。
下面的代码显示了这个通过距离零流依赖从第一到第二句。
图像
j .循环UNSWITCHING:
Unswitching移动之外的条件在一个循环重复循环的身体,里面放置一个版本的每个if和else条件的条款。下面的示例显示了一个循环,它的身体条件执行路径。必须执行一个测试和跳在每个迭代中减少了循环的性能,因为它避免了CPU,除非复杂的跟踪缓存等机制或投机性的分支,从身体有效地执行循环的管道。循环的条件还能抑制所有并行因为任何条件语句必须执行测试后。
图像
代码类似于循环不变式运动,如果循环不变式表达式是一个条件,那么它可以移动的外循环,与每个可能的执行路径复制作为独立的循环在每个分支。这增加总的代码大小,但降低了运行的每个可能的分支,可以在其中一些暴露并行性,戏剧与CPU流水线和消除therepeated分支测试计算。注意,一个警卫也可能是必要的,以避免分支回路,永远不会在给定的范围内执行。
图像
k .循环转化:
该技术标准的while循环变化成延伸(又名重复/直到)循环包装在一个如果有条件,减少跳的数量由两个循环执行的情况。这样做重复条件检查(增加代码的大小),但更有效率,因为跳通常导致管道停滞。另外,如果初始条件在编译时是已知的和是副作用,如果警卫可以跳过。
图像
l .循环向量化:
向量化的尝试尽可能多的循环迭代运行在同一时间在多处理器系统上。环向量化的尝试重写循环使用向量指令执行它的身体。这些指令通常称为SIMD(单指令多数据),同时在多个执行相同的操作的硬件。
图像
m .循环并行化:
循环并行化是一个特例自动并行化关注循环,重组他们在多处理器系统高效运行。它可以由编译器自动完成(名为自动并行化)或手动(插入并行指令像OpenMP)。
图像

四。结论

调查的各种转换为一般循环巢穴进行了这项工作。可以应用不同的循环转换为了揭露并行之前进入显式并行化。在本文中,我们调查了循环变换技术,它们已经被证明有用提取大类的嵌套循环的并行机器,从向量机和VLIW机器多处理器架构。

引用

  1. 对程序的转换,让羽衣甘蓝、推理,2003气象出版社。深入讨论了一般代表执行程序的问题而不是程序文本上下文中的静态优化。
  2. 大卫·f·培根,苏珊·l·格雷厄姆和奥利弗·j·夏普。编译器转换为高性能计算。报告没有。UCB / CSD 93/781,计算机科学Division-EECS,加州大学伯克利分校伯克利,加州94720年,1993年11月(可用atCiteSeer [1])。介绍编译器分析数据依赖分析和inter-procedural等分析,以及一个非常的完整列表循环转换。
  3. 史蒂文•s,穆奇尼克从投资人那里募集到1997 Morgan-Kauffman高级编译器设计与实现。部分20.4.2讨论循环优化。
  4. r·艾伦和k·肯尼迪。为现代架构优化编译器。摩根和考夫曼,2002年。
  5. Banerjee伍。依赖分析重组编译器(循环转换)。施普林格;第1版(1996年10月31日)。
  6. f . Irigoin和r .八行两韵诗。Supernode分区。POPL 88年第15届ACM SIGPLAN-SIGACT学报》研讨会上http://www.cri.ensmp.fr/classement/doc/a - 179. - pdf编程语言的原则