CN102804142B - 使用双字节序编译器优化代码 - Google Patents
使用双字节序编译器优化代码 Download PDFInfo
- Publication number
- CN102804142B CN102804142B CN200980160069.8A CN200980160069A CN102804142B CN 102804142 B CN102804142 B CN 102804142B CN 200980160069 A CN200980160069 A CN 200980160069A CN 102804142 B CN102804142 B CN 102804142B
- Authority
- CN
- China
- Prior art keywords
- territory
- byte
- expression formula
- code
- swap operation
- 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.)
- Expired - Fee Related
Links
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
-
- 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
- G06F8/44—Encoding
- G06F8/447—Target code generation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
在一个实施例中,一种方法包括识别字节交换操作,构建包括字节交换操作和其它表达式的域,识别与所述域相关联的域入口和域出口,确定通过执行所述域的交换将获得益处,并且响应于所述确定执行所述域的交换,并且将所交换的域存储在存储介质中。还描述并要求了其它实施例。
Description
背景技术
字节的排列顺序是数据存储和检索的属性,其中存储和检索支持多种访问大小(例如,8比特、16比特、32比特、64比特)。更细粒度的访问允许程序员看到在存储器中更大的访问存储字节的顺序。将大字节序变量以与小字节序变量相反的字节顺序存储在存储器中。以最低有效字节位于最低存储器字节地址的方式来存储小字节序变量。当存在于处理器寄存器中时,包含相同值的大字节序和小字节序变量是相同的。仅在存储器中的顺序是不同的。
16比特、32比特和64比特数据中的字节的顺序对程序员而言是可见的。在C编程语言中,程序员能够通过使用共用体(一种覆盖数据结构的类型)或者通过将指向多个字节的数据的指针转换为指向单个字节的指针,来访问字节。历史上,使用这些技术来提高性能。因此,在不同字节序的架构上运行的相同C/C++代码可能产生不同的结果。例如,对于C代码:inti=0x12345678;以及charc=*((char*)&i),如果代码在大字节序架构上编译和运行,则‘c’的值将是0x12,而如果代码在小字节序架构上编译和运行,其将是0x78。
使用双字节序(bi-endian)技术的编译器允许对初始针对大字节序架构开发的源代码进行编译,以在小字节序架构上运行。如果以特殊模式来编译代码,则在大多数情况下,该代码以与其在大字节序架构上编译和运行情况下其将工作的方式相同的方式来工作,即,在上面的示例中‘c’等于0x12。通过在将被指定为大字节序的数据加载和存储到存储器中之前添加“字节交换”操作来实现该行为。
使用双字节序技术的编译器通常用于编译遗留代码以在现代的小字节序架构上运行。程序员通常将所有的遗留代码标记为大字节序,而并非确定每个特定的数据块必须是大字节序还是小字节序。因此,编译器在数据的加载和存储之前添加字节交换,即使在其字节序对程序员而言并不重要的情况下。这不利地影响了性能。
附图说明
图1是根据本发明的一个实施例的用于执行字节交换消除的方法的流程图。
图2是根据本发明的一个实施例的用于通过控制数据字节顺序来优化代码的方法的流程图。
图3是根据本发明的一个实施例的用于存储性能统计的各种数据存储设备的框图。
图4是根据本发明的实施例的系统的框图。
具体实施方式
实施例可以基于域交换的概念通过消除字节交换操作/将字节交换操作移动到更冷的路径来提高所生成的代码的性能。此外,在可能时,实施例可以不考虑数据字节顺序类型的选择以提高性能。
如本文中所使用的,交换容忍(swap-tolerant)表达式是能够利用相对表达式来替代的正在被编译的代码的表达式,其中所述相对表达式对不同字节顺序的一些(或全部)参数进行操作并且产生相同或不同字节顺序的有效结果。作为某些示例,与常量(例如,x==0x12345678)的比较是交换容忍的,这是因为它具有相对部(y==0x78563412),如果对该相对部给予交换参数SWAP(x),则该相对部将产生与原始表达式相同的结果,其中,SWAP是执行字节交换操作的表达式。比特AND操作是交换容忍的,这是因为存在操作(相同的比特AND)使得采用交换参数将产生正确但不同字节顺序的结果。然而,算数(例如,+、-、*、/)操作不是交换容忍的,这是因为它们严格地要求特定字节顺序的数据并且在采用交换参数的情况下会产生错误的结果。
域是正在被编译的代码的一组表达式,而域入口是域外部的表达式,其结果用作属于该域的表达式的参数。域出口是采用属于该域的表达式的结果作为参数的域外部的表达式。交换容忍域是一组交换容忍表达式,其能够由其相对表达式替代,以使得如果一些(或所有)域入口被不同字节顺序的数据替代,则所有的域出口将是相同或不同字节顺序的有效结果。
域交换是正在被编译的代码的变换,其:(1)通过在必要的域入口和出口处放置或移除字节交换操作来改变一些或所有域入口和出口的字节顺序;以及(2)利用以不同字节顺序操作的相对表达式来替换域中的所有表达式,以使得保持代码语义。对于与入口和出口有关的域交换,如果该入口或出口表达式是字节交换的,则可以移除字节交换,否则可以插入字节交换。
作为示例,
T1=SWAP(A)
T2=SWAP(B)
RES=T1==T2
表达式“T1==T2”是交换容忍的域,表达式“SWAP(A)”和“SWAP(B)”是域入口,赋值“RES=”是域出口。针对该代码的域交换可以如下:
T1=A//移除字节交换
T2=B//移除字节交换
RES=T1==T2//结果的字节顺序是相同的:没有任何增加或移除。
因此,对于每个交换容忍表达式,如果执行域交换,则知道入口(即,参数)和出口(即,结果)中的哪个将改变字节顺序。例如,在表达式X?Y:Z(如果X,则Y,否则Z)中,Y和Z的字节顺序将改变而X的字节顺序将保持:X?Y’:Z’。因此,知道域的入口和出口中的哪些改变它们的字节顺序并且仅针对这些来插入/移除字节交换操作(SWAP)。
域交换益处是来自域交换的性能益处,以使得插入的代码量减去移除的代码量(考虑放置/移除的特定指令的加权以及估计的执行计数器)得到正数。
作为示例,
T1=A
T2=SWAP(B)
RES=T1==T2
域交换可以如下:
T1=SWAP(A)//放置字节交换
T2=B//移除字节交换
RES=T1==T2//没有任何增加或移除。
如果原始代码中的“T1=A”比“T2=SWAP(B)”冷,则域交换益处是正的。注意,术语“冷”和“热”指的是给定代码段的相对频率或使用。“冷”代码段相对于另一代码段而言使用得更不频繁或者以更长的时间间隔使用。因此,如该示例所示,域交换可能导致在代码中移动SWAP。
现在参考图1,示出的是根据本发明的一个实施例,用于执行字节交换消除的方法的流程图。可以由在计算机系统的一个或多个处理器上执行的编译器来执行方法10。虽然本发明的范围不限于这一点,但是可以执行一些实施例来优化针对大字节序架构写入的代码以用于小字节序架构。即,编译器可以在小字节序架构的处理器上执行。
如图1中所见,可以通过确定要优化的代码的表达式是否包括字节交换操作来开始方法10(菱形20)。如果没有,则控制可以循环到下一个表达式(框30)。当遇到字节交换表达式时,控制进行到框40,在框40中可以构建包括该表达式的域。虽然本发明的范围不限于这一点,但是实施例可以寻求扩展域的范围从而能够在单遍中优化多个表达式。下面进一步论述构建域的细节。在构建域的期间,如果可能的话,可以利用额外的表达式来扩展域(框50)。下面还将论述扩展域的进一步的细节。当构建域结束时,可以识别改变字节顺序的域的各个入口和出口(框60)。如上所论述的,域入口可以是输入到域的各个参数,而出口可以是用作域的外部的参数的各个结果。
仍然参考图1,在菱形70处,可以确定移除字节交换是否提供益处(菱形70)。如上所论述的,可以由编译器基于各种简档信息来执行该确定,其中简档信息包括插入到代码中的表达式的量与从代码中移除的表达式的量之间的差的确定,以及与和这些表达式相关联的各种执行计数有关的简档信息。还可以确定该益处是否大于阈值。在一个实施例中,用于指示提供了益处的该阈值可以是0,以使得如果益处确定产生正数,则将提供益处。注意,如果通过移除字节交换不能提供益处,则不执行字节交换消除并且编译器可以循环到下一个表达式(关于上面所论述的框30)。
相反,如果确定移除提供益处,则控制进行到框80。在框80处,可以移除字节交换表达式,从而利用相对表达式来替代该表达式。此外,可以在域内的其它位置处插入/移除一个或多个额外的字节交换(框80)。此外,可以在一个或多个域入口和/或出口中类似地插入或移除这些字节交换表达式。然后,所修改的代码可以存储在诸如系统存储器或非电压存储设备等的适当的存储设备中,以用于随后在调用包含该修改代码的程序时执行。虽然在图1的实施例中示出了该特定的实现,但是应理解,本发明的范围不限于这一点并且其它的实现也是可能的。
为了构建交换容忍域,可以以任何交换容忍表达式或者从期望被移除的字节交换开始,并且利用连接的交换容忍表达式来扩展该域。如果进一步的域扩展是不可能的或者不会产生性能意义,则可以执行域交换并且可以构建其它的域。当存在相邻的交换容忍表达式时,域扩展是可能的。还可以构建多个域,这是因为针对每个相邻的交换容忍表达式,可以确定不将其添加到当前域,并且多个域将具有不同的域交换益处。因此,可以执行完全搜索以寻找最佳构建域,或者可以应用某些试探法。某些实施例可以基于试探法的使用。因此,字节交换消除可以识别和交换提供如上所述的正交换益处的所有的交换容忍域。
因此,在各实施例中,对某字节顺序的数据的操作利用对不同字节顺序的相同数据的等价操作来替代。此外,可以在单遍中同时优化多个连接的表达式和多个连接的数据。作为优化的结果,不仅消除了一些字节交换,而且还将其它的字节交换移动到更冷的路径。因此,可以利用对不同字节顺序的数据进行操作的相对表达式来替代表达式,可以在代码中移动交换,并且多个连接的数据可以改变其字节顺序。以这种方式,可以通过将对某一字节顺序的数据进行操作的代码块利用对不同字节顺序的数据进行操作的等价代码块替代,来消除字节交换。
现在参考表1,示出的是根据本发明的一个实施例,表示算法的可能实现的伪代码。如在表1中所见,可以提供多个函数以用于字节交换消除和构建域。如所见,字节交换函数调用域构建函数。此外,在确定移除字节交换表达式是否具有益处时,可以执行称为BENEFIT的另一函数。如上面所论述的,该函数可以确定在计算产生正值时存在益处。如果发现了该正值,则可以执行称为SWAP_DOMAIN的另一函数以在域内的适当位置以及域入口和出口处实现字节交换操作的实际移除和插入。注意,该伪代码是示例性的,并且其它的实现也是可能的。
表1
实施例还可以控制数据字节顺序的选择。即,不是按照程序员所指定的来选择数据字节顺序,而是编译器可以检查每个特定数据块的字节顺序是否影响程序的语义,并且如果不影响的话,则可以从性能角度来设置该特定数据块的字节顺序。
如本文所使用的,如果所有的数据存储和检索均是相同大小的,则数据(例如,变量、数据结构、堆数据、函数参数等)的字节顺序对程序员而言是不可见的。为了证明所有的数据存储和检索是相同大小的,编译器确保以下:不能通过不同大小的其它变量(例如,共用体成员)来访问数据;数据的地址(如果采用的话)不是从外部(即,正在被编译的代码的外部)直接可见的,也不能存储到从外部可见的变量,也不能传递到外部函数/从外部函数获得,也不能参与到编译器不能理解的表达式中/从编译器不能理解的表达式获得;并且如果采用了数据的地址并且将数据的地址转换为指向不同大小的数据的指针,则不存在由该指针进行的读取/写入。然而,编译器可以允许针对诸如maloc/free等的外部函数从这些先决条件中进行已知的排除,但仍然保证所有的检索和存储是相同大小的。
可以保守地计算数据字节顺序可见性。例如,如果没有证明不可见,则可以将字节顺序视为是可见的。为了定义函数参数的字节顺序可见性,编译器可以额外地确保对函数的所有调用(包括间接调用)均是已知的。作为示例,其地址从未被采用的顶层静态变量的字节顺序对程序员而言是不可见的,而每模块编译中的全局变量的字节顺序对程序员而言被认为是可见的。
如果数据块必须具有相同的字节顺序,则它们构成组。在下面的示例中,变量‘a’和‘b’必须具有相同的字节顺序并且因此编译器必须保持该顺序:
int*ptr=condition?&a:&b
ptr[3]=10。
为了确定特定数据的哪种字节顺序会在性能上更有意义,根据本发明的实施例的编译器检查如何使用数据。如果根据执行计数器数据在大字节序上下文中被更频繁地使用,则在可能时编译器使该数据为大字节序。有时上下文的字节顺序是未知的(例如,数据从一个变量拷贝到另一变量,并且编译器还没有关于这两个变量的字节顺序作出决定)。在这种情况中,可以使用试探法来选择具有更高可能性的更好的字节序。
因此,根据本发明的实施例的编译器可以执行以下:1)将程序操作的所有数据分为必须具有相同字节顺序的组;2)选择组以使得该组中的所有数据的字节顺序对程序员而言是不可见的;3)通过仅选择如果字节顺序改变则将给出正性能益处的那些组来筛选选择;以及4)通过调整所选择组的数据的所有读取/写入来改变所选择组的字节顺序。
现在参考图2,示出的是根据本发明的一个实施例,用于通过控制数据字节顺序来优化代码的方法的流程图。如图2中所示,可以使用在系统的处理器(例如,具有小字节序架构的处理器)上执行的双字节序编译器来实现方法100。如图2中所见,可以通过执行代码或者应用试探法来获得与给定代码段有关的统计信息来开始方法100(框110)。可以在可以执行代码或执行其它操作以获得统计信息的编译器的第一遍执行中获得这些统计信息。然后,可以将数据解析为组(框120)。更具体地,可以将数据解析为其中每个数据具有相同字节顺序的组。即,组的所有数据可以是大字节序或小字节序的。
然后,对于每个组,可以确定组的字节顺序对程序员而言是否是可见的(菱形130)。如下面将进一步论述的,可以执行各种分析来确定字节顺序是否是可见的。该分析可以至少部分地基于在第一遍期间获得的统计信息。如果字节顺序是可见的,则控制进行到框140,在框140中,当不可能对该组数据进行优化时可以选择下一个组。
否则,控制从菱形130进行到菱形150,在菱形150中可以确定对该组数据的字节顺序改变是否将有益于性能。如下面将在各个实现中进一步论述的,可以执行不同的计算来确定是否将提供性能益处。如果将不提供益处,则不执行优化并且可以选择下一个组(框140)。否则,如果字节顺序改变将提供性能益处,则控制进行到框160,在框160中可以改变该组的字节顺序。然后,该修改代码可以存储在诸如系统存储器或非电压存储设备等的适当的存储设备中,以用于随后在调用包含该修改代码的程序时执行。虽然在图2的实施例中示出了该特定的实现,但是本发明的范围不限于这一点。
在一个实现中,编译器优化可以在两遍编译上工作。在第一遍,累计与数据使用有关的信息并且从性能角度计算字节顺序优选。在第二遍,根据针对每个特定数据块的所选择的字节顺序来调整数据使用。因此,可以确定特定数据块的字节顺序是否是可见的。第二,可以识别从性能角度更有意义的字节顺序。最后,可以转换特定数据的字节顺序。
每个数据块(变量、函数参数、函数等)具有DATA_ADDRESS假指针,其被视为包含该数据的地址的正常指针。在一个实施例中,每个指针(以及DATA_ADDRESS假指针)维持各数据结构。
在一个实施例中,这些结构可以存储在诸如图3中所示的性能监视表150中,其中该性能监视表是根据本发明的一个实施例用于存储性能统计的各种存储设备的框图。在一些实施例中,表150可以存储在系统存储器中,但是在其它实现中,该表可以存储在编译器在其上执行的处理器的高速缓存存储器中。如图3中所示,表150可以包括目的列表160,以针对每个指针和数据地址假指针来存储指针列表,其中指针被拷贝到该指针列表。类似地,源列表165存储与相应指针相关联的源的列表。此外,访问大小列表170可以存储与相应指针相关联的读取/写入的大小。继而,取决于关于与指针相关联的表达式字节顺序改变是否将(正面或负面)影响性能,益处计数器175可以递增/递减。因此,每个指针和假指针可以维持这些列表中的每一个。在一个实施例中,VALUE_COPIED_TO和VALUE_COPIED_FROM列表(对应于目的列表160和源列表165)可以包含其它指针;ACCESS_SIZE列表(其对应于访问列表170)包含整数;以及益处计数器175累计数据使用统计。初始地,对应于外部可见符号(变量、函数)以及能够通过其它变量(例如,共用体成员)访问的变量和具有不同大小的那些其它变量的DATA_ADDRESS假指针的ACCESS_SIZE列表包含0值(在实施例中,0访问大小指示可见的字节顺序)。其它列表初始为空,并且益处计数器初始设置为0。
在第一遍,编译器用真实数据填充这些列表。每次将值从一个指针拷贝到另一个指针时,适当地扩展源的VALUE_COPIED_TO列表和目的的VALUE_COPIED_FROM列表。每次存储数据的地址时,适当地扩展源ADDRESS_DATA的VALUE_COPIED_TO和目的的VALUE_COPIED_EROM。
每次发现读取/写入时,利用读取/写入大小来扩展对应的ACCESS_SIZE列表条目。而且,取决于字节顺序改变将如何修改表达式,通过当前表达式的试探执行计数器来使益处计数器增加或者减小或者使益处计数器保持不变。在下面的示例中,各表达式的改变反映了变量A的字节顺序的改变:
A=SWAP(B)→A=B//益处计数器增加
A=0x12345678→A=0x78563412//益处计数器保持不变
A=B→A=SWAP(B)//益处计数器减小
每次发现对指针或数据地址的不支持的操作时,利用0值来扩展相应的ACCESS_SIZE。在第一遍结束时,构建了所有的列表并且编译器具有足够的信息来确定字节顺序可见性。如果针对给定的数据,通过ADDRESS_DATA的VALUE_COPIED_TO列表传递地可达的所有指针变量的ACCESS_SIZE列表的共用体包含不多于单个元素(并且该元素是非0的),则所有的数据读取/写入是该特定大小的,因此该特定数据的字节顺序对程序员而言是不可见的。
为了找到哪些数据块必须具有与给定数据(即,构成组的数据块)相同的字节顺序,编译器构建通过VALUE_COPIED_TO和VALUE_COPIED_FROM列表传递地可达的ADDRESS_DATA指针的列表。如果通过VALUE_COPIED_TO和VALUE_COPIED_FROM列表传递地可达的所有指针的ACCESS_SIZE列表的共用体包含不多于单个元素并且该元素是非0的,则对整个组的优化是可能的。
如果整个组的字节顺序对程序员而言是不可见的,并且针对整个组的不同字节顺序的选择将给出性能益处(例如,对于传递地可访问的所有指针的BENEFIT的总和是正的),则编译器进行交换并且调整数据使用。
因此,实施例检查如何使用每个特定的数据块,并且基于执行计数器和数据使用作出字节顺序决定。此外,实施例可应用于符合标准的所有数据,而非特定的数据类(例如,仅返回值)。字节顺序选择是基于正在被编译的应用中的数据使用的;针对每个特定应用的每个特定数据块来作出该决定,而非“一体适用”模型。以这种方法,编译器可以决定哪些数据应当是不同字节顺序的而非依赖于用户决定,使得所生成的代码具有更高的性能。
现在参考表2,示出的是根据本发明的一个实施例的用于提供两遍的简化的伪代码。如表2中所见,由编译器执行这两遍以控制针对特定数据的字节顺序的选择。如所见,第一遍可以用来执行代码或执行其它试探法以收集使用统计,该使用统计包括与代码的每个变量和指针相关联的各列表的更新。然后,执行第二遍以基于所收集的使用统计来优化代码。当确定字节顺序改变将优化代码时,插入/从代码中移除这些字节交换操作。
表2
第一遍:收集使用统计
第二遍:优化代码
如表2中所示,由于总的BENEFIT是正的,因此将很可能通过使用以下变换中的一个来优化去除在这里应用的交换:
SWAP(SWAP(X))→X
SWAP(const)→const_swapped
因此表达式如:
X:=SWAP(SWAP(X)+1)//为大字节序的X首先被转换为:
X:=SWAP(SWAP(SWAP(SWAP(X))+1)))//X是小字节序并且随后被优化为:
X:=X+1
可以以许多不同的系统类型来实现实施例。现在参考图4,示出的是根据本发明的实施例的系统的框图。如图4中所示,多处理器系统300是点到点互连系统,并且包括经由点到点互连350耦合的第一处理器370和第二处理器380。如图4中所示,处理器370和380中的每一个可以是多核处理器,包括第一和第二处理器核心(即,处理器核心374a和374b以及处理器核心384a和384b)。
仍然参考图4,第一处理器370还包括存储器控制器中心(MCH)372和点到点(P-P)接口376和378。类似地,第二处理器380包括MCH382和P-P接口386和388。如图4中所示,MCH372和382将处理器耦合到各自的存储器,即存储器332和存储器334,该存储器332和存储器334可以是本地附接至各自的处理器的主存储器(例如,动态随机存取存储器(DRAM))的部分。第一处理器370和第二处理器380可以分别经由P-P互连352和354耦合到芯片集390。如图4中所示,芯片集390包括P-P接口394和398。
此外,芯片组390包括接口392以将芯片集390与高性能图形引擎338相耦合。继而,芯片集390可以经由接口396而耦合到第一总线316。如图4中所示,各种I/O设备314可以耦合到第一总线316以及将第一总线316耦合到第二总线320的总线桥318。各种设备可以耦合到第二总线320,各种设备包括例如:键盘/鼠标322、通信设备326和诸如磁盘驱动器或其它大容量存储设备等的数据存储单元328,在一个实施例中,数据存储单元328可以包括代码330。这种代码可以包括根据本发明的实施例的编译器,其可以在处理器370和380中的一个或多个上执行。此外,音频I/O324可以耦合到第二总线320。
实施例可以以代码来实现,并且可以存储在存储有指令的存储介质上,该指令可以用于对系统进行编程,以执行这些指令。存储介质可以包括但不限于是:任何类型的盘,包括软盘、光盘、光盘、固态驱动器(SSD)、光盘只读存储器(CD-ROM)、可重写的光盘(CD-RW)以及磁光盘;半导体设备,诸如只读存储器(ROM)、随机存取存储器(RAM)(诸如,动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM))、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡;或者适于存储电子指令的任何其它类型的介质。
虽然参照有限数量的实施例描述了本发明,但是本领域技术人员将理解源自所描述实施例的许多修改和变形。期望所附权利要求覆盖落入本发明的真实精神和范围内的所有这种修改和变形。
Claims (9)
1.一种用于使用双字节序编译器来优化代码的方法,包括:
使用在计算机系统的处理器上执行的编译器来识别字节交换操作;
使用所述编译器来构建包括所述字节交换操作和其它表达式的域,其中所述其它表达式是交换容忍的,以及识别与所述域相关联的域入口和域出口;
使用所述编译器来确定通过执行所述域的交换将获得益处,并且响应于所述确定执行所述域的所述交换;以及
将所交换的域存储在所述计算机系统的存储介质中,
其中,执行所述域的所述交换包括改变所述相关联的域入口和域出口中的至少一些的字节顺序,并且利用以不同字节顺序操作的相对操作来替换所述域中的表达式,以及从第一表达式中移除字节交换操作以及将字节交换操作插入到第二表达式中,其中所述第一表达式具有比所述第二表达式的路径更热的路径。
2.根据权利要求1所述的方法,其中,改变所述域的域入口的字节顺序包括如果所述域入口包括字节交换操作,则移除所述字节交换操作,否则如果所述域入口不包括字节交换操作,则插入所述字节交换操作。
3.根据权利要求1所述的方法,其中,改变所述域的域出口的字节顺序包括如果所述域出口包括字节交换操作,则移除所述字节交换操作,否则如果所述域出口不包括字节交换操作,则插入所述字节交换操作。
4.根据权利要求1所述的方法,还包括通过确定从所述域中移除的代码量减去插入到所述域中的代码量大于阈值来计算所述益处。
5.根据权利要求4所述的方法,其中,计算所述益处包括对所插入的代码和所移除的代码进行加权,并且分析与所插入的代码和所移除的代码相关联的执行计数器。
6.根据权利要求1所述的方法,其中,执行所述域的交换包括在单遍中优化所述域的多个连接的表达式。
7.一种用于使用双字节序编译器来优化代码的系统,包括:
处理器,所述处理器用于执行编译器,以获得与在所述处理器上的代码的执行有关的统计信息,将所述代码所操作的数据解析为多个组,其中每个所述组中的所述数据具有用于所述代码的适当执行的相同的字节顺序,针对所述字节顺序对程序员而言不可见的每个组,确定改变所述字节顺序是否将提供性能益处,并且如果是的话则改变相应组的字节顺序以获得修改的组,并且将每个所述修改的组存储在所述系统的第一存储介质中;以及
存储设备,用于存储针对所述代码的每个指针的源列表、目的列表和访问列表,
其中,所述编译器用于识别字节交换操作,构建包括所述字节交换操作和其它表达式的域,其中所述其它表达式是交换容忍的,识别与所述域相关联的域入口和域出口,以及确定通过执行所述域的交换将获得益处,
所述编译器用于响应于所述确定执行所述域的所述交换,并将所交换的域存储在所述第一存储介质中,
其中,执行所述域的所述交换包括改变所述相关联的域入口和域出口中的至少一些的字节顺序,并且利用以不同字节顺序操作的相对操作来替换所述域中的表达式,以及从第一表达式中移除字节交换操作以及将字节交换操作插入到第二表达式中,其中所述第一表达式具有比所述第二表达式的路径更热的路径。
8.根据权利要求7所述的系统,其中,所述编译器用于在第一指针是第二指针的源时更新所述第一指针的所述目的列表,在另一指针是所述第一指针的源时更新所述第一指针的所述源列表,并且在遇到与第三指针相关联的存储器访问时利用访问的大小来更新针对所述第三指针的所述访问列表。
9.根据权利要求8所述的系统,其中,所述存储设备还包括益处计数器,所述益处计数器基于由于对表达式的字节顺序改变引起的性能益处改变是可更新的。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/RU2009/000316 WO2010151167A1 (en) | 2009-06-25 | 2009-06-25 | Optimizing code using a bi-endian compiler |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102804142A CN102804142A (zh) | 2012-11-28 |
CN102804142B true CN102804142B (zh) | 2016-03-02 |
Family
ID=43386743
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200980160069.8A Expired - Fee Related CN102804142B (zh) | 2009-06-25 | 2009-06-25 | 使用双字节序编译器优化代码 |
Country Status (8)
Country | Link |
---|---|
US (1) | US8910114B2 (zh) |
EP (1) | EP2446352A4 (zh) |
JP (1) | JP5392689B2 (zh) |
KR (1) | KR101379556B1 (zh) |
CN (1) | CN102804142B (zh) |
RU (1) | RU2515546C2 (zh) |
SG (1) | SG175951A1 (zh) |
WO (1) | WO2010151167A1 (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140100841A1 (en) * | 2012-10-09 | 2014-04-10 | Apple Inc. | Testing a Hardware Emulation Model of a Circuit with Software Checker Routines Designed for an RTL Model of the Circuit |
US9619214B2 (en) | 2014-08-13 | 2017-04-11 | International Business Machines Corporation | Compiler optimizations for vector instructions |
US10169014B2 (en) | 2014-12-19 | 2019-01-01 | International Business Machines Corporation | Compiler method for generating instructions for vector operations in a multi-endian instruction set |
US9588746B2 (en) | 2014-12-19 | 2017-03-07 | International Business Machines Corporation | Compiler method for generating instructions for vector operations on a multi-endian processor |
US9880821B2 (en) | 2015-08-17 | 2018-01-30 | International Business Machines Corporation | Compiler optimizations for vector operations that are reformatting-resistant |
US9594668B1 (en) | 2015-09-04 | 2017-03-14 | International Business Machines Corporation | Debugger display of vector register contents after compiler optimizations for vector instructions |
US11924340B2 (en) * | 2021-11-30 | 2024-03-05 | Oracle International Corporation | Cryptographically secure shuffle with multi-layer randomness |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1922574A (zh) * | 2004-02-20 | 2007-02-28 | 英特尔公司 | 无需额外的代码分析来进行链接时代码优化的方法和系统 |
CN101160564A (zh) * | 2004-12-13 | 2008-04-09 | 英特尔公司 | 用于实现有双端序能力的编译器的方法和装置 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05119960A (ja) * | 1991-10-25 | 1993-05-18 | Oki Electric Ind Co Ltd | バイトオーダ依存コーデイング検出方法 |
US5828884A (en) | 1996-05-23 | 1998-10-27 | Advanced Micro Devices, Inc. | Method for compiling a software program and executing on a system which converts data between different endian formats |
US6578193B1 (en) | 1998-03-24 | 2003-06-10 | Novell, Inc. | Endian-neutral loader for interpretive environment |
US7543284B2 (en) | 2003-04-22 | 2009-06-02 | Transitive Limited | Partial dead code elimination optimizations for program code conversion |
GB0309056D0 (en) * | 2003-04-22 | 2003-05-28 | Transitive Technologies Ltd | Block translation optimizations for program code conversion |
US7200841B2 (en) | 2003-04-22 | 2007-04-03 | Transitive Limited | Method and apparatus for performing lazy byteswapping optimizations during program code conversion |
US20070016895A1 (en) * | 2005-07-15 | 2007-01-18 | Microsoft Corporation | Selective omission of endian translation to enhance emulator performance |
US7509463B2 (en) * | 2005-12-01 | 2009-03-24 | Sony Computer Entertainment, Inc. | Cell processor atomic compare and swap using dedicated synergistic processor element |
US8010957B2 (en) * | 2006-08-01 | 2011-08-30 | International Business Machines Corporation | Compiler for eliminating redundant read-modify-write code sequences in non-vectorizable code |
CN100470484C (zh) * | 2007-02-05 | 2009-03-18 | 华南理工大学 | 一种基于hpi模型的热插拔处理方法 |
-
2009
- 2009-06-25 US US13/383,427 patent/US8910114B2/en not_active Expired - Fee Related
- 2009-06-25 RU RU2011152760/08A patent/RU2515546C2/ru not_active IP Right Cessation
- 2009-06-25 WO PCT/RU2009/000316 patent/WO2010151167A1/en active Application Filing
- 2009-06-25 JP JP2012514913A patent/JP5392689B2/ja not_active Expired - Fee Related
- 2009-06-25 KR KR1020117030086A patent/KR101379556B1/ko not_active IP Right Cessation
- 2009-06-25 SG SG2011082187A patent/SG175951A1/en unknown
- 2009-06-25 CN CN200980160069.8A patent/CN102804142B/zh not_active Expired - Fee Related
- 2009-06-25 EP EP09846596A patent/EP2446352A4/en not_active Withdrawn
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1922574A (zh) * | 2004-02-20 | 2007-02-28 | 英特尔公司 | 无需额外的代码分析来进行链接时代码优化的方法和系统 |
CN101160564A (zh) * | 2004-12-13 | 2008-04-09 | 英特尔公司 | 用于实现有双端序能力的编译器的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
KR20120058467A (ko) | 2012-06-07 |
KR101379556B1 (ko) | 2014-04-10 |
RU2011152760A (ru) | 2013-10-27 |
US8910114B2 (en) | 2014-12-09 |
JP5392689B2 (ja) | 2014-01-22 |
SG175951A1 (en) | 2011-12-29 |
EP2446352A1 (en) | 2012-05-02 |
US20120185836A1 (en) | 2012-07-19 |
CN102804142A (zh) | 2012-11-28 |
EP2446352A4 (en) | 2012-11-21 |
RU2515546C2 (ru) | 2014-05-10 |
WO2010151167A1 (en) | 2010-12-29 |
JP2012529698A (ja) | 2012-11-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102804142B (zh) | 使用双字节序编译器优化代码 | |
US6467075B1 (en) | Resolution of dynamic memory allocation/deallocation and pointers | |
CN101957773B (zh) | 用于多轮次动态概要分析的方法及其系统 | |
US20070240137A1 (en) | Method of compiling source code | |
US7784042B1 (en) | Data reordering for improved cache operation | |
CN103329132A (zh) | 架构优化器 | |
JPH02217926A (ja) | コード生成方法 | |
CN102103481A (zh) | 字节序转换工具 | |
KR101503620B1 (ko) | 지능형 아키텍처 생성기 | |
CN100552650C (zh) | 用于结合使用有效范围语句和动态缓存变量的方法 | |
CN100414514C (zh) | 用于存储器访问指令向量化的方法和设备 | |
US11262989B2 (en) | Automatic generation of efficient vector code with low overhead in a time-efficient manner independent of vector width | |
US9940267B2 (en) | Compiler global memory access optimization in code regions using most appropriate base pointer registers | |
CN113553057A (zh) | 一种针对不同架构的gpu进行并行计算的优化系统 | |
EP2181389A2 (en) | Data processing with protection against soft errors | |
JP3638171B2 (ja) | 資源割付装置 | |
US7856529B2 (en) | Customizable memory indexing functions | |
JP3264901B2 (ja) | コンパイル装置及びコンパイル方法 | |
US10140135B2 (en) | Method for executing a computer program with a parameterised function | |
Gouin et al. | An up to date mapping methodology for GPUs | |
US20220147442A1 (en) | Method for the execution of a computer program by an electronic computing device comprising a main memory and a secondary memory | |
EP4350504A1 (en) | Cross-linking method and apparatus, electronic device, and storage medium | |
US20050183079A1 (en) | Tail duplicating during block layout | |
CN114217806A (zh) | 基于cache写暗示机制的编译优化方法 | |
Chang et al. | Access-pattern-aware on-chip memory allocation for simd processors |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160302 Termination date: 20210625 |
|
CF01 | Termination of patent right due to non-payment of annual fee |