CN103348317B - 减少64位计算机程序循环中符号扩展指令的需求驱动算法 - Google Patents
减少64位计算机程序循环中符号扩展指令的需求驱动算法 Download PDFInfo
- Publication number
- CN103348317B CN103348317B CN201280006681.1A CN201280006681A CN103348317B CN 103348317 B CN103348317 B CN 103348317B CN 201280006681 A CN201280006681 A CN 201280006681A CN 103348317 B CN103348317 B CN 103348317B
- Authority
- CN
- China
- Prior art keywords
- sei
- operand
- loop structure
- computer program
- compiler
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000004590 computer program Methods 0.000 title claims abstract description 22
- 238000004422 calculation algorithm Methods 0.000 title description 4
- 238000000034 method Methods 0.000 claims abstract description 55
- 238000005457 optimization Methods 0.000 claims abstract description 8
- 230000004087 circulation Effects 0.000 claims description 35
- PXFBZOLANLWPMH-UHFFFAOYSA-N 16-Epiaffinine Natural products C1C(C2=CC=CC=C2N2)=C2C(=O)CC2C(=CC)CN(C)C1C2CO PXFBZOLANLWPMH-UHFFFAOYSA-N 0.000 claims description 5
- 230000008859 change Effects 0.000 claims description 5
- 230000006698 induction Effects 0.000 claims description 4
- 238000012545 processing Methods 0.000 description 23
- 230000015654 memory Effects 0.000 description 21
- 238000013507 mapping Methods 0.000 description 10
- 238000004891 communication Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 239000007787 solid Substances 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 238000000151 deposition Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000007727 cost benefit analysis Methods 0.000 description 1
- 238000010304 firing Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000000630 rising effect Effects 0.000 description 1
- 230000001502 supplementing effect Effects 0.000 description 1
- 230000001629 suppression Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/456—Parallelism detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
- G06F8/4442—Reducing the number of cache misses; Data prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/445—Exploiting fine grain parallelism, i.e. parallelism at instruction level
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本发明的一个实施例阐述了用于减少包括在计算机程序中的符号扩展指令(SEI)的技术,该技术涉及:接收中间代码,该中间代码与计算机程序相关联并包括被包括在计算机程序内的循环结构中的第一SEI;确定第一SEI适格被移动到循环结构之外;将第二SEI插入到循环的前置头中,该第二SEI当由处理器所执行时,将由第一SEI定为目标的初始值从较小类型提升到较大类型;以及用适格于附加的编译器优化的一个或多个中间指令替换第一SEI。
Description
相关申请的交叉引用
本申请要求于2011年11月7日提交的序列号为61/556,782的美国临时专利申请、以及于2012年10月26日提交的序列号为13/661,478的美国专利申请的优先权。在此通过援引的方式对这些申请的每一个加以合并。
技术领域
本发明总地涉及计算机处理,并且更具体地,涉及减少包括在64位计算机程序的循环(loop)中的符号扩展指令的需求驱动算法。
背景技术
开发者使用编译器来从高级源代码生成可执行程序。一般地,编译器配置为接收程序的高级源代码(例如以C++或Java所编写)、确定程序将在其上执行的目标硬件平台(例如x86处理器)、以及随后将高级源代码转译成可在目标硬件平台上执行的汇编级代码。该配置提供以下优点:使开发者能够编写单一高级源代码程序以及随后将该程序的目标定为跨多种硬件平台而执行,诸如移动设备、个人计算机或服务器。
通常,编译器包括三个部件:前端、中端和后端。前端配置为确保高级源代码满足编程语言语法和语义,于是前端单元生成高级源代码的第一中间表示(intermediaterepresentation,IR)。中端配置为接收和优化第一IR,其通常涉及例如如果存在任何包括在第一IR中的不可达代码的话,移除该不可达代码。在优化第一IR后,中端生成第二IR用于后端来处理。具体来讲,后端接收第二IR并将第二IR转译成汇编级代码。汇编级代码包括在作为目标硬件平台的一部分的处理器上可直接执行的低级汇编指令。
在一些情况下,程序在“64位模式”下执行,其中基本存储器地址是64位值(例如int64变量)并且存储器偏移是32位值(例如int32变量)。因此,典型的地址计算,例如关于特定的阵列索引,要求将32位存储器偏移加到64位基本地址。对于实施该加法的处理器来说,该处理器必须首先将32位存储器偏移转换成64位存储器偏移,使得与存储器偏移相关联的位数和与64位基本地址相关联的位数对齐。这种转换在本文称为“符号扩展(sign-extension)”,具体来讲,其涉及增加二进制数的位数同时保留数的符号(即正/负)和值。
虽然符号扩展操作不是非常高成本的操作,但包括在循环中的符号扩展操作抑制重要的被称为“循环强度缩小”的循环优化。注意,在“64位模式”下执行的几乎所有代码都包括相当多的循环,这些循环的许多包括符号扩展指令。一种用于消除在循环之内的32位变量到64位变量的符号扩展的技术,涉及通过在循环的前置头(preheader)中实施符号扩展来在循环外将变量转换成64位变量以及用针对所提升的变量的64位操作来替换针对初始32位变量的所有32位操作。然而该变换做出重要的假定,即没有初始32位操作使整数溢出。该假定对于类似C和C++的普通编程语言有效,在该类语言中未定义依赖于有符号的算术运算符的溢出的任何程序。针对64位寄存器和操作没有额外成本的架构,这种优化总是有优势的。然而,针对64位寄存器和操作要求附加资源的架构,必须进行仔细的考虑,并且对选择性地挑选该优化的成本收益分析是可取的,这是因为64位寄存器和操作的使用可增加寄存器不足并消耗更多周期。
因此,本领域所需要的是用于使用成本收益分析来识别符号扩展指令以消除的技术,以及用于针对程序的低级中间表示(IR)实施变换的方法。
发明内容
本发明的一个实施例阐述了用于减少包括在计算机程序中的符号扩展指令(SEI)的方法。方法包括以下步骤:接收中间代码,所述中间代码与计算机程序相关联并包括被包括在计算机程序内的循环结构中的第一SEI;确定第一SEI适格被移动到循环结构之外;将第二SEI插入到循环的前置头中,该第二SEI当由处理器所执行时,将由第一SEI定为目标的初始值从较小类型提升到较大类型;以及用适格于附加的编译器优化的一个或多个中间指令替换第一SEI。
所公开的实施例的一个优点是,编译器自动识别包括在计算机程序的循环中的符号扩展指令并在其初始被包括在其中的循环之外置换(displace)符号扩展指令。编译器随后修改在循环之内的指令以说明所移除的符号扩展指令使得计算机程序的正确性保持完整。因此,处理器执行程序所要求的时钟周期数目可减少,这与整体功率节省直接相关。
附图说明
因此,可以详细地理解本发明的上述特征,并且可以参考实施例得到对如上面所简要概括的本发明更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅示出了本发明的典型实施例,因此不应被认为是对其范围的限制,本发明可以具有其他等效的实施例。
图1是示出了配置为实现本发明的一个或多个方面的计算机系统的框图。
图2A-2D示出了根据本发明的一个实施例的、用于减少包括在64位计算机程序的循环中的符号扩展指令的方法步骤的流程图。
具体实施方式
在下面的描述中,将阐述大量的具体细节以提供对本发明更透彻的理解。然而,本领域的技术人员应该清楚,本发明可以在没有一个或多个这些具体细节的情况下得以实施。
系统概述
图1为示出了配置为实现本发明的一个或多个方面的计算机系统100的框图。计算机系统100包括经由可以包括存储器桥105的互连路径通信的中央处理单元(CPU)102和系统存储器104。存储器桥105可以是例如北桥芯片,经由总线或其他通信路径106(例如超传输(HyperTransport)链路)连接到I/O(输入/输出)桥107。I/O桥107可以是例如南桥芯片,从一个或多个用户输入设备108(例如键盘、鼠标)接收用户输入并且经由通信路径106和存储器桥105将该输入转发到CPU102。并行处理子系统112经由总线或第二通信路径113(例如外围部件互连(PCI)Express、加速图形端口或超传输链路)耦连到存储器桥105;在一个实施例中,并行处理子系统112是将像素传递到显示设备110的图形子系统,该显示设备110可以是任何传统的阴极射线管、液晶显示器、发光二极管显示器等等。系统盘114也连接到I/O桥107并可配置为存储用于由CPU102和并行处理子系统112使用的内容和应用和数据。系统盘114提供用于应用和数据的非易失性存储并可包括固定的或可移动的硬盘驱动器、闪存设备以及CD-ROM(压缩光盘只读存储器)、DVD-ROM(数字通用光盘ROM)、蓝光、HD-DVD(高清晰度DVD)或其他磁式、光学或固态存储设备。
交换器116提供I/O桥107与诸如网络适配器118以及各种插卡120和121的其他部件之间的连接。其他部件(未明确示出),包括通用串行总线(USB)或其他端口连接、压缩光盘(CD)驱动器、数字通用光盘(DVD)驱动器、胶片录制设备及类似部件,也可以连接到I/O桥107。图1所示的各种通信路径包括具体命名的通信路径106和113可以使用任何适合的协议实现,诸如PCI Express、AGP(加速图形端口)、超传输或者任何其他总线或点到点通信协议,并且如本领域已知的,不同设备间的连接可使用不同协议。
在一个实施例中,并行处理子系统112包含经优化用于图形和视频处理的电路,包括例如视频输出电路,并且构成图形处理单元(GPU)。在另一个实施例中,并行处理子系统112包含经优化用于通用处理的电路,同时保留底层(underlying)的计算架构,本文将更详细地进行描述。在又一个实施例中,可以将并行处理子系统112与一个或多个其他系统元件集成在单个子系统中,诸如结合存储器桥105、CPU102以及I/O桥107,以形成片上系统(SoC)。
在一个实施例中,并行处理子系统112包括一个或多个并行处理单元(PPU),每个并行处理单元耦连到本地并行处理(PP)存储器。通常,并行处理子系统112包括U个PPU,其中U>=1。在一些实施例中,并行处理子系统112中的一些或所有PPU是具有渲染管线的图形处理器,其可以配置为实施与下述有关的各种操作:经由存储器桥105和第二通信路径113从CPU102和/或系统存储器104所供应的图形数据生成像素数据,与本地并行处理存储器(可被用作图形存储器,包括例如常规帧缓冲区(buffer))交互以存储和更新像素数据,传递像素数据到显示设备110等等。在一些实施例中,并行处理子系统112可包括一个或多个作为图形处理器而操作的PPU以及一个或多个用于通用计算的其他PPU。这些PPU可以是同样的或不同的,并且每个PPU可具有专用并行处理存储器设备或不具有专用并行处理存储器设备。
应该理解,图1的系统是示例性的,并且变化和修改都是可能的。连接拓扑,包括桥的数目和布置、CPU102的数目以及并行处理子系统112的数目,可根据需要修改。例如,在一些实施例中,系统存储器104直接连接到CPU102而不是通过桥,并且其他设备经由存储器桥105和CPU102与系统存储器104通信。在其他替代性拓扑中,并行处理子系统112连接到I/O桥107或直接连接到CPU102,而不是连接到存储器桥105。而在其他实施例中,I/O桥107和存储器桥105可能被集成到单个芯片上而不是作为一个或多个分立设备存在。大型实施例可以包括两个或两个以上的CPU102以及两个或两个以上的并行处理子系统112。本文所示的特定部件是可选的;例如,任何数目的插卡或外围设备都可能得到支持。在一些实施例中,交换器116被去掉,网络适配器118和插卡120、121直接连接到I/O桥107。
减少包括在64位计算机程序的循环中的符号扩展指令
如本文更详细所阐述的,本发明涉及在图1的计算机系统100上执行的编译器150。编译器150配置为实现算法以简化构成计算机程序的中间指令。具体来讲,编译器150配置为识别包括至少一个适格被移动到循环之外的符号扩展指令的中间代码中的循环。循环以最内层循环优先顺序处理。下面是编译器150处理中间代码的方式的详细描述。
图2A-2D示出了根据本发明的一个实施例的、用于减少包括在64位计算机程序的循环中的符号扩展指令的方法步骤200的流程图。虽然结合图1的系统来描述方法步骤,但本领域的普通技术人员应理解的是,配置为以任何顺序实施方法步骤的任何系统均在本发明的范围内。
如图2A所示,方法200在步骤202开始,其中编译器150接收包括至少一个循环的计算机程序的中间代码。在步骤204,编译器150初始化具有(键)→(值)格式的(v1,<类型>)→(v2)的映射表,其中v2是v1的经符号扩展的值并且v2类型是<类型>。“类型”的示例包括int32(即32位整数)和int64(即64位整数)。例如,如果v1是32位整数,那么(v1,int64)→(v2)意思是v2是v1的32位整数值的64位整数表示。v2相当于v1的符号扩展并可用来代替这种符号扩展。
在步骤206,编译器150设置当前循环以最内层循环优先顺序指向中间代码的第一循环。在一个示例中,中间代码如下所示:
在上述示例中,中间代码的第一循环是循环的“主体(body)”并包括6个单独的指令。因此,在首次经过步骤206后,当前循环指向“主体”循环。在步骤208,编译器150确定当前循环是否包括至少一个“t1=sxt(t2)”形式的符号扩展指令(SEI)。在上述示例中,中间指令“temp1.i64=sxt(i1.i32)”满足步骤208的标准。在该示例中,指令“temp1.i64=sxt(i1.i32)”防止表达式“4*tmp1.i64”的强度减少。因此,编译器150的目标是修改在步骤202所接收的中间代码,使得通过将i1.i32提升到64位值来消除“i1.i32”的符号扩展。如果在步骤208,编译器150确定当前循环包括至少一个“t1=sxt(t2)”形式的SEI,那么方法200前进到步骤210。否则,方法200前进到图2B的步骤218,该步骤如下文所阐述,涉及确定在中间代码中是否包括可能包括符号扩展指令的附加的循环。
在步骤210,编译器150设置当前SEI指向当前循环的第一SEI。以上文示例继续,在首次经过步骤210后当前SEI将指向SEI“temp1.i64=sxt(i1.i32)”。在步骤212,编译器150确定当前SEI(即“temp1.i64=sxt(i1.i32)”)是否由当前循环的归纳变量所使用,以及确定当前SEI的t1(即“temp1.i64”)的所有使用是否是仿射的(affine)。例如,上文示例中的代码“4*temp1.i64”是仿射使用。如果步骤212的结果为真,那么当前SEI候选以消除,并且方法200前进到步骤222,如下所述。否则方法200前进到步骤214,同样如下所述。
在步骤222,编译器150确定当前SEI的t2操作数是否是当前循环中的叶。在一个实施例中,如果t2被定义在当前循环之外,或如果t2既不是非溢出二进制运算符、phi运算符,也不是转换运算符(例如符号扩展或零扩展),那么t2视为当前循环的叶。如果在步骤222,编译器150确定当前SEI的t2是当前循环的叶,那么方法222前进回到步骤214,如下所述。否则,方法200前进到步骤224,其中编译器150将当前SEI推到SEI堆栈上。该堆栈表示要被处理的符号扩展指令的列表并使编译器150能够将SEI推到SEI堆栈上以及从SEI堆栈弹出SEI。以上文示例继续,堆栈成为{“tmp1.i64=sxt(i1.i32)”}并且映射表是{}。
在步骤226,编译器150确定SEI堆栈是否为空。如果在步骤226,编译器确定SEI堆栈为空,那么方法200前进到步骤214,如下所述。否则,方法200前进到步骤228,其中编译器150从SEI堆栈弹出临时SEI。
在步骤230,编译器150确定临时SEI是否是当前循环的叶。如果在步骤230,编译器150确定临时SEI的t2是当前循环的叶,那么方法200前进到图2C的步骤232,如下所述。否则,方法200前进回到步骤226,如上文所述。以上文示例继续,“i1.i32”被定义在循环之内,所以“i1.i32”不视为叶。
在步骤232,编译器150确定是否1)临时SEI是“t1=sxt(t2)”形式以及2)临时SEI的t2是“t2=op x y”形式。如果在步骤232编译器150确定1)临时SEI是“t1=sxt(t2)”形式,以及2)临时SEI的t2是“t2=op x y”形式,那么方法200前进到步骤234。否则,方法200前进回到图2B的步骤226,如上所述。
在步骤234,编译器150确定对于键(x,<临时SEI的t1的类型>)在映射表中是否存在值。以上文示例继续,t2是“i1.i32=phi(i0.i32:preheader,i2.i32:loop body)”并且映射表为空。如果在步骤234,编译器150确定对于键(x,<临时SEI的t1的类型>)在映射表中存在值,那么方法200前进到步骤238,如下所述。否则,方法200前进到步骤236,其中编译器150会1)将SEI“x’=sxt(x)”推到SEI堆栈上,以及2)在使用临时SEI的t2中的x之前将x’插入到中间代码中。
在步骤238,编译器150确定对于键(y,<临时SEI的t1的类型>)在映射表中是否存在值。如果在步骤238,编译器150确定对于键(y,<临时SEI的t1的类型>)在映射表中存在值,那么方法200前进到步骤242,如下所述。否则,方法200前进到步骤240,其中编译器150会1)将SEI“y’=sxt(y)”推到SEI堆栈上,2)在使用临时SEI的t2中的y之前将y’插入到中间代码中。注意,步骤240的执行涉及将符号扩展插入到当前循环的前置头代码中。
相应地,方法200前进到步骤242,其中编译器150在临时SEI的t2之后将SEI“t2'=op x’ y’”插入到中间代码中,并且更新映射表以包括映射(t2,<类型(t2’)>)→t2’。方法200随后前进到图2D的步骤244。以上文示例继续,SEI堆栈包含{“i0’.i64=sxt(i0.i32)”,“i2’.i64=sxt(i2.i32)”}并且映射表包含{<i1.i64>→i1’}。进一步地,中间代码成为:
如此使得“tmp1.i64”的所有使用都由“i1’.i64”所替换,并且“tmp1.i64=sxt(i1.i32)”被删除。注意,当在使用前插入新的符号扩展指令时,phi指令被特殊对待。在phi中的使用,诸如“i0.i32:preheader”,被当做针对当前循环的前置头块中的最后指令的使用。在SSA表示中这是显现在phi指令中的使用的标准解释。
在步骤244,编译器150在映射表中将键(t2,<临时SEI的t1的类型>)映射到t2’的值。在步骤246,编译器150在当前循环中用t2’替换t1的所有出现。在步骤248,编译器150从当前循环中移除临时SEI。方法200随后返回图2B的步骤226,其中重复方法步骤228-248直到SEI堆栈为空。以上文示例继续,因为i0.i32被定义在循环之外,所以SEI“i0’.i64=sxt(i0.i32)”是叶,并且因此被方法200所忽视。可替代地,SEI“i2’.i64=sxt(i2.i32)”适格于步骤240的操作。根据本文所述的技术,修改SEI“i2’.i64=sxt(i2.i32)”将涉及编译器150在SEI“i2.i32=i1.i32+1”之后插入SEI“i3.i64=i1’.i64+1”、用“i3’.i64”替换“i2’.i64”的所有实例、以及删除SEI“i2’.i64=sxt(i2.i32)”。相应地,消除所有符号扩展之后的中间代码是:
结果是,{i0,i1,i2}的32位计算提升到{i0’,i1’,i3’}的64位计算。这有利地允许后续的编译器150优化操作,诸如强度减少和归纳变量消除,以消除冗余的32位计算。
现在回到步骤208,如果编译器150确定当前循环不包括至少一个“t1=sxt(t2)”形式的SEI,那么方法200前进到上文所述的图2B的步骤218。
现在回到步骤212,如果编译器150确定当前SEI的“t2”不是当前循环的归纳变量仿射函数,那么方法200前进到步骤214,其中编译器150确定在当前循环中是否包括附加的SEI。如果在步骤214,编译器150确定在当前循环中包括附加的SEI,那么方法200前进到步骤216,如下文所述。否则,方法200前进到图2B的步骤218,如上文所述。
在步骤216,编译器150设置当前SEI指向当前循环的下一个SEI。如本文先前所述,编译器150配置为以最内层循环优先顺序来处理循环,这允许当后续处理封闭循环时消除被插入到循环前置头中的符号扩展。在步骤218,编译器150确定在中间代码中是否包括附加的循环。如果在步骤218,编译器150确定在中间代码中包括附加的循环,那么方法200前进到步骤220,如下文所述。否则,根据本文所描述的技术,由于包括在中间代码中的每个循环已由编译器150所检查,所以方法200结束。
在步骤220,编译器150将当前循环设置为包括在中间代码中的下一个循环。方法200随后前进回到步骤208,于是根据上述描述实行后续的步骤210-248。
总而言之,本发明的实施例阐述了用于减少包括在计算机程序的循环中的SEI的技术。编译器150接收计算机程序的中间代码,其中中间代码包括被包括在循环结构中的至少一个SEI。根据上文所述的方法200,编译器150确定至少一个SEI适格被移动到循环结构之外、将补充的SEI插入到循环结构的前置头中、以及随后消除循环中的SEI,这使代码适格于附加的强度减少机会。
本文公开的技术的一个优点是所编译的中间指令由编译器150对附加的优化机会进行自动检查。通过该方式,计算机程序所包括的、或当运行计算机程序时计算机程序要求处理器所执行的指令的总数可减少,从而增加计算机程序的整体执行效率。此外,更少或更有效率的指令致使执行计算机程序要求更少的时钟周期,这与整体功率节省直接相关。
本发明的一个实施例可实现为与计算机系统一起使用的程序产品。该程序产品的程序定义实施例的各功能(包括本文中描述的方法)并且可以被包含在各种计算机可读存储介质上。示例性计算机可读存储介质包括但不限于:(i)不可写入的存储介质(例如,计算机内的只读存储器设备,诸如可由光盘只读存储器(CD-ROM)驱动器读取的CD-ROM盘、闪存、只读存储器(ROM)芯片或任何类型的固态非易失性半导体存储器),在其上永久性地存储信息;和(ii)可写入的存储介质(例如,软盘驱动器或硬盘驱动器内的软盘或者任何类型的固态随机存取半导体存储器),在其上存储可更改的信息。
以上已参照特定实施例对本发明进行了描述。然而,本领域普通技术人员将理解的是,可对此做出各种修改和变化,而不脱离如所附权利要求中所阐述的本发明的较宽精神和范围。因此,前面的描述以及附图应被视为是示例性的而非限制性的意义。
因此,本发明的实施例的范围在下面的权利要求中阐述。
Claims (10)
1.一种用于减少包括在计算机程序中的符号扩展指令SEI的方法,所述方法包括:
接收中间代码,所述中间代码与所述计算机程序相关联并包括被包括在所述计算机程序内的循环结构中的第一SEI;
确定所述第一SEI适格被移动到所述循环结构之外;
将第二SEI插入到所述循环的前置头中,所述第二SEI当由处理器所执行时,将由所述第一SEI定为目标的初始值从较小类型提升到较大类型;以及
用适格于附加的编译器优化的一个或多个中间指令替换所述第一SEI。
2.根据权利要求1所述的方法,其中与所述第一SEI相关联的操作数包括32位,并且所述第一SEI当由所述处理器所执行时,将所述操作数转换成64位但不改变与所述操作数相关联的符号或值。
3.根据权利要求2所述的方法,其中当与所述第一SEI相关联的所述操作数包括与所述循环结构相关联的归纳变量的仿射函数时,所述第一SEI适格被移动到所述循环结构之外。
4.根据权利要求3所述的方法,其中所述操作数具有格式“操作数=C1*i+C2”,其中“i”的值随着所述循环结构执行而修改,并且其中C1和C2是常数值。
5.根据权利要求1所述的方法,其中所述第二SEI当由所述处理器所执行时,使所述处理器将与所述第二SEI相关联的操作数的经符号扩展的值存储在变量中。
6.根据权利要求5所述的方法,其中所述一个或多个中间指令引用所述变量以获得与所述第二SEI相关联的所述操作数的所述经符号扩展的值。
7.根据权利要求1所述的方法,进一步包括:
确定与所述计算机程序相关联的所述中间代码包括被包括在所述循环结构中的第三SEI;
确定与所述第三SEI相关联的操作数包括常数值;以及
用具有由所述第三SEI所定义的位数的常数值替换所述第三SEI。
8.根据权利要求1所述的方法,进一步包括:
确定与所述计算机程序相关联的所述中间代码包括被包括在所述循环结构中的第四SEI;
确定与所述第四SEI相关联的操作数具有由所述第四SEI所定义的位数;以及
用与所述第四SEI相关联的所述操作数替换所述第四SEI,其中,所述中间代码当由所述处理器所执行时,不对所述第四SEI的所述操作数进行符号扩展。
9.根据权利要求1所述的方法,其中在执行包括在所述循环结构中的所述中间指令之前,包括在所述循环结构的所述前置头中的所述中间指令仅执行一次。
10.一种用于减少包括在计算机程序中的符号扩展中间指令SEI的系统,所述系统包括:
处理器,配置为:
接收中间代码,所述中间代码与所述计算机程序相关联并包括被包括在所述计算机程序内的循环结构中的第一SEI;
确定所述第一SEI适格被移动到所述循环结构之外;
将第二SEI插入到所述循环的前置头中,所述第二SEI当由处理器所执行时,将由所述第一SEI定为目标的初始值从较小类型提升到较大类型;以及
用适格于附加的编译器优化的一个或多个中间指令替换所述第一SEI。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201161556782P | 2011-11-07 | 2011-11-07 | |
US61/556,782 | 2011-11-07 | ||
US13/661,478 | 2012-10-26 | ||
US13/661,478 US10228919B2 (en) | 2011-11-07 | 2012-10-26 | Demand-driven algorithm to reduce sign-extension instructions included in loops of a 64-bit computer program |
PCT/US2012/063754 WO2013070635A1 (en) | 2011-11-07 | 2012-11-06 | A demand-driven algorithm to reduce sign-extension instructions included in loops of a 64-bit computer program |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103348317A CN103348317A (zh) | 2013-10-09 |
CN103348317B true CN103348317B (zh) | 2017-02-15 |
Family
ID=48223398
Family Applications (5)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012800066826A Pending CN103339621A (zh) | 2011-11-07 | 2012-11-06 | 用于gpu计算编译器中的过程间存储器地址空间优化的技术 |
CN201280029582.5A Pending CN103608774A (zh) | 2011-11-07 | 2012-11-06 | 用于编译期间的向量化和存储器合并的算法 |
CN201280003006.3A Pending CN104641350A (zh) | 2011-11-07 | 2012-11-06 | 用于64位地址模式优化的算法 |
CN201280006681.1A Active CN103348317B (zh) | 2011-11-07 | 2012-11-06 | 减少64位计算机程序循环中符号扩展指令的需求驱动算法 |
CN2012800132283A Pending CN103460188A (zh) | 2011-11-07 | 2012-11-06 | 用于基于活跃分析的再具体化以减少寄存器不足并提高并行度的技术 |
Family Applications Before (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012800066826A Pending CN103339621A (zh) | 2011-11-07 | 2012-11-06 | 用于gpu计算编译器中的过程间存储器地址空间优化的技术 |
CN201280029582.5A Pending CN103608774A (zh) | 2011-11-07 | 2012-11-06 | 用于编译期间的向量化和存储器合并的算法 |
CN201280003006.3A Pending CN104641350A (zh) | 2011-11-07 | 2012-11-06 | 用于64位地址模式优化的算法 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012800132283A Pending CN103460188A (zh) | 2011-11-07 | 2012-11-06 | 用于基于活跃分析的再具体化以减少寄存器不足并提高并行度的技术 |
Country Status (5)
Country | Link |
---|---|
US (6) | US20130113809A1 (zh) |
CN (5) | CN103339621A (zh) |
DE (5) | DE112012000212T5 (zh) |
TW (5) | TWI509561B (zh) |
WO (5) | WO2013070637A1 (zh) |
Families Citing this family (54)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9430204B2 (en) | 2010-11-19 | 2016-08-30 | Microsoft Technology Licensing, Llc | Read-only communication operator |
US9507568B2 (en) | 2010-12-09 | 2016-11-29 | Microsoft Technology Licensing, Llc | Nested communication operator |
US9395957B2 (en) * | 2010-12-22 | 2016-07-19 | Microsoft Technology Licensing, Llc | Agile communication operator |
US20130113809A1 (en) * | 2011-11-07 | 2013-05-09 | Nvidia Corporation | Technique for inter-procedural memory address space optimization in gpu computing compiler |
US9250879B2 (en) | 2012-07-02 | 2016-02-02 | International Business Machines Corporation | Strength reduction compiler optimizations |
US10588691B2 (en) | 2012-09-12 | 2020-03-17 | Relievant Medsystems, Inc. | Radiofrequency ablation of tissue within a vertebral body |
CN105359090A (zh) * | 2013-04-26 | 2016-02-24 | 纽约市哥伦比亚大学理事会 | 用于移动应用的系统和方法 |
US9710388B2 (en) * | 2014-01-23 | 2017-07-18 | Qualcomm Incorporated | Hardware acceleration for inline caches in dynamic languages |
CN104915180B (zh) * | 2014-03-10 | 2017-12-22 | 华为技术有限公司 | 一种数据操作的方法和设备 |
US9389890B2 (en) | 2014-03-27 | 2016-07-12 | Microsoft Technology Licensing, Llc | Hierarchical directives-based management of runtime behaviors |
BR112016021673B1 (pt) * | 2014-03-27 | 2022-09-20 | Microsoft Technology Licensing, Llc | Meio de armazenamento legível por computador e sistema de computador para gerenciamento com base em diretivas hierárquicas de comportamentos de tempo de execução |
US10061591B2 (en) | 2014-06-27 | 2018-08-28 | Samsung Electronics Company, Ltd. | Redundancy elimination in single instruction multiple data/thread (SIMD/T) execution processing |
US10061592B2 (en) | 2014-06-27 | 2018-08-28 | Samsung Electronics Co., Ltd. | Architecture and execution for efficient mixed precision computations in single instruction multiple data/thread (SIMD/T) devices |
CN104834532B (zh) * | 2015-06-03 | 2018-01-02 | 星环信息科技(上海)有限公司 | 一种分布式数据向量化处理方法和装置 |
CN106708593B (zh) * | 2015-07-16 | 2020-12-08 | 中兴通讯股份有限公司 | 一种程序链接的编译方法及装置 |
CN105183433B (zh) * | 2015-08-24 | 2018-02-06 | 上海兆芯集成电路有限公司 | 指令合并方法以及具有多数据通道的装置 |
KR20170047957A (ko) * | 2015-10-26 | 2017-05-08 | 삼성전자주식회사 | 반도체 장치의 동작 방법 및 반도체 시스템 |
CN105302577B (zh) * | 2015-11-26 | 2019-05-07 | 上海兆芯集成电路有限公司 | 驱动执行单元的机器码产生方法以及装置 |
GB2546308B (en) * | 2016-01-15 | 2019-04-03 | Advanced Risc Mach Ltd | Data processing systems |
CN107292808B (zh) * | 2016-03-31 | 2021-01-05 | 阿里巴巴集团控股有限公司 | 图像处理方法、装置及图像协处理器 |
CN105955892A (zh) * | 2016-04-25 | 2016-09-21 | 浪潮电子信息产业股份有限公司 | 一种计算机系统中地址空间的扩展方法 |
US10198259B2 (en) * | 2016-06-23 | 2019-02-05 | Advanced Micro Devices, Inc. | System and method for scheduling instructions in a multithread SIMD architecture with a fixed number of registers |
EP3270371B1 (en) * | 2016-07-12 | 2022-09-07 | NXP USA, Inc. | Method and apparatus for managing graphics layers within a graphics display component |
CN108021563B (zh) * | 2016-10-31 | 2021-09-07 | 华为技术有限公司 | 一种指令间数据依赖的检测方法和装置 |
US10359971B2 (en) * | 2017-07-17 | 2019-07-23 | Hewlett Packard Enterprise Development Lp | Storing memory profile data of an application in non-volatile memory |
US11755382B2 (en) * | 2017-11-03 | 2023-09-12 | Coherent Logix, Incorporated | Programming flow for multi-processor system |
US10866806B2 (en) * | 2017-11-14 | 2020-12-15 | Nvidia Corporation | Uniform register file for improved resource utilization |
US11468312B2 (en) | 2018-02-02 | 2022-10-11 | Samsung Electronics Co., Ltd. | Memory management for machine learning training on GPU |
US11068247B2 (en) | 2018-02-06 | 2021-07-20 | Microsoft Technology Licensing, Llc | Vectorizing conditional min-max sequence reduction loops |
CN108304218A (zh) * | 2018-03-14 | 2018-07-20 | 郑州云海信息技术有限公司 | 一种汇编代码的编写方法、装置、系统和可读存储介质 |
US11277455B2 (en) | 2018-06-07 | 2022-03-15 | Mellanox Technologies, Ltd. | Streaming system |
US10691430B2 (en) * | 2018-08-27 | 2020-06-23 | Intel Corporation | Latency scheduling mehanism |
US20200106828A1 (en) * | 2018-10-02 | 2020-04-02 | Mellanox Technologies, Ltd. | Parallel Computation Network Device |
CN111428327A (zh) * | 2018-12-24 | 2020-07-17 | 深圳市中兴微电子技术有限公司 | 一种指令硬件架构的构建方法、装置及存储介质 |
US20220100484A1 (en) * | 2019-01-25 | 2022-03-31 | The Regents Of The University Of California | Coalescing Operand Register File for Graphical Processing Units |
US11625393B2 (en) | 2019-02-19 | 2023-04-11 | Mellanox Technologies, Ltd. | High performance computing system |
EP3699770A1 (en) | 2019-02-25 | 2020-08-26 | Mellanox Technologies TLV Ltd. | Collective communication system and methods |
US11294685B2 (en) * | 2019-06-04 | 2022-04-05 | International Business Machines Corporation | Instruction fusion using dependence analysis |
CN110162330B (zh) * | 2019-07-08 | 2021-04-13 | 上海赫千电子科技有限公司 | 一种应用于汽车ecu升级文件的系统及方法 |
US11200061B2 (en) * | 2019-11-19 | 2021-12-14 | Microsoft Technology Licensing, Llc | Pre-instruction scheduling rematerialization for register pressure reduction |
CN112862658A (zh) * | 2019-11-28 | 2021-05-28 | 中兴通讯股份有限公司 | Gpu运行方法、装置、设备及存储介质 |
US11750699B2 (en) | 2020-01-15 | 2023-09-05 | Mellanox Technologies, Ltd. | Small message aggregation |
US11252027B2 (en) | 2020-01-23 | 2022-02-15 | Mellanox Technologies, Ltd. | Network element supporting flexible data reduction operations |
US11429310B2 (en) | 2020-03-06 | 2022-08-30 | Samsung Electronics Co., Ltd. | Adjustable function-in-memory computation system |
CN113362878A (zh) | 2020-03-06 | 2021-09-07 | 三星电子株式会社 | 用于存储器内计算的方法和用于计算的系统 |
US11210071B2 (en) * | 2020-04-01 | 2021-12-28 | Microsoft Technology Licensing, Llc | Compiler sub expression directed acyclic graph (DAG) remat for register pressure |
US11876885B2 (en) | 2020-07-02 | 2024-01-16 | Mellanox Technologies, Ltd. | Clock queue with arming and/or self-arming features |
CN112214443B (zh) | 2020-10-22 | 2021-12-03 | 上海壁仞智能科技有限公司 | 设置于图形处理器中的二次卸载装置和方法 |
CN112230931B (zh) * | 2020-10-22 | 2021-11-02 | 上海壁仞智能科技有限公司 | 适用于图形处理器的二次卸载的编译方法、装置和介质 |
US11556378B2 (en) | 2020-12-14 | 2023-01-17 | Mellanox Technologies, Ltd. | Offloading execution of a multi-task parameter-dependent operation to a network device |
US20220374236A1 (en) * | 2021-05-20 | 2022-11-24 | Huawei Technologies Co., Ltd. | Method and system for optimizing address calculations |
US11645076B2 (en) * | 2021-07-26 | 2023-05-09 | International Business Machines Corporation | Register pressure target function splitting |
US11922237B1 (en) | 2022-09-12 | 2024-03-05 | Mellanox Technologies, Ltd. | Single-step collective operations |
US20240241704A1 (en) * | 2023-01-16 | 2024-07-18 | International Business Machines Corporation | Reducing register pressure |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4449196A (en) * | 1979-04-27 | 1984-05-15 | Pritchard Eric K | Data processing system for multi-precision arithmetic |
US6286135B1 (en) * | 1997-03-26 | 2001-09-04 | Hewlett-Packard Company | Cost-sensitive SSA-based strength reduction algorithm for a machine with predication support and segmented addresses |
CN101833435A (zh) * | 2010-04-19 | 2010-09-15 | 天津大学 | 基于传输触发架构可配置处理器指令冗余消除方法 |
Family Cites Families (95)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW213998B (zh) * | 1990-08-23 | 1993-10-01 | Supercomp Systems Ltd Partnership | |
IL100990A (en) | 1991-02-27 | 1995-10-31 | Digital Equipment Corp | Multilingual optimization compiler that uses Gladi in the production of a multi-pass cipher |
DE69804708T2 (de) * | 1997-03-29 | 2002-11-14 | Imec Vzw, Leuven Heverlee | Verfahren und Gerät für Grössenoptimierung von Speichereinheiten |
US7548238B2 (en) * | 1997-07-02 | 2009-06-16 | Nvidia Corporation | Computer graphics shader systems and methods |
US6785888B1 (en) * | 1997-08-29 | 2004-08-31 | International Business Machines Corporation | Memory allocator for a multiprocessor computer system |
US5903761A (en) | 1997-10-31 | 1999-05-11 | Preemptive Solutions, Inc. | Method of reducing the number of instructions in a program code sequence |
US6401187B1 (en) * | 1997-12-10 | 2002-06-04 | Hitachi, Ltd. | Memory access optimizing method |
US6748587B1 (en) * | 1998-01-02 | 2004-06-08 | Hewlett-Packard Development Company, L.P. | Programmatic access to the widest mode floating-point arithmetic supported by a processor |
US6256784B1 (en) | 1998-08-14 | 2001-07-03 | Ati International Srl | Interpreter with reduced memory access and improved jump-through-register handling |
US6757892B1 (en) | 1999-06-24 | 2004-06-29 | Sarnoff Corporation | Method for determining an optimal partitioning of data among several memories |
US6415311B1 (en) | 1999-06-24 | 2002-07-02 | Ati International Srl | Sign extension circuit and method for unsigned multiplication and accumulation |
US6438747B1 (en) * | 1999-08-20 | 2002-08-20 | Hewlett-Packard Company | Programmatic iteration scheduling for parallel processors |
US20020129340A1 (en) | 1999-10-28 | 2002-09-12 | Tuttle Douglas D. | Reconfigurable isomorphic software representations |
US6523173B1 (en) | 2000-01-11 | 2003-02-18 | International Business Machines Corporation | Method and apparatus for allocating registers during code compilation using different spill strategies to evaluate spill cost |
US6941549B1 (en) * | 2000-03-31 | 2005-09-06 | International Business Machines Corporation | Communicating between programs having different machine context organizations |
US20020038453A1 (en) | 2000-08-09 | 2002-03-28 | Andrew Riddle | Method and system for software optimization |
US7039906B1 (en) * | 2000-09-29 | 2006-05-02 | International Business Machines Corporation | Compiler for enabling multiple signed independent data elements per register |
GB2367650B (en) | 2000-10-04 | 2004-10-27 | Advanced Risc Mach Ltd | Single instruction multiple data processing |
US20030028864A1 (en) | 2001-01-29 | 2003-02-06 | Matt Bowen | System, method and article of manufacture for successive compilations using incomplete parameters |
US20040205740A1 (en) * | 2001-03-29 | 2004-10-14 | Lavery Daniel M. | Method for collection of memory reference information and memory disambiguation |
JP3763516B2 (ja) | 2001-03-30 | 2006-04-05 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 変換プログラム、コンパイラ、コンピュータ装置およびプログラム変換方法 |
US20020144101A1 (en) | 2001-03-30 | 2002-10-03 | Hong Wang | Caching DAG traces |
US7162716B2 (en) * | 2001-06-08 | 2007-01-09 | Nvidia Corporation | Software emulator for optimizing application-programmable vertex processing |
US6865614B2 (en) * | 2001-07-02 | 2005-03-08 | Hewlett-Packard Development Company, L.P. | Method for transferring a packed data structure to an unpacked data structure by copying the packed data using pointer |
US7032215B2 (en) * | 2001-10-11 | 2006-04-18 | Intel Corporation | Method and system for type demotion of expressions and variables by bitwise constant propagation |
US7107584B2 (en) * | 2001-10-23 | 2006-09-12 | Microsoft Corporation | Data alignment between native and non-native shared data structures |
US8914590B2 (en) | 2002-08-07 | 2014-12-16 | Pact Xpp Technologies Ag | Data processing method and device |
US20110161977A1 (en) | 2002-03-21 | 2011-06-30 | Martin Vorbach | Method and device for data processing |
US7243342B2 (en) | 2002-06-11 | 2007-07-10 | Intel Corporation | Methods and apparatus for determining if a user-defined software function is a memory allocation function during compile-time |
US6954841B2 (en) | 2002-06-26 | 2005-10-11 | International Business Machines Corporation | Viterbi decoding for SIMD vector processors with indirect vector element access |
US7353243B2 (en) * | 2002-10-22 | 2008-04-01 | Nvidia Corporation | Reconfigurable filter node for an adaptive computing machine |
US7051322B2 (en) * | 2002-12-06 | 2006-05-23 | @Stake, Inc. | Software analysis framework |
US7451278B2 (en) * | 2003-02-13 | 2008-11-11 | Silicon Graphics, Inc. | Global pointers for scalable parallel applications |
JP2004303113A (ja) * | 2003-04-01 | 2004-10-28 | Hitachi Ltd | 階層メモリ向け最適化処理を備えたコンパイラおよびコード生成方法 |
US20040221283A1 (en) | 2003-04-30 | 2004-11-04 | Worley Christopher S. | Enhanced, modulo-scheduled-loop extensions |
US20050071823A1 (en) | 2003-09-29 | 2005-03-31 | Xiaodong Lin | Apparatus and method for simulating segmented addressing on a flat memory model architecture |
US7124271B2 (en) * | 2003-10-14 | 2006-10-17 | Intel Corporation | Method and system for allocating register locations in a memory during compilation |
US7457936B2 (en) * | 2003-11-19 | 2008-11-25 | Intel Corporation | Memory access instruction vectorization |
US7567252B2 (en) | 2003-12-09 | 2009-07-28 | Microsoft Corporation | Optimizing performance of a graphics processing unit for efficient execution of general matrix operations |
US7814467B2 (en) * | 2004-01-15 | 2010-10-12 | Hewlett-Packard Development Company, L.P. | Program optimization using object file summary information |
US7376813B2 (en) | 2004-03-04 | 2008-05-20 | Texas Instruments Incorporated | Register move instruction for section select of source operand |
US8689202B1 (en) * | 2004-03-30 | 2014-04-01 | Synopsys, Inc. | Scheduling of instructions |
US8677312B1 (en) * | 2004-03-30 | 2014-03-18 | Synopsys, Inc. | Generation of compiler description from architecture description |
US7386842B2 (en) * | 2004-06-07 | 2008-06-10 | International Business Machines Corporation | Efficient data reorganization to satisfy data alignment constraints |
US7802076B2 (en) * | 2004-06-24 | 2010-09-21 | Intel Corporation | Method and apparatus to vectorize multiple input instructions |
US7472382B2 (en) * | 2004-08-30 | 2008-12-30 | International Business Machines Corporation | Method for optimizing software program using inter-procedural strength reduction |
US7389499B2 (en) * | 2004-10-21 | 2008-06-17 | International Business Machines Corporation | Method and apparatus for automatically converting numeric data to a processor efficient format for performing arithmetic operations |
US7730114B2 (en) * | 2004-11-12 | 2010-06-01 | Microsoft Corporation | Computer file system |
US7681187B2 (en) * | 2005-03-31 | 2010-03-16 | Nvidia Corporation | Method and apparatus for register allocation in presence of hardware constraints |
TWI306215B (en) * | 2005-04-29 | 2009-02-11 | Ind Tech Res Inst | Method and corresponding apparatus for compiling high-level languages into specific processor architectures |
CN100389420C (zh) * | 2005-09-13 | 2008-05-21 | 北京中星微电子有限公司 | 用协处理器加速文件系统操作的方法及装置 |
US7450131B2 (en) * | 2005-09-30 | 2008-11-11 | Intel Corporation | Memory layout for re-ordering instructions using pointers |
US8037465B2 (en) * | 2005-09-30 | 2011-10-11 | Intel Corporation | Thread-data affinity optimization using compiler |
US7694288B2 (en) * | 2005-10-24 | 2010-04-06 | Analog Devices, Inc. | Static single assignment form pattern matcher |
US20070124631A1 (en) | 2005-11-08 | 2007-05-31 | Boggs Darrell D | Bit field selection instruction |
JP4978025B2 (ja) * | 2006-02-24 | 2012-07-18 | 株式会社日立製作所 | ポインタの圧縮・伸張方法、これを実行するプログラム、及び、これを用いた計算機システム |
WO2008002173A1 (en) * | 2006-06-20 | 2008-01-03 | Intel Corporation | Method and apparatus to call native code from a managed code application |
US8321849B2 (en) * | 2007-01-26 | 2012-11-27 | Nvidia Corporation | Virtual architecture and instruction set for parallel thread computing |
US9601199B2 (en) * | 2007-01-26 | 2017-03-21 | Intel Corporation | Iterator register for structured memory |
US9361078B2 (en) | 2007-03-19 | 2016-06-07 | International Business Machines Corporation | Compiler method of exploiting data value locality for computation reuse |
US8671401B2 (en) * | 2007-04-09 | 2014-03-11 | Microsoft Corporation | Tiling across loop nests with possible recomputation |
US8411096B1 (en) * | 2007-08-15 | 2013-04-02 | Nvidia Corporation | Shader program instruction fetch |
US20090070753A1 (en) | 2007-09-07 | 2009-03-12 | International Business Machines Corporation | Increase the coverage of profiling feedback with data flow analysis |
US8555266B2 (en) | 2007-11-13 | 2013-10-08 | International Business Machines Corporation | Managing variable assignments in a program |
US7809925B2 (en) | 2007-12-07 | 2010-10-05 | International Business Machines Corporation | Processing unit incorporating vectorizable execution unit |
JP5244421B2 (ja) | 2008-02-29 | 2013-07-24 | 株式会社ソニー・コンピュータエンタテインメント | 情報処理装置およびプログラム分割方法 |
US8255884B2 (en) * | 2008-06-06 | 2012-08-28 | International Business Machines Corporation | Optimized scalar promotion with load and splat SIMD instructions |
US20100184380A1 (en) | 2009-01-20 | 2010-07-22 | Qualcomm Incorporated | Mitigating intercarrier and intersymbol interference in asynchronous wireless communications |
US20100199270A1 (en) | 2009-01-30 | 2010-08-05 | Ivan Baev | System, method, and computer-program product for scalable region-based register allocation in compilers |
US8713543B2 (en) * | 2009-02-11 | 2014-04-29 | Johnathan C. Mun | Evaluation compiler method |
US8831666B2 (en) * | 2009-06-30 | 2014-09-09 | Intel Corporation | Link power savings with state retention |
US8819622B2 (en) | 2009-09-25 | 2014-08-26 | Advanced Micro Devices, Inc. | Adding signed 8/16/32-bit integers to 64-bit integers |
US8271763B2 (en) * | 2009-09-25 | 2012-09-18 | Nvidia Corporation | Unified addressing and instructions for accessing parallel memory spaces |
CA2684226A1 (en) * | 2009-10-30 | 2011-04-30 | Ibm Canada Limited - Ibm Canada Limitee | Eleminating redundant operations for common properties using shared real registers |
US8578357B2 (en) * | 2009-12-21 | 2013-11-05 | Intel Corporation | Endian conversion tool |
US8453135B2 (en) | 2010-03-11 | 2013-05-28 | Freescale Semiconductor, Inc. | Computation reuse for loops with irregular accesses |
US8645758B2 (en) * | 2010-04-29 | 2014-02-04 | International Business Machines Corporation | Determining page faulting behavior of a memory operation |
US8954418B2 (en) * | 2010-05-14 | 2015-02-10 | Sap Se | Performing complex operations in a database using a semantic layer |
US8799583B2 (en) * | 2010-05-25 | 2014-08-05 | International Business Machines Corporation | Atomic execution over accesses to multiple memory locations in a multiprocessor system |
JP5583514B2 (ja) * | 2010-08-11 | 2014-09-03 | インターナショナル・ビジネス・マシーンズ・コーポレーション | バイナリコードを最適化するコンパイル方法、及びそのコンパイラシステム、並びにコンピュータ・プログラム |
US8538912B2 (en) * | 2010-09-22 | 2013-09-17 | Hewlett-Packard Development Company, L.P. | Apparatus and method for an automatic information integration flow optimizer |
KR101782373B1 (ko) * | 2010-11-10 | 2017-09-29 | 삼성전자 주식회사 | X-y 스택 메모리를 이용한 컴퓨팅 장치 및 방법 |
US8997066B2 (en) * | 2010-12-27 | 2015-03-31 | Microsoft Technology Licensing, Llc | Emulating pointers |
GB2488980B (en) * | 2011-03-07 | 2020-02-19 | Advanced Risc Mach Ltd | Address generation in a data processing apparatus |
US8566537B2 (en) * | 2011-03-29 | 2013-10-22 | Intel Corporation | Method and apparatus to facilitate shared pointers in a heterogeneous platform |
US8640112B2 (en) * | 2011-03-30 | 2014-01-28 | National Instruments Corporation | Vectorizing combinations of program operations |
US20130113809A1 (en) * | 2011-11-07 | 2013-05-09 | Nvidia Corporation | Technique for inter-procedural memory address space optimization in gpu computing compiler |
US9092228B2 (en) * | 2012-01-17 | 2015-07-28 | Texas Instruments Incorporated | Systems and methods for software instruction translation from a high-level language to a specialized instruction set |
JP5840014B2 (ja) * | 2012-02-01 | 2016-01-06 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | コンパイル方法、プログラムおよび情報処理装置 |
US9043582B2 (en) * | 2012-09-14 | 2015-05-26 | Qualcomm Innovation Center, Inc. | Enhanced instruction scheduling during compilation of high level source code for improved executable code |
US9411558B2 (en) * | 2012-10-20 | 2016-08-09 | Luke Hutchison | Systems and methods for parallelization of program code, interactive data visualization, and graphically-augmented code editing |
US10140403B2 (en) * | 2012-12-01 | 2018-11-27 | Synopsys Inc. | Managing model checks of sequential designs |
US9396240B2 (en) * | 2013-12-03 | 2016-07-19 | Business Objects Software Ltd. | Extreme visualization enabling extension for large data sets |
US9710245B2 (en) * | 2014-04-04 | 2017-07-18 | Qualcomm Incorporated | Memory reference metadata for compiler optimization |
US10444759B2 (en) * | 2017-06-14 | 2019-10-15 | Zoox, Inc. | Voxel based ground plane estimation and object segmentation |
-
2012
- 2012-10-24 US US13/659,802 patent/US20130113809A1/en not_active Abandoned
- 2012-10-24 US US13/659,786 patent/US9009686B2/en active Active
- 2012-10-25 US US13/660,986 patent/US9639336B2/en active Active
- 2012-10-26 US US13/661,478 patent/US10228919B2/en active Active
- 2012-11-05 US US13/669,401 patent/US9436447B2/en active Active
- 2012-11-06 CN CN2012800066826A patent/CN103339621A/zh active Pending
- 2012-11-06 DE DE112012000212T patent/DE112012000212T5/de active Pending
- 2012-11-06 CN CN201280029582.5A patent/CN103608774A/zh active Pending
- 2012-11-06 DE DE112012000187T patent/DE112012000187T5/de active Pending
- 2012-11-06 DE DE112012000195T patent/DE112012000195T5/de active Pending
- 2012-11-06 WO PCT/US2012/063757 patent/WO2013070637A1/en active Application Filing
- 2012-11-06 CN CN201280003006.3A patent/CN104641350A/zh active Pending
- 2012-11-06 WO PCT/US2012/063754 patent/WO2013070635A1/en active Application Filing
- 2012-11-06 WO PCT/US2012/063756 patent/WO2013070636A1/en active Application Filing
- 2012-11-06 WO PCT/US2012/063723 patent/WO2013070616A1/en active Application Filing
- 2012-11-06 CN CN201280006681.1A patent/CN103348317B/zh active Active
- 2012-11-06 DE DE112012000209T patent/DE112012000209T5/de active Pending
- 2012-11-06 DE DE112012000214T patent/DE112012000214T5/de active Pending
- 2012-11-06 CN CN2012800132283A patent/CN103460188A/zh active Pending
- 2012-11-06 WO PCT/US2012/063730 patent/WO2013070621A2/en active Application Filing
- 2012-11-07 TW TW101141369A patent/TWI509561B/zh active
- 2012-11-07 TW TW101141357A patent/TWI502509B/zh not_active IP Right Cessation
- 2012-11-07 TW TW101141361A patent/TWI483182B/zh not_active IP Right Cessation
- 2012-11-07 TW TW101141372A patent/TWI604410B/zh active
- 2012-11-07 TW TW101141366A patent/TWI498817B/zh active
-
2018
- 2018-11-19 US US16/195,776 patent/US20190087164A1/en active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4449196A (en) * | 1979-04-27 | 1984-05-15 | Pritchard Eric K | Data processing system for multi-precision arithmetic |
US6286135B1 (en) * | 1997-03-26 | 2001-09-04 | Hewlett-Packard Company | Cost-sensitive SSA-based strength reduction algorithm for a machine with predication support and segmented addresses |
CN101833435A (zh) * | 2010-04-19 | 2010-09-15 | 天津大学 | 基于传输触发架构可配置处理器指令冗余消除方法 |
Also Published As
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103348317B (zh) | 减少64位计算机程序循环中符号扩展指令的需求驱动算法 | |
JP7210078B2 (ja) | プログラム可能な最適化を有するメモリネットワークプロセッサ | |
US20240078211A1 (en) | Accelerator architecture on a programmable platform | |
Reiche et al. | Code generation from a domain-specific language for C-based HLS of hardware accelerators | |
CN101799760A (zh) | 生成任意目标架构的并行单指令多数据代码的系统和方法 | |
CN104813279B (zh) | 用于减少具有步幅式访问模式的向量寄存器中的元素的指令 | |
JP2008276740A (ja) | 並列スレッド・コンピューティングの仮想のアーキテクチャ及び命令セット | |
CN110109859B (zh) | 可编程平台上的加速器架构 | |
WO2021000971A1 (zh) | 操作数据的生成方法、装置及相关产品 | |
US9766866B2 (en) | Techniques for determining instruction dependencies | |
Shang et al. | LACS: A high-computational-efficiency accelerator for CNNs | |
Goulding-Hotta | Specialization as a Candle in the Dark Silicon Regime | |
US20050171990A1 (en) | Floating point intensive reconfigurable computing system for iterative applications | |
US20200233649A1 (en) | Integration of automated complier dataflow optimizations | |
US9772827B2 (en) | Techniques for determining instruction dependencies | |
Singh | An Empirical Study of Programming Languages from the Point of View of Scientific Computing | |
CN114327630B (zh) | 一种适用于华为昇腾芯片的高性能算子生成方法 | |
Kenter et al. | Pragma based parallelization—trading hardware efficiency for ease of use? | |
Manilov et al. | Free rider: A source-level transformation tool for retargeting platform-specific intrinsic functions | |
Pramadi et al. | Automatic Mapping of Convolutional Networks on the Neuro Vector Engine | |
Thörnberg et al. | Polyhedral space generation and memory estimation from interface and memory models of real-time video systems | |
CN118051260A (zh) | 指令融合方法、设备及存储介质 | |
Marburg et al. | A machine vision extension to the Ruby programming language using OpenCV and FFI | |
CN109766129A (zh) | 指令翻译方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |