首页 / 专利库 / 电脑编程 / 高性能计算 / 高性能计算环境中的序列优化

高性能计算环境中的序列优化

阅读:284发布:2020-05-19

专利汇可以提供高性能计算环境中的序列优化专利检索,专利查询,专利分析的服务。并且实施例 涉及确定包括一个或多个挑选/ 开关 指令对的数据流图指令并基于数据流图指令生成反向静态单赋值图的技术,该反向静态单赋值图包括强连通分量,强连通分量中的每一个强连通分量与该一个或多个挑选/开关指令对中的至少一个挑选/开关指令对相关联。实施例还包括深度优先地遍历反向静态单赋值图,并且用复合指令替换与具有配置值的强连通分量相关联的挑选/开关指令。,下面是高性能计算环境中的序列优化专利的具体信息内容。

1.一种用于执行编译器优化的设备,包括:
存储器,用于存储指令;以及
处理电路,所述处理电路与所述存储器耦合,所述处理电路可操作用于执行所述指令,所述指令在被执行时使处理电路能够用于:
确定包括一个或多个挑选/开关指令对的数据流图指令;
基于所述数据流图指令生成反向静态单赋值图,所述反向静态单赋值图包括强连通分量,所述强连通分量中的每一个强连通分量与所述一个或多个挑选/开关指令对中的至少一个挑选/开关指令对相关联;以及
深度优先地遍历所述反向静态单赋值图,并且用复合指令替换与具有配置值的强连通分量相关联的挑选/开关指令。
2.如权利要求1所述的设备,所述处理电路用于:
确定与归纳变量相关联的强连通分量包括配置值,所述配置值包括初始值、边界值、和步长;以及
用一个或多个复合指令替换与所述归纳变量相关联的挑选/开关指令。
3.如权利要求2所述的设备,所述处理电路用于:
确定所述归纳变量是仿射的还是非仿射的;
响应于确定归纳变量是仿射的,用多个复合指令替换与所述归纳变量相关联的所述挑选/开关指令;以及
响应于确定归纳变量不是仿射的,用单个复合指令替换与所述归纳变量相关联的所述挑选/开关指令以在执行期间驱动一个或多个其他指令的步长。
4.如权利要求1所述的设备,所述处理电路用于:
确定与地址相关联的强连通分量包括配置值,所述配置值包括初始值、以及步长;以及用一个或多个复合指令替换与所述地址相关联的挑选/开关指令。
5.如权利要求1所述的设备,所述处理电路用于:
在所述反向静态单赋值图的生成之前针对所述数据流图指令生成数据流图;以及通过反转所述数据流图的边的流向来生成所述反向静态单赋值图。
6.如权利要求1所述的设备,所述处理电路用于:当深度优先地遍历所述反向静态单赋值图时,在处理一个或多个地址指令的强连通分量之前,处理归纳变量的强连通分量。
7.如权利要求1所述的设备,其特征在于,所述数据流图指令基于包括C,C++和FORTRAN中的一者的高级编程语言中的一个或多个循环指令。
8.如权利要求1所述的设备,其特征在于,所述一个或多个复合指令中的每一个复合指令包括序列指令、序列简化指令、重复指令、序列步长指令、嵌套重复指令、过滤指令、替换指令和复制指令中的一者。
9.如权利要求1所述的设备,其特征在于,所述处理电路可操作用于在可配置空间加速器的编译操作期间执行所述一个或多个指令以执行高性能计算,所述可配置空间加速器包括由网络耦合的处理元件的阵列。
10.一种执行编译器优化的计算机实现的方法,包括:
确定包括一个或多个挑选/开关指令对的数据流图指令;
基于所述数据流图指令生成反向静态单赋值图,所述反向静态单赋值图包括强连通分量,所述强连通分量中的每一个强连通分量与所述一个或多个挑选/开关指令对中的至少一个挑选/开关指令对相关联;以及
深度优先地遍历所述反向静态单赋值图,并且用复合指令替换与具有配置值的强连通分量相关联的挑选/开关指令。
11.如权利要求10所述的计算机实现的方法,包括:
确定与归纳变量相关联的强连通分量包括配置值,所述配置值包括初始值、边界值、以及步长;以及
用一个或多个复合指令替换与所述归纳变量相关联的挑选/开关指令。
12.如权利要求11所述的计算机实现的方法,包括:
确定所述归纳变量是仿射的还是非仿射的;
响应于确定归纳变量是仿射的,用多个复合指令替换与所述归纳变量相关联的所述挑选/开关指令;以及
响应于确定归纳变量不是仿射的,用单个复合指令替换与所述归纳变量相关联的所述挑选/开关指令以在执行期间驱动一个或多个其他指令的步长。
13.如权利要求10所述的计算机实现的方法,包括:
确定与地址相关联的强连通分量包括配置值,所述配置值包括初始值、以及步长;以及用一个或多个复合指令替换与所述地址相关联的挑选/开关指令。
14.如权利要求10所述的计算机实现的方法,包括:
在所述反向静态单赋值图的生成之前针对所述数据流图指令生成数据流图;以及通过反转所述数据流图的边的流向来生成所述反向静态单赋值图。
15.如权利要求10所述的计算机实现的方法,包括:当深度优先地遍历所述反向静态单赋值图时,在处理一个或多个地址指令的强连通分量之前,处理归纳变量的强连通分量。
16.如权利要求10所述的计算机实现的方法,其特征在于,所述一个或多个复合指令中的每一个复合指令包括序列指令、序列简化指令、重复指令、序列步长指令、嵌套重复指令、过滤指令、替换指令和复制指令中的一者。
17.如权利要求10所述的计算机实现的方法,其特征在于,所述数据流图指令基于包括C,C++和FORTRAN中的一者的高级编程语言中的一个或多个循环指令。
18.一种非瞬态计算机可读存储介质,包括多个指令,所述多个指令在被执行时使处理电路能够用于:
确定包括一个或多个挑选/开关指令对的数据流图指令;
基于所述数据流图指令生成反向静态单赋值图,所述反向静态单赋值图包括强连通分量,所述强连通分量中的每一个强连通分量与所述一个或多个挑选/开关指令对中的至少一个挑选/开关指令对相关联;以及
深度优先地遍历所述反向静态单赋值图,并且用复合指令替换与具有配置值的强连通分量相关联的挑选/开关指令。
19.如权利要求18所述的非瞬态计算机可读存储介质,包括多个指令,所述多个指令在被执行时使处理电路能够用于:
确定与归纳变量相关联的强连通分量包括配置值,所述配置值包括初始值、边界值、以及步长;以及
用一个或多个复合指令替换与所述归纳变量相关联的挑选/开关指令。
20.如权利要求19所述的非瞬态计算机可读存储介质,包括多个指令,所述多个指令在被执行时使处理电路能够用于:
确定所述归纳变量是仿射的还是非仿射的;
响应于确定归纳变量是仿射的,用多个复合指令替换与所述归纳变量相关联的所述挑选/开关指令;以及
响应于确定归纳变量不是仿射的,用单个复合指令替换与所述归纳变量相关联的所述挑选/开关指令以在执行期间驱动一个或多个其他指令的步长。
21.如权利要求18所述的非瞬态计算机可读存储介质,包括多个指令,所述多个指令在被执行时使处理电路能够用于:
确定与地址相关联的强连通分量包括配置值,所述配置值包括初始值、以及步长;以及用一个或多个复合指令替换与所述地址相关联的挑选/开关指令。
22.如权利要求18所述的非瞬态计算机可读存储介质,包括多个指令,所述多个指令在被执行时使处理电路能够用于:
在所述反向静态单赋值图的生成之前针对所述数据流图指令生成数据流图;以及通过反转所述数据流图的边的流向来生成所述反向静态单赋值图。
23.如权利要求18所述的非瞬态计算机可读存储介质,包括多个指令,所述多个指令在被执行时使处理电路能够用于:当深度优先地遍历所述反向静态单赋值图时,在处理一个或多个地址指令的强连通分量之前,处理归纳变量的强连通分量。
24.如权利要求18所述的非瞬态计算机可读存储介质,其特征在于,所述数据流图指令基于包括C,C++和FORTRAN中的一者的高级编程语言中的一个或多个循环指令。
25.如权利要求18所述的非瞬态计算机可读存储介质,其特征在于,所述一个或多个复合指令中的每一个复合指令包括序列指令、序列简化指令、重复指令、序列步长指令、嵌套重复指令、过滤指令、替换指令和复制指令中的一者。
26.一种用于执行编译器优化的设备,包括:
用于确定包括一个或多个挑选/开关指令对的数据流图指令的装置;
用于基于所述数据流图指令生成反向静态单赋值图的装置,所述反向静态单赋值图包括强连通分量,所述强连通分量中的每一个强连通分量与所述一个或多个挑选/开关指令对中的至少一个挑选/开关指令对相关联;以及
深度优先地遍历所述反向静态单赋值图,并且用复合指令替换与具有配置值的强连通分量相关联的挑选/开关指令。
27.如权利要求26所述的设备,包括:
用于确定与归纳变量相关联的强连通分量包括包括初始值、边界值、以及步长的配置值的装置;以及
用于用一个或多个复合指令替换与所述归纳变量相关联的挑选/开关指令的装置。
28.如权利要求27所述的设备,包括:
用于确定所述归纳变量是仿射的还是非仿射的装置;
响应于确定归纳变量是仿射的,用于用多个复合指令替换与所述归纳变量相关联的所述挑选/开关指令的装置;以及
响应于确定归纳变量不是仿射的,用于用单个复合指令替换与所述归纳变量相关联的所述挑选/开关指令以在执行期间驱动一个或多个其他指令的步长的装置。
29.如权利要求26所述的设备,包括:
用于确定与地址相关联的强连通分量包括包括初始值、以及步长的配置值的装置;以及
用于用一个或多个复合指令替换与所述地址相关联的挑选/开关指令的装置。
30.如权利要求26所述的设备,所述处理电路用于:
用于在所述反向静态单赋值图的生成之前针对所述数据流图指令生成数据流图的装置;以及
用于通过反转所述数据流图的边的流向来生成所述反向静态单赋值图形的装置。
31.如权利要求26所述的设备,用于当深度优先地遍历所述反向静态单赋值图时,在处理一个或多个地址指令的强连通分量之前,处理归纳变量的强连通分量的装置。
32.如权利要求26所述的设备,其特征在于,所述数据流图指令基于包括C,C++和FORTRAN中的一者的高级编程语言中的一个或多个循环指令。
33.如权利要求26所述的设备,其特征在于,所述一个或多个复合指令中的每一个复合指令包括序列指令、序列简化指令、重复指令、序列步长指令、嵌套重复指令、过滤指令、替换指令和复制指令中的一者。
34.如权利要求26所述的设备,用于在可配置空间加速器的编译操作期间执行所述一个或多个指令以执行高性能计算的装置,所述可配置空间加速器包括由网络耦合的处理元件的阵列。
35.一种用于执行编译器优化的系统,包括:
可配置空间加速器CSA,用于执行高性能计算,所述可配置空间加速器包括由网络耦合的处理元件的阵列;
存储器,用于存储指令并且与所述CSA耦合;以及
处理电路,所述处理电路与所述存储器和所述CSA耦合,所述处理电路可操作用于执行所述指令,所述指令在被执行时使所述处理电路能够用于:
确定包括一个或多个挑选/开关指令对的数据流图指令;
基于所述数据流图指令生成反向静态单赋值图,所述反向静态单赋值图包括强连通分量,所述强连通分量中的每一个强连通分量与所述一个或多个挑选/开关指令对中的至少一个挑选/开关指令对相关联;以及
深度优先地遍历所述反向静态单赋值图,并且用复合指令替换与具有配置值的强连通分量相关联的挑选/开关指令。
36.如权利要求35所述的系统,所述处理电路用于:
确定与归纳变量相关联的强连通分量包括配置值,所述配置值包括初始值、边界值、以及步长;以及
用一个或多个复合指令替换与所述归纳变量相关联的挑选/开关指令。
37.如权利要求36所述的系统,所述处理电路用于:
确定所述归纳变量是仿射的还是非仿射的;
响应于确定归纳变量是仿射的,用多个复合指令替换与所述归纳变量相关联的所述挑选/开关指令;以及
响应于确定归纳变量不是仿射的,用单个复合指令替换与所述归纳变量相关联的所述挑选/开关指令以在执行期间驱动一个或多个其他指令的步长。
38.如权利要求35所述的系统,所述处理电路用于:
确定与地址相关联的强连通分量包括配置值,所述配置值包括初始值、以及步长;以及用一个或多个复合指令替换与所述地址相关联的挑选/开关指令。
39.如权利要求35所述的系统,所述处理电路用于:
在所述反向静态单赋值图的生成之前针对所述数据流图指令生成数据流图;以及通过反转所述数据流图的边的流向来生成所述反向静态单赋值图。
40.如权利要求35所述的系统,所述处理电路用于:当深度优先地遍历所述反向静态单赋值图时,在处理一个或多个地址指令的强连通分量之前,处理归纳变量的强连通分量。
41.如权利要求35所述的系统,其特征在于,所述数据流图指令基于包括C,C++和FORTRAN中的一者的高级编程语言中的一个或多个循环指令。
42.如权利要求35所述的系统,其特征在于,所述一个或多个复合指令中的每一个复合指令包括序列指令、序列简化指令、重复指令、序列步长指令、嵌套重复指令、过滤指令、替换指令和复制指令中的一者。
43.如权利要求35所述的系统,其中所述处理电路可操作用于在所述可配置空间加速器的编译操作期间执行所述一个或多个指令以执行高性能计算。

