[发明专利]基于循环分割或索引阵列的循环并行化有效
申请号: | 201180061439.X | 申请日: | 2011-12-19 |
公开(公告)号: | CN103282878A | 公开(公告)日: | 2013-09-04 |
发明(设计)人: | J·林;N·拉维;X·田;J·L·吴;R·V·瓦利乌林 | 申请(专利权)人: | 英特尔公司 |
主分类号: | G06F9/38 | 分类号: | G06F9/38;G06F9/45 |
代理公司: | 永新专利商标代理有限公司 72002 | 代理人: | 刘瑜;王英 |
地址: | 美国加*** | 国省代码: | 美国;US |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 循环 分割 索引 阵列 并行 | ||
技术领域
概括地说,本发明涉及计算领域。具体地说,本发明的实施例涉及基于循环分割和/或索引阵列的循环并行化。
背景技术
一种增加运算速度的方式是使用并行化。具有不规则的控制流或数据流的大量现实世界的应用,由于它们的不规则控制流和数据流通常可能不是编译时间可分析的,故而对于最先进优化编译器的逐步提高施加了一些挑战。这随后可能禁止或者减少了诸如并行化和向量化之类的重要循环优化。
关于对于具有这种不规则控制流和/或数据流的循环进行并行化的传统常识,主要聚焦于消除或减少承载循环的控制流或数据流依赖。因此,关于如何针对诸如并行化、向量化、循环分布和融合之类的通用循环优化来有效地实现控制和数据推测的问题仍然是开放的。
附图说明
参照附图提供了具体实施方式。在附图中,附图标记的最左侧数字标识该附图标记第一次出现的附图。在不同的附图中使用同一附图标记指示类似或者相同的项。
图1示出了根据一个实施例的流程图。
图2-8示出了根据一些实施例的示例性伪代码。
图9和图10示出了计算系统的实施例的框图,其中这些计算系统可以用于实现本申请所讨论的一些实施例。
具体实施方式
在下文的描述中,为了提供对于各个实施例的透彻理解,阐述了众多特定的细节。但是,可以在不使用这些特定细节的情况下,实现本发明的各个实施例。在其它实例中,没有详细地描述公知的方法、过程、组件和电路,以避免造成本发明的这些具体实施例的模糊。此外,可以使用各种方式来执行本发明的实施例的各个方面,例如,集成半导体电路(“硬件”)、组织到一个或多个程序中的计算机可读指令(“软件”)、或者软硬件的某种结合。为了本发明的说明目的,对于“逻辑”的引用应当意味着硬件、软件(其包括例如对处理器的操作进行控制的微代码)或者其某种结合。
本申请所讨论的一些实施例可以提供基于循环分割和/或索引阵列的循环并行化。如上所述,关于如何针对诸如并行化、向量化、循环分布和融合之类的通用循环优化来有效地实现控制和数据推测的问题仍然是开放的。为此,在一个实施例中,可以基于循环分割来实现循环并行化。在一些实施例中,编译器构架可以扩展到对控制和数据推测进行统一,其能实现更多的循环优化(特别是并行化)。此外,循环分割技术(例如,基于误推测驱动的循环分割)可以允许对更多的循环进行推测性地优化。此外,(缓慢的)检查代码生成方案可以实现后面的分析和优化,而无需进行任何改变来适应推测信息。
另外,为了提高速度,一些处理器可以使用多个/很多处理核。通常,为了充分利用多/众核体系架构,代码必须并行地执行。编写并行程序可能是一项困难的任务,因此程序/应用通常在本质上是串行的。对于不具有数据依赖的循环来说,针对并行化有益的代码段,可以使用自动并行化。这对于不具有数据依赖的循环来说,通常是成立的。对于具有数据/控制依赖的循环进行自动并行化是一个困难的问题。
在一个实施例中,对于具有某些类型的数据/控制依赖的循环进行自动并行化的问题(它们是通常遇到的),可以基于索引阵列来解决。在一些实施例中,索引阵列可以(例如,由编译器)生成,并用于对迭代空间进行划分(和可能的重新排序),以便对循环进行并行化/优化。例如,可以在编译时间执行数据/控制流分析(以及编码转换),而在运行时生成迭代子空间的值(例如,通过预计算循环)。这提供了打破控制/数据流依赖并实现更多的循环优化(例如,并行化)的通用技术。在一个实施例中,不需要简档信息,但为了效率起见,可以使用该信息。因此,实施例可以使用软件只运行时检验,而不需要任何特殊的硬件支持。
通常,当前实现不能容易地应用于包含不规则控制和/或数据流的循环。例如,考虑从工业标准基准SPEC CPU2006/454.calculix中提取的下面热点循环:
上面的循环不能并行化,这是由于编译器分析假定指针a、c和sum指向相同的指向集合(point-to set),在该循环中可能发生分支。但是,如果可以推测性地忽略表达式*a、*c和*sum之间的依赖,假定条件表达式!f[i]始终为FALSE,则可以对该循环进行并行化。因此,编译器可以生成两个版本的循环,一个是并行版本和一个是串行版本。为了保证程序在运行时的正确性,生成了检查循环,以判断这些指针是否混淆(aliased),以及是否发生分支。如果证明这些表达式是独立的,并且在运行时从未发生分支,则可以替代串行版本来执行并行版本。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于英特尔公司,未经英特尔公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201180061439.X/2.html,转载请声明来源钻瓜专利网。