说明书全文

高性能计算环境中的序列优化

政府许可权利

[0001] 本发明是在由能源部授予的H98230-13-D-0124下利用政府支持完成的。政府具有本发明中的特定权利。

技术领域

[0002] 本文描述的实施例包括用于在高性能计算环境中对可配置空间加速器执行序列优化的技术。背景
[0003] 百亿亿次级(exascale)系统预计将集成大约100,000个处理器节点,以在激进的功率预算(20MW)内实现1个百亿亿次(ExaFLOP)的巨大的处理目标(如能源部所定义的那样)。然而,使用经典冯·诺依曼架构同时提高程序执行的性能和能源效率变得困难并且导致高能源成本。为了同时实现性能和能源要求,需要一种面向高性能计算(HPC)的新型架构。附图说明
[0004] 图1示出了计算设备的示例。
[0005] 图2A示出了逻辑流程的示例。
[0006] 图2B示出了转换代码段的处理流程的示例。
[0007] 图3A示出了第二逻辑流程的示例。
[0008] 图3B示出了从数据流图到反向静态单赋值(SSA)图的转换的处理流程图的示例。
[0009] 图3C/D示出了代码片段的示例。
[0010] 图4示出了逻辑流程图的示例。
[0011] 图5展示了计算架构的示例实施例。

具体实施方式

[0012] 实施例可以涉及利用可配置空间加速器(CSA)架构在HPC环境中处理数据。CSA执行混合数据流图和数据流图指令。此外,CSA架构使计算密集且节能的空间架构能够根据严格的资源要求解决复杂问题(诸如由能源部的百亿亿次级性能指南定义的那些)。
[0013] 对于HPC代码中常见的复杂操作,CSA直接在指令集架构(ISA)中捕获它们。数据流运算符的一个重要方式是定序器,该定序器旨在以有效的方式实现for型循环的控制。然而,使用基元运算符实现的定序器在循环的条件和条件后更新部分之间引入反馈路径,因为这些项通常是相关的(即,i瓶颈,该操作能够在单个操作中执行许多常见的for循环模式的条件和更新。此类复合指令的例子是,序列、序列简化(需要与它所依赖的序列指令相关)、重复(在循环不变量的数据流转换次数中产生的数据流特性)、序列步长(由序列指令驱动),嵌套重复(由两个序列指令驱动)、过滤、替换、复制等。本文讨论的实施例集中于有效地生成这些复合数据流指令。
[0014] 现在将参考附图,自始至终同样的参考编号用于表示同样的元件。在以下描述中,出于解释的目的,阐述了许多具体的细节以便提供对其的透彻理解。然而,可能明显的是,可以在没有这些具体细节的情况下实践新颖的实施例。在其他情况下,以框图形式示出众所周知的结构和设备,以便有助于其说明。意图是覆盖与所要求保护的主题一致的所有修改、等同物和替代物。
[0015] 图1示出了计算设备100的示例实施例,其中可以采用本公开的各方面来处理高性能计算环境中的数据。在实施例中,计算设备100包括可配置空间加速器(CSA)126,该可配置空间加速器(CSA)126具有加速器架构设计以执行混合数据流图和数据流图指令。加速器架构使计算密集且节能的空间架构能够根据严格的资源要求解决复杂问题(诸如由能源部的百亿亿次级性能指南定义的那些)。
[0016] 在实施例中,计算设备100可以包括多个组件,包括CSA 126,该CSA 126具有通过互连(例如,背压网络或结构)耦合的处理元件(PE)的阵列128。PE 128是异构的并且可以被定制以执行高效操作。例如,PE 128中的每一个PE可以执行特定功能(诸如整数运算、浮点运算、通信、结构内存储等)。
[0017] 包括PE 128的计算设备100可以处理数据流图和数据流图指令,数据流图指令是在顺序代码的编译中出现的并行程序描述。这些图被直接配置在PE 128上,而不是变换成顺序指令流。从传统顺序编译流程导出图允许计算设备100支持熟悉的编程模型,例如C、C++、Fortran等,并直接执行现有的高性能计算指令。
[0018] 在实施例中,计算设备100可以包括高速缓冲存储器124,该高速缓冲存储器124可以由PE 128用于处理数据流图和指令。在一些实施例中,高速缓冲存储器124可以经由加速器高速缓存互连(ACI)与PE 128耦合,该加速器高速缓存互连(ACI)包括到高速缓冲存储器124的网络连接请求地址文件(RAF)电路。在实施例中,CSA 126还可以包括结构内存储器(未示出)(诸如缓冲器PE(小存储元件)和存储器元件(较大的存储元件))。在实施例中,缓冲器元件可以提供少量存储器以在存在可变等待时间子图的情况下提高性能。每个缓冲器元件将提供几个缓冲区,这些缓冲区可以被单独使用或被分组以形成更大的结构。存储器元件通常是较大的存储器,诸如基于SRAM的结构,可以使用夹层网络与高速缓冲存储器124耦合来连接。存储器元件可以用于存储结构内的运行时系统的服务容量,例如,用于高速缓存数据流图配置。实施例不限于此方式。
[0019] 在实施例中,计算设备100可以包括一个或多个组件以执行编译和优化操作以将源代码(诸如C、C++、Fortran等)编译成可以覆盖到结构和PE 128上以用于执行的经编译的数据流图。例如,计算设备100可以包括处理电路104,该处理电路104可以用于执行本文所讨论的一个或多个操作,例如,编译源代码、执行优化、覆盖(分配)数据流图等。处理电路104可以是任何类型的处理电路,包括处理核或处理单元、中央处理单元、控制器等。在一些实施例中,处理电路104可以位于与计算设备100的其他组件相同的管芯上。然而,在其他实施例中,处理电路104可以位于不同的管芯上,但是在与计算设备100的组件相同的板上。在甚至不同的实施例中,处理电路104可以是不同计算设备的一部分,并且经由接口140与计算设备100的组件进行通信。实施例不限于此方式。
[0020] 在实施例中,计算设备100包括存储器114和存储装置132。存储器114可以是包括随机存取存储器(RAM)、动态RAM(DRAM)、静态RAM(SRAM)、双倍数据速率同步动态RAM(DDR SDRAM)、SDRAM、DDR1SDRAM、DDR2SDRAM、SSD3SDRAM、单数据速率SDRAM(SDR SDRAM)、DDR3、DDR4等的易失性存储器中的一个或多个。实施例不限于此方式,并且可以预期其他存储器类型并且与本文所讨论的实施例一致。在实施例中,在某些情况下,存储器114可以在临时的基础上存储包括由处理电路104用于处理的指令的信息和数据。
[0021] 存储装置132可以是如本文所讨论的任何类型的存储装置(诸如非易失性存储装置)。存储装置132可以存储编译器134、一个或多个指令136、以及源代码138。编译器134包括用于将源文本/代码138翻译成包括可以映射到PE 128的数据流图指令和图的代码/文本的程序或程序集。在一些情况下,利用编译器134编译源代码138可以在多个阶段中多次完成以将高级编程语言代码变换成汇编语言代码、数据流图并执行序列优化。
[0022] 在实施例中,编译器134将高级语言(诸如C、C++和Fortran)编译成要被加速的特定区域的主机代码LLVM中间表示(IR)的组合。此外,编译器134可以利用LLVM IR作为输入,执行优化并将IR编译成CSA汇编代码。编译器134将控制流指令转换为用于CSA 126的数据流图指令或指令。
[0023] 更具体地,编译器134可以将以控制流形式表示的函数(即,具有在虚拟寄存器上操作的顺序机器指令的控制流图(CFG))转换为数据流函数,该数据流函数在概念上是由等待时间不敏感通道(LIC)连接的数据流操作的图(指令)。在第三步骤中,编译器134以CSA汇编格式生成指令,例如,数据流图指令。编译器134可以在实际CSA 126上放置和路由数据流指令。
[0024] 在一些实例中,编译器134可以执行一个或多个优化(诸如序列优化)。例如,编译器134可以执行函数(诸如循环)的优化操作,因为诸如循环归纳变量之类的值在围绕循环的挑选/添加/比较/开关(pick/add/compare/switch)周期(cycle)中流动,这可以使用序列单元或复合指令进行潜在优化。复合指令是能够以每周期1个的速率产生新序列值的指令,例如,可以在单个操作中更新for循环指令集的值。编译器134可以在数据流会话之后运行一次优化,以用汇编中的复合指令替换某些挑选/开关指令集(周期)。
[0025] 在实施例中,编译器134可以搜索这些挑选/开关指令集,如将更详细地讨论的,并使用复合指令替换某些挑选/开关指令集(诸如,序列指令、序列简化指令、重复指令、序列步长指令、嵌套重复指令、过滤指令、替换指令、复制指令等)。在一个示例中,序列指令将基数、界限和步长的三元组作为输入,并且使用这些输入产生大致等于for循环的值的流。例如,如果基数为10、界限为15、步长为2,则序列指令(seqlts32)产生三个输出值10、12、14的流。序列指令还产生1、1、1、0的控制流,该控制流可用于控制序列族中的其他类型的指令。在另一示例中,序列步长或步长指令将基数、步长和输入控制(ctl)作为输入,并生成对应的线性序列以匹配ct1。例如,对于stride32(步长32)指令,如果基数为10、步长为1、且ctl为1、1、1、0,则输出为10、11、12。步长指令可以被认为是依赖序列指令,该依赖序列指令依赖于序列指令的控制流何时迈步而不是进行比较界限。在另一示例中,简化指令将初始值init、值流in、和控制流ctl作为输入,并输出初始值和值流的总和。例如,init为10,as为3、
4、2,以及ctl为1、1、1、0的redadd32指令产生输出为19。在另一个例子中,重复指令根据输入控制流作为输入值。例如,具有输入值432和控制流1、1、1、0的repeat32(重复32)指令将输出42的三个实例。在最后的示例中,onend指令概念上将输入流in上的输入值与控制流ctl上的信号匹配,在完成所有匹配时返回信号。例如,具有ctl输入1、1、1、0的onend指令将匹配值流in上的任何三个输入,并且当它在ctl中达到0时输出完成信号。实施例不限于这些示例。
[0026] 在循环指令的一个特定示例中,检测循环中的所有迭代构造,并且为它们中的每一个生成复合指令。结果,每个序列独立于其他序列运行。例如,在存储器复制循环中:对于(i=0;i
[0027] 编译器134可以在编译器134将控制流转换为数据流以搜索序列候选者(例如,挑选/开关对)之后运行优化操作,以用复合指令替换。在一个示例中,编译器134可以搜索对应于每个循环迭代增加/减少的值(例如指示变量)的挑选/开关对,并将该值转换为序列指令。编译器134还可以搜索剩余的兼容候选者,例如,挑选/开关对,以及到复合指令(诸如从属步长、重复或简化指令)。
[0028] 在实施例中,编译器134可以通过处理数据流图指令来执行优化操作以用复合指令替换序列候选者。更具体地,编译器134可以确定包括一个或多个挑选/开关指令集的数据流图指令以转换为一个或多个复合指令。例如,编译器134可以将控制流图指令转换为数据流图指令,并确定对数据流图指令执行优化操作。
[0029] 如前所述,编译器134可以在从控制流图指令转换为数据流图指令时利用挑选/开关指令对来替换循环指令。然后,编译器134可以在数据流图指令中搜索挑选/开关指令对,以找到用复合指令替换的候选者。数据流图指令可以是静态单赋值(single static assignment;SSA)形式,该形式是中间表示(IR)的属性,例如,IR要求每个变量都被精确地分配一次,并且每个变量在使用之前被定义。在SSA形式中,use-def链是显式的,并且每个use-def链包含单个元素。原始IR中的现有变量被拆分为版本,新变量通常由带有下标的原始名称指示,以便每个定义都得到自己的版本。为了搜索候选者,编译器134通过反转数据流控制图的边,基于数据流图指令来生成反向SSA图。
[0030] 编译器134可以通过反转SSA形式的数据流图的边的方向(流)来生成包括强连通分量(strongly connected component;SCC)的反向SSA图。在实施例中,循环中的迭代构造可以被示出为反向SSA中的SCC。在实施例中,SCC可以是每个节点通过经由边从反向SSA图中的每个其他节点可到达的地方。此外,反向SSA中的每个SCC可以与挑选/开关指令对相关联。编译器134可以使用深度优先(depth-first)算法深度优先地遍历反向SSA图以搜索与挑选/开关指令对相关联的SCC,例如,Tarjan的深度优先搜索算法,该算法用于在线性时间内找到反向SSA的SSC。可以使用其他算法(诸如Kosaraju的算法和基于路径的强分量算法)。实施例不限于此方式。反向的SSA图使快速线性深度优先算法能够通过代码在线性时间内快速搜索,以首先识别与归纳变量相关联的挑选/开关指令对(SCC_0),并且然后识别与归纳变量相关的指令(SCC_i)。图可以有大量纠缠的SCC。此外,所讨论的实施例使得编译器能够通过以根据我们在线性时间中的特定标准(例如,首先是归纳变量)的顺序识别图中的SCC来识别序列指令的候选者。
[0031] 此外,该想法是首先找到用于循坏归纳变量的SCC_0,生成用于SCC_0的序列复合指令I_0。然后是SCC_i,SCC_i对归纳变量的SCC具有数据依赖。当生成用于SCC_i的序列复合指令时,系统需要I_0的输出,因此顺序是关键的。
[0032] 编译器134可以确定与反向SSA中的挑选/开关指令对相关联的SCC,并确定SCC和挑选/开关指令对是否包括配置值。如果挑选/开关指令对包括配置值,则编译器134可以用数据流图指令中的复合指令替换挑选/开关指令。挑选/开关指令的配置值可以基于反向SSA(数据流图指令)和相关联的SCC中指定的值。在一个示例中,编译器134可以确定与用于归纳变量的挑选/开关指令对相关联的SCC包括配置值(诸如初始值、边界值和步长)。编译器134可以用复合指令(诸如序列指令)替换与归纳变量相关联的挑选/开关指令对。在实施例中,编译器134可以基于深度优先遍历来首先分析与归纳变量相关联的SCC。编译器134可以继续分析反向SSA并且针对每个SCC确定是否存在配置值。如果存在配置值,则编译器134可以用复合指令替换与SCC相关联的挑选/开关对。如果配置值不存在,则编译器134可以继续遍历反向SSA的剩余部分。在一个示例中,复制指令循环可以包括与地址相关联的SCC,该地址包括配置值,包括初始值、和步长。编译器134还可以利用一个或多个复合指令替换与地址相关联的挑选/开关指令。
[0033] 在一些实施例中,编译器134可以确定归纳变量和对应的挑选/开关指令对是仿射的还是非仿射的,例如,在输入和输出之间具有或不具有线性关系。在一些实施例中,编译器134可以确定归纳变量是仿射的并且生成多个复合指令以替换挑选/开关对,例如,三个复合指令可以替换用于复制循环指令的挑选/开关对。编译器134可以确定归纳变量不是仿射的并且利用单个复合指令替换挑选/开关对以驱动序列处理,例如,驱动序列简化用于复制循环指令的存储器地址的汇总和序列步长。实施例不限于这些示例。
[0034] 图2A图示了处理流程200的示例,该处理流程200可以表示由本文描述的一个或多个实施例执行的一些或所有操作。例如,处理流程200可以示出由计算设备100的一个或多个组件(例如,编译器134)执行的操作。然而,实施例不限于此方式,并且一个或多个其他组件可以执行操作以便启用和支持在该处理流程200中讨论的操作。
[0035] 在框202处,计算设备可以确定要编译和用于执行的源代码。如前所述,源代码可以用高级编程语言(诸如C、C++、FORTRAN等)编写并且在多个步骤中由编译器编译成要在计算设备上进行处理的数据流图指令。在框204处,计算设备可以发起源代码的编译。编译器可以处理源代码并从计算设备的特定区域的高级源代码生成中间表示(IR)。在一些实施例中,源代码可以在不同的计算设备上被转换为IR形式,并且被提供给编译器以用于CSA特定的编译。
[0036] 在实施例中,计算设备可以在框206处基于IR来生成控制流指令。在框208处,编译器还可以将控制流指令转换为数据流图指令。例如,编译器可以采用IR作为输入,优化IR并将IR编译成控制流图指令,然后将控制流图指令转换成计算设备(CSA)特定的汇编指令,例如,数据流图指令。编译器还针对性能添加了适当的缓冲和等待时间不敏感通道。
[0037] 在框210处,包括编译器的计算设备可以执行一个或多个优化,包括对数据流图指令的序列优化过程。如前所述,由于控制流指令到数据流图指令转换,某些代码构造(诸如循环)不是最佳的,因为值(诸如循环归纳变量)正在围绕循环的挑选/添加/比较/开关周期中流动。在CSA架构中,可以使用序列单元或复合指令优化这些类型的周期。为了利用复合指令,编译器在数据流转换之后运行一次优化以用数据流图指令(汇编)中的复合指令替换某些挑选/开关周期,如将参考图3A/图3B更详细地讨论的。编译器可以执行一个或多个优化,并将数据流图指令放置和路由到硬件结构上。
[0038] 图2B示出了在如图2A中所讨论的将源代码转换为数据流图指令(在优化之前)的处理流程期间的代码片段示例。注意,图2B示出了基于for循环来复制位置的一个示例;然而,实施例不限于这种方式,并且本文讨论的操作可以应用于不同的循环和控制流情况。
[0039] 在实施例中,包括编译器的计算设备可以将高级代码(诸如源代码片段252)转换为IR,并且然后在编译器操作期间转换成控制流图指令。处理和转换高级代码的能有助于消费者采用,因为它不需要消费者重写/转换旧代码和/或学习不同的编程语言。控制流图指令片段254可以由编译器基于循环代码252生成。控制流图指令可以包括许多不同类型的控制流代码,例如,直线代码、分支代码、和循环代码,这些代码可以转换为数据流图指令。实施例不限于该示例,并且可以针对不同的源代码生成不同的控制流代码。
[0040] 可以将控制流图指令片段254转换为数据流图指令片段256。如图2B所示,数据流图指令片段256包括基于用于循环指令的控制流片段254的多个挑选/开关对。这些挑选/开关对中的一个或多个可以用复合指令替换。
[0041] 图3A示出了对数据流图指令执行优化操作的一个示例性处理流程300,包括转换/替换一个或多个挑选/开关对。处理流程300可以示出由计算设备100的一个或多个组件(例如,编译器134)执行的操作。然而,实施例不限于此方式,并且一个或多个其他组件可以执行操作以便启用和支持在该处理流程300中讨论的操作。
[0042] 在框302处,计算设备可以确定要对其执行优化操作的数据流图指令。可以从源代码和控制流图指令生成数据流图指令,如前面在图2A和2B中所讨论的。在框304处,计算设备可以确定或生成数据流图,例如,将数据流图指令转换为如图3B所示出的图形式。数据流图可以表示操作之间的数据依赖性,其中操作由节点表示,并且数据依赖性由连接节点的边表示。此外,数据流图包括一个或多个SCC,其中节点中的每个节点可由每个其他节点到达,并且可以形成划分为强连接的子图。如图3B所示,数据流图332包括三个SSC 338-1至338-3,分别与加载指令、归纳变量和存储指令相对应。数据流图也可以是静态单赋值(SSA)形式,该形式是每个变量都被精确地分配一次并且每个变量在使用之前被定义的IR形式要求的属性。
[0043] 在框306处,计算设备可以基于数据流图来生成反向SSA图(反向数据流图)。例如,计算设备可以反转连接节点的数据流图的边的方向(流)。在一个示例中,如图3B中所示出的那样,数据流图332的边被反转以生成反向SSA图334。反向SSA图334包括通过沿反向流动方向的边连接的节点和一个或多个SCC。在图3B中,循环中的迭代构造可以被示出为反向SSA图334中的SCC 336-1至336-3。反向SSA图334中的每个SCC 336可以与挑选/开关指令对相关联。如所示出的,第一SCC 336-1与用于加载地址指令的挑选/开关对相关联,第二SCC 336-2与用于归纳变量的挑选/开关对相关联,且第三SCC 336-3与用于存储地址指令的挑选/开关对相关联。注意,实施例不限于该示例,其他示例可以包括更多或更少的SCC和挑选/开关对。
[0044] 在框308处,计算设备可以发起执行反向SSA图的遍历。更具体地,编译器可以使用深度优先算法(例如,Tarjan的深度优先搜索算法)深度优先地遍历反向SSA图以搜索与挑选/开关指令对相关联的SCC。
[0045] 在框310处,计算设备可以基于使用算法的遍历来确定和/或定位反向SSA图的SCC。更具体地,编译器可以确定与反向SSA图中的挑选/开关指令对相关联的SCC。如前所述,当在线性时间中利用深度优先遍历时,编译器首先基于反向SSA图的方向和边来确定与归纳变量相关联的SCC。此外,SSA图的反向方向确保首先发现SCC相关联的归纳变量,并且在发现归纳变量SCC之后,发现具有来自归纳变量的依赖性的与指令相关联的SCC。例如,当在框316处重复逻辑流程循环时,可以发现这些后续SCC。因此,如果SCC_0与归纳变量相关联,并且如果SCC_i(其中i是任何大于0的整数)取决于SCC_0,则将在SCC_i之前发现SCC_0且SCC_0可以驱动SCC_i。换句话说,SCC_0的复合指令的输出用于生成用于SCC_i的复合指令。
[0046] 在框312处,计算设备确定SCC和相关联的挑选/开关指令对是否包括配置值。如果挑选/开关指令对不包括配置值,则计算设备在框316处确定反向SSA图中是否剩余任何SCC用于分析。如果挑选/开关指令对包括配置值,则编译器可以在框314处用数据流图指令中的复合指令替换挑选/开关指令。挑选/开关指令的配置值可以基于反向SSA(数据流图指令)和相关联的SCC中指定的值。在一个示例中,编译器134可以确定与用于归纳变量的挑选/开关指令对相关联的SCC包括配置值(诸如初始值、边界值和步长)。编译器134可以用一个或多个复合指令(诸如序列指令)替换与归纳变量相关联的挑选/开关指令对。
[0047] 在实施例中,编译器可以基于深度优先遍历来首先分析与归纳变量相关联的SCC。在一些实例中,编译器可以确定归纳变量和对应的挑选/开关指令对是仿射的还是非仿射的,例如,在输入和输出之间具有或不具有线性关系。如果编译器确定归纳变量是仿射的,则编译器生成多个复合指令以替换挑选/开关对,例如,三个复合指令可替换用于复制循环指令块的挑选/开关对,如图3C的代码片段350中所示。然而,如果编译器确定归纳变量不是仿射的,则编译器用单个复合指令替换挑选/开关对以驱动序列处理,例如,驱动序列简化用于复制循环指令的存储器地址的汇总和序列步长,如图3D的代码片段370所示。实施例不限于这些示例。
[0048] 在框316处,计算设备确定是否剩余任何SCC用于分析。更具体地,编译器继续遍历反向SSA图的剩余部分。例如并参考图3B,编译器可以首先分析与归纳变量相关联的SCC 336-2,然后分析与加载和存储地址指令相关联的SCC 336-1和SCC 336-3。如果编译器确定地址指令中的一个或多个包括配置值(诸如初始值和步长),则编译器用复合指令(例如,序列指令)替换地址指令的挑选/开关对以生成地址序列。
[0049] 图4图示了逻辑流程400的示例,该逻辑流程400可以表示由本文描述的一个或多个实施例执行的一些或所有操作。例如,逻辑流程400可以示出由包括如本文所述的编译器的系统执行的操作。
[0050] 在框405处,逻辑流程400包括确定具有一个或多个挑选/开关指令对的数据流图指令。在实施例中,可以基于编译器针对分支和循环指令集在控制流图指令和数据流图指令之间执行转换来生成挑选/开关指令对。例如,编译器可以在循环的末端插入开关以将值从循环导出(从循环出口出来或围绕后边缘到循环的开始),并在循环的开始处插入挑选,以在进入循环的初始值和通过后边缘的值之间进行选择。此外,概念上围绕循环(i和sum)周期循环的每个变量可以具有控制值的流动的对应挑选/开关对。然而,如前所述,这些挑选/开关对周期未被优化并且可能导致瓶颈。
[0051] 在框410处,逻辑流程400包括基于数据流图指令生成反向静态单赋值图。在实施例中,反向静态单赋值图可以包括强连通分量,并且每个强连通分量与该一个或多个挑选/开关指令对中的至少一个挑选/开关指令对相关联。例如,可以通过基于数据流图指令反转数据流图来生成反向静态单赋值图。逻辑流程400包括在框415处深度优先地遍历反向静态单赋值图,并且用复合指令替换与具有配置值的强连通分量相关联的挑选/开关指令。
[0052] 图5示出了适用于实现之前所述的各实施例的示例性计算架构500的实施例。在实施例中,计算架构500可以包括或被实现为例如节点的一部分。
[0053] 如本申请中所使用的,术语“系统”和“组件”旨在指计算机相关实体、或者硬件、硬件和软件的组合、软件、或执行中的软件,由示例性计算架构500来提供其示例。例如,组件可以是但不限于在处理器上运行的进程、处理器、硬盘驱动器、(光学和/或磁存储介质的)多个存储驱动、对象、可执行文件、执行线程、程序和/或计算机。作为说明,在服务器上运行的应用和该服务器两者都可以是组件。一个或多个组件可以驻留在进程和/或执行线程内,并且组件可以位于一台计算机上并分布在两台或更多台计算机之间。进一步地,组件可以通过各种类型的通信介质彼此通信地耦合以协调操作。该协调可以涉及单向或双向信息交换。例如,组件能以在通信介质上传递的信号的形式来传递信息。该信息可以实现为分配给各信号线的信号。在这种分配中,每个消息都是信号。然而,另外的实施例可以替代地采用数据消息。可以跨越各种连接发送这样的数据消息。示例性连接包括并行接口、串行接口和总线接口。
[0054] 计算架构500包括各种公共计算元件,比如一个或多个处理器、多核处理器协处理器、存储单元、芯片组、控制器、外围设备、接口、振荡器、定时设备、视频卡、音频卡、多媒体输入/输出(I/O)组件、电源等。然而,实施例不限于由计算架构500实现。
[0055] 如图5所示,计算架构500包括处理单元504、系统存储器506和系统总线508。处理单元504可以是各种可商购的处理器中的任一种。
[0056] 系统总线508为系统组件(包括但不限于系统存储器506到处理单元504)提供接口。系统总线508可以是几种类型的总线结构中的任何一种,其可以进一步使用各种可商购的总线架构中的任何一种互连到存储器总线(具有或没有存储器控制器)、外围总线和局部总线。接口适配器可以经由插槽架构连接到系统总线508。示例槽架构可以包括但不限于加速图形端口(AGP)、卡总线、(扩展)工业标准架构((E)ISA)、微通道架构(MCA)、网络用户总线(NuBus)、外围组件互连(扩展式)(PCI(X))、PCI快速、个人计算机存储卡国际协会(PCMCIA)等。
[0057] 计算架构500可以包括或实现各种制品。制品可以包括用于存储逻辑的计算机可读存储介质。计算机可读存储介质的示例可以包括能够存储电子数据的任何有形介质,包括易失性存储器或非易失性存储器、可移除存储器或不可移除存储器、可擦除存储器或不可擦除存储器、可写存储器或可重写存储器等。逻辑的示例可以包括使用任何合适类型的代码(比如源代码、编译代码、解释代码、可执行代码、静态代码、动态代码、面向对象代码、可视代码等)实现的可执行计算机程序指令。实施例还可以至少部分地实现为包含在非瞬态计算机可读介质之中或之上的指令,所述指令可以由一个或多个处理器读取和执行以使得能够执行本文描述的操作。
[0058] 系统存储器506可以包括各种类型的一个或多个更高速存储器单元形式的计算机可读存储介质,如只读存储器(ROM)、随机存取存储器(RAM)、动态RAM(DRAM)、双倍数据速率DRAM(DDRAM)、同步DRAM(SDRAM)、静态RAM(SRAM)、可编程ROM(PROM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、快闪存储器、聚合体存储器(如聚合物存储器)、双向存储器、相变或铁电存储器、氮氧硅(SONOS)存储器、磁性或光学卡、设备阵列(如独立磁盘冗余阵列(RAID))驱动、固态存储器驱动(例如,USB存储器)、固态驱动(SSD)和适用于存储信息的任何其他类型的存储介质。在图5所示的所示出的实施例中,系统存储器506可以包括非易失性存储器510和/或易失性存储器512。基本输入/输出系统(BIOS)可以存储在非易失性存储器510中。
[0059] 计算机502可包括一个或多个较低速的存储器单元的形式的各种类型的计算机可读存储介质,包括内置(或外置)硬盘驱动器(HDD)514、用于读写可移动磁盘516的磁软盘驱动器(FDD)516、以及用于读写可移动光盘522(例如,CD-ROM或DVD)的光盘驱动器520。HDD 514、FDD 516和光盘驱动器520可以分别通过HDD接口524、FDD接口526和光盘驱动器接口
526连接到系统总线508。用于外部驱动器实现的HDD接口524可以包括通用串行总线(USB)和IEEE 1394接口技术中的至少一者或两者。
[0060] 驱动器以及相关联的计算机可读介质提供数据、数据结构、计算机可执行指令等的易失性和非易失性存储设备。例如,多个程序模块可以存储在驱动器和存储器单元510、512中,包括操作系统530、一个或多个应用程序532、其他程序模块534和程序数据536。在一个实施例中,一个或多个应用程序532、其他程序模块534和程序数据536可以包括例如系统
100的各种应用和/或组件。
[0061] 用户可以通过一个或多个有线/无线输入设备(例如,键盘538和指示设备,比如鼠标540)将命令和信息输入到计算机502中。其他输入设备可以包括麦克、红外(IR)远程控制、射频(RF)远程控制、游戏板、手写笔、读卡器、软件狗(Dongle)、指纹打印读取器、手套、图形输入板、操纵杆、键盘、视网膜读取器、触摸屏(例如,电容式、电阻式等)、轨迹球、轨迹板、传感器触控笔等等。这些和其他输入设备经常通过输入设备接口542连接到处理单元504,所述输入设备接口542耦合到系统总线508,但是可以通过诸如并行端口、IEEE 1394串行端口、游戏端口、USB端口、IR接口等之类的其他接口连接。
[0062] 监视器544或其他类型的显示设备也经由接口(诸如视频适配器546)连接至系统总线508。监视器544可以在计算机502的内部或外部。除了监视器544之外,计算机通常包括其他外围输出设备(诸如扬声器、打印机等)。
[0063] 计算机502可以使用经由到一个或多个远程计算机(诸如远程计算机548)的有线和/或无线通信的逻辑连接在联网环境中操作。远程计算机548可以是工作站、服务器计算机、路由器、个人计算机、便携式计算机、基于微处理器的娱乐设备、对等设备或其他公共网络节点,并且通常包括相对于计算机502描述的许多或全部元件,尽管为了简洁的目的,仅展示了存储器/存储设备550。所描绘的逻辑连接包括至局域网(LAN)552和/或更大的网络(例如,广域网(WAN)554)的有线/无线连通性。这种LAN和WAN联网环境在办公室和公司中是常见的,并且便于企业范围的计算机网络(诸如内联网),所有这些网络都可以连接到全球通信网络(例如互联网)。
[0064] 当在LAN连网环境中使用时,计算机502通过有线和/或无线通信网络接口或适配器556连接至LAN 552。适配器556可以促进到LAN 552的有线和/或无线通信,LAN 552还可以包括布置在其上的用于与适配器556的无线功能通信的无线接入点。
[0065] 当在WAN联网环境中使用时,计算机502可以包括调制解调器558,或者连接到WAN 554上的通信服务器,或者具有用于通过WAN 554例如通过互联网建立通信的其他装置。可以是内部或外部的和有线和/或无线设备的调制解调器558经由输入设备接口542连接到系统总线508。在联网环境中,相对于计算机502描绘的程序模块或其部分可以被存储在远程存储器/存储设备550中。应当理解,所示网络连接是示例性的,并且可以使用在计算机之间建立通信链路的其他装置。
[0066] 计算机502可操作以使用IEEE 502标准家族与有线或无线设备或实体进行通信,如无线设备操作性地布置在无线通信(例如,IEEE 502.11无线调制技术)中。这至少包括Wi-Fi(或无线保真)、WiMax以及蓝牙无线技术等等。因此,通信可以是与传统网络一样的预定义结构或简单地是至少两个设备之间的自组织(ad hoc)通信。Wi-Fi网络使用被称为IEEE 502.116(a,b,g,n等)的无线电技术来提供安全、可靠、快速的无线连接。Wi-Fi网络可用于将计算机彼此连接、连接到互联网以及连接到有线网络(使用IEEE 502.3相关的介质和功能)。
[0067] 如前面参考图1至图5所描述的设备的各元件可以包括各种硬件元件、软件元件或两者的组合。硬件元件的示例可以包括:设备、逻辑设备、部件、处理器、微处理器、电路、处理器、电路元件(例如,晶体管、电阻器、电容器、电感器等)、集成电路、专用集成电路(ASIC)、可编程逻辑器件(PLD)、数字信号处理器(DSP)、现场可编程阵列(FPGA)、存储单元、逻辑门、寄存器、半导体器件、芯片、微芯片、芯片组等。软件元件的示例可以包括:软件组件、程序、应用、计算机程序、应用程序、系统程序、软件开发程序、机器程序、操作系统软件中间件固件软件模块、例程、子例程、函数、方法、过程、软件接口、应用程序接口(API)、指令集、计算代码、计算机代码、代码段、计算机代码段、字、值、符号或其任何组合。然而,判定是否是使用硬件元件和/或软件元件来实现实施例可以根据多个因数而变化,如给定的实现方式所期望的,如期望的计算速率、功率电平、耐热性、处理周期预算、输入数据速率、输出数据速率、存储器资源、数据总线速度以及其他设计或性能约束。
[0068] 详细的公开现在变为提供与进一步的实施例有关的示例。以下提供的示例一到二十五(1-25)旨在是示例性的而非限制性的。
[0069] 在第一示例中,装置、设备、系统等可以包括:存储器,该存储器用于存储指令;以及与存储器耦合的处理电路,该处理电路可操作用于执行指令,当该指令被执行时,使得处理电路能够用于确定包括一个或多个挑选/开关指令对的数据流图指令,基于该数据流图指令生成反向静态单赋值图,该反向静态单赋值图包括强连通分量,强连通分量中的每一个强连通分量与该一个或多个挑选/开关指令对中的至少一个挑选/开关指令对相关联,并且深度优先地遍历反向静态单赋值图,并用复合指令替换与具有配置值的强连通分量相关联的挑选/开关指令。
[0070] 在第二示例中并且对于第一示例进一步而言,装置、设备、系统等可以包括:处理电路用于确定与归纳变量相关联的强连通分量具有包括初始值、边界值、和步长的配置值,并用一个或多个复合指令替换与归纳变量相关联的挑选/开关指令。
[0071] 在第三示例中并且对于前述示例中的任一项进一步而言,装置、设备、系统等可以包括:处理电路用于确定归纳变量是仿射的还是线性的,响应于确定归纳变量是仿射的,用多个复合指令替换与归纳变量相关联的挑选/开关指令,并且响应于确定归纳变量是线性的,用单个复合指令替换与归纳变量相关联的挑选/开关指令以在执行期间驱动一个或多个其他指令的步长。
[0072] 在第四示例中并且对于前述示例中的任一项进一步而言,装置、设备、系统等可以包括:处理电路用于确定与地址相关联的强连通分量具有包括初始值、和步长的配置值,并用一个或多个复合指令替换与地址相关联的挑选/开关指令。
[0073] 在第五示例中并且对于前述示例中的任一项进一步而言,装置、设备、系统等可以包括:处理电路用于在反向静态单赋值图的生成之前针对数据流图指令生成数据流图,并通过反转数据流图的边的流向来生成反向静态单赋值图。
[0074] 在第六示例中并且对于前述示例中的任一项进一步而言,装置、设备、系统等可以包括:处理电路用于当深度优先地遍历反向静态单赋值图时,在处理一个或多个地址指令的强连通分量之前,处理归纳变量的强连通分量。
[0075] 在第七示例中并且对于前述示例中的任一项进一步而言,装置、设备、系统等可以包括:处理电路用于其中数据流图指令基于高级计算机编程语言中的一个或多个循环指令。
[0076] 在第八示例中并且对于前述示例中的任一项进一步而言,装置、设备、系统等可以包括:处理电路用于其中该一个或多个复合指令中的每一个复合指令包括序列指令、序列简化指令、重复指令、序列步长指令、嵌套重复指令、过滤指令、替换指令和复制指令中的一者。
[0077] 在第九示例中并且对于前述示例中的任一项进一步而言,装置、设备、系统等可以包括:处理电路用于其中处理电路可操作用于在可配置空间加速器的编译操作期间执行该一个或多个指令以执行高性能计算,该可配置空间加速器包括由网络耦合的处理元件的阵列。
[0078] 在第十示例中并且对于前述示例中的任一项进一步而言,一种用于执行编译器优化的计算机实现的方法可以包括:确定包括一个或多个挑选/开关指令对的数据流图指令,基于数据流图指令生成反向静态单赋值图,该反向静态单赋值图包括强连通分量,强连通分量中的每一个强连通分量与该一个或多个挑选/开关指令对中的至少一个挑选/开关指令对相关联,并且深度优先地遍历反向静态单赋值图,并且用复合指令替换与具有配置值的强连通分量相关联的挑选/开关指令。
[0079] 在第十一示例中并且对于前述示例中的任一项进一步而言,一种用于执行编译器优化的计算机实现的方法可以包括:确定与归纳变量相关联的强连通分量具有包括初始值、边界值、和步长的配置值,并用一个或多个复合指令替换与归纳变量相关联的挑选/开关指令。
[0080] 在第十二示例中并且对于前述示例中的任一项进一步而言,一种用于执行编译器优化的计算机实现的方法可以包括确定归纳变量是仿射的还是线性的。响应于确定归纳变量是仿射的,用多个复合指令替换与归纳变量相关联的挑选/开关指令,并且响应于确定归纳变量是线性的,用单个复合指令替换与归纳变量相关联的挑选/开关指令以在执行期间驱动一个或多个其他指令的步长。
[0081] 在第十三示例中并且对于前述示例中的任一项进一步而言,一种用于执行编译器优化的计算机实现的方法可以包括:确定与地址相关联的强连通分量具有包括初始值、和步长的配置值,并用一个或多个复合指令替换与地址相关联的挑选/开关指令。
[0082] 在第十四示例中并且对于前述示例中的任一项进一步而言,一种用于执行编译器优化的计算机实现的方法可以包括:在反向静态单赋值图的生成之前针对数据流图指令生成数据流图,并通过反转数据流图的边的流向来生成反向静态单赋值图。
[0083] 在第十五示例中并且对于前述示例中的任一项进一步而言,一种用于执行编译器优化的计算机实现的方法可以包括:当深度优先地遍历反向静态单赋值图时,在处理一个或多个地址指令的强连通分量之前,处理归纳变量的强连通分量。
[0084] 在第十六示例中并且对于前述示例中的任一项进一步而言,一种用于执行编译器优化的计算机实现的方法可以包括:处理该一个或多个复合指令中的每一个复合指令,包括序列指令、序列简化指令、重复指令、序列步长指令、嵌套重复指令、过滤指令、替换指令和复制指令中的一者。
[0085] 在第十七示例中并且对于前述示例中的任一项进一步而言,一种用于执行编译器优化的计算机实现的方法可以包括:基于高级计算机编程语言中的一个或多个循环指令来处理数据流图指令。
[0086] 在第十八示例中并且对于前述示例中的任一项进一步而言,一种包括多个指令的非瞬态计算机可读存储介质,当该指令被执行时,使得处理电路能够用于:确定包括一个或多个挑选/开关指令对的数据流图指令,基于数据流图指令生成反向静态单赋值图,该反向静态单赋值图包括强连通分量,强连通分量中的每一个强连通分量与该一个或多个挑选/开关指令对中的至少一个挑选/开关指令对相关联,并且深度优先地遍历反向静态单赋值图,并且用复合指令替换与具有配置值的强连通分量相关联的挑选/开关指令。
[0087] 在第十九示例中并且对于前述示例中的任一项进一步而言,一种包括多个指令的非瞬态计算机可读存储介质,当该指令被执行时,使得处理电路能够用于:确定与归纳变量相关联的强连通分量具有包括初始值、边界值、和步长的配置值,并用一个或多个复合指令替换与归纳变量相关联的挑选/开关指令。
[0088] 在第二十示例中并且对于前述示例中的任一项进一步而言,一种包括多个指令的非瞬态计算机可读存储介质,当该指令被执行时,使得处理电路能够用于:确定归纳变量是仿射的还是线性的,响应于确定归纳变量是仿射的,用多个复合指令替换与归纳变量相关联的挑选/开关指令,并且响应于确定归纳变量是线性的,用单个复合指令替换与归纳变量相关联的挑选/开关指令以在执行期间驱动一个或多个其他指令的步长。
[0089] 在第二十一示例中并且对于前述示例中的任一项进一步而言,一种包括多个指令的非瞬态计算机可读存储介质,当该指令被执行时,使得处理电路能够用于:确定与地址相关联的强连通分量具有包括初始值、和步长的配置值,并用一个或多个复合指令替换与地址相关联的挑选/开关指令。
[0090] 在第二十二示例中并且对于前述示例中的任一项进一步而言,一种包括多个指令的非瞬态计算机可读存储介质,当该指令被执行时,使得处理电路能够用于:在反向静态单赋值图的生成之前针对数据流图指令生成数据流图,并通过反转数据流图的边的流向来生成反向静态单赋值图。
[0091] 在第二十三示例中并且对于前述示例中的任一项进一步而言,一种包括多个指令的非瞬态计算机可读存储介质,当该指令被执行时,使得处理电路能够用于:当深度优先地遍历反向静态单赋值图时,在处理一个或多个地址指令的强连通分量之前,处理归纳变量的强连通分量。
[0092] 在第二十四示例中并且对于前述示例中的任一项进一步而言,一种包括多个指令的非瞬态计算机可读存储介质,当该指令被执行时,使得处理电路能够用于:基于高级计算机编程语言中的一个或多个循环指令来处理数据流图指令。
[0093] 在第二十五示例中并且对于前述示例中的任一项进一步而言,一种包括多个指令的非瞬态计算机可读存储介质,当该指令被执行时,使得处理电路能够用于:处理该一个或多个复合指令中的每一个复合指令,包括序列指令、序列简化指令、重复指令、序列步长指令、嵌套重复指令、过滤指令、替换指令和复制指令中的一者。
[0094] 一些实施例可使用表述“一个实施例”和“实施例”及其派生词来描述。这些术语意味着与实施例相联系地描述的具体特征、结构或者特性被包含在至少一个实施例中。在本说明书中的不同位置处出现短语“在一个实施例中”不一定全都指同一个实施例。进一步地,一些实施例可使用表述“耦合(coupled)”和“连接(connected)”及其派生词来描述。这些术语并不必旨在作为彼此的同义词。例如,一些实施例可使用术语“连接”和/或“耦合”来描述,以指示两个或更多个要素彼此直接物理接触或电气接触。然而,术语“耦合”还可以指两个或更多个要素彼此未直接接触,但仍然彼此进行合作或交互。
[0095] 强调的是,提供本公开的摘要以允许读者快速判定本技术公开的本质。提交该摘要,并且理解该摘要将不用于解释或限制权利要求书的范围或含义。此外,在前述具体实施方式中可以看出,为了使本公开流畅,在单个实施例中,将各个特征成组到一起。这种公开方法不应被解释为反映要求保护的实施例与各项权利要求中明确记载的相比需要更多的特征的意图。相反,如以下权利要求所反映,发明主题在于少于单个公开的实施例的全部特征。因此,以下的权利要求书据此被并入详细的说明书中,其中,每项权利要求独立自主地作为单独的实施例。在所附权利要求中,术语“包括(including)”和“其中(in which)”分别被用作相应的术语“包括(including)”和“其中(wherein)”的简明英语对等词。另外,术语“第一”、“第二”、“第三”等仅被用作标签,而不意图对它们的目标强加数值要求。
[0096] 以上所描述的内容包括所公开的架构的示例。当然,不可能描述组件和/或方法的每个可想到的组合,但是本领域普通技术人员可以认识到许多其他组合和置换是可能的。相应地,本新颖的架构旨在涵盖落入所附权利要求书的精神和范围内的全部这种变更、修改和变体。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