CN104956322A - 分析向量化的潜在效益 - Google Patents
分析向量化的潜在效益 Download PDFInfo
- Publication number
- CN104956322A CN104956322A CN201380072306.1A CN201380072306A CN104956322A CN 104956322 A CN104956322 A CN 104956322A CN 201380072306 A CN201380072306 A CN 201380072306A CN 104956322 A CN104956322 A CN 104956322A
- Authority
- CN
- China
- Prior art keywords
- executable instruction
- instruction
- benefit
- counting
- subset
- 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.)
- Granted
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
- 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/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/456—Parallelism detection
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Devices For Executing Special Programs (AREA)
- Mathematical Physics (AREA)
Abstract
本文描述了计算机实现的方法、系统、计算设备和计算机可读介质(暂时性和非暂时性)的实施例,用于分析多个可执行指令的执行,并且基于分析而提供通过多个可执行指令的至少子集的向量化将获得的效益的指示。在各种实施例中,分析可以包括标识适合于转换为一个或多个单指令多数据(“SIMD”)指令的多个可执行指令的子集。
Description
技术领域
本发明的实施例一般地涉及数据处理的技术领域,并且更具体地涉及分析对可执行指令进行向量化的潜在效益。
背景技术
本文提供的背景描述是为了一般地呈现本公开的上下文的目的。目前被指名的发明人的工作,在本背景技术章节中对其进行描述的程度上,以及在提交时可能不以其它方式被限定为现有技术的描述的各方面既不明确地也不隐含地被承认为抵触本公开的现有技术。除非本文中另行指示,否则本章节中描述的方法不是对于本公开中的权利要求的现有技术,并且不会通过被包括在本章节中而被承认为是现有技术。
对诸如单指令、多数据(“SIMD”)指令的向量化的指令的支持正在计算架构中扩展。然而,被向量化(例如,转换为SIMD)以利用该扩展的计算机代码的百分比仍然很低。尽管存在用于针对向量化机会而分析源代码的工具,但是源代码可能不总是可用的,并且在一些情况下,仅非人类可读的、容易可执行的指令,诸如二进制指令(例如,机器代码)和/或字节代码可用。
附图说明
通过结合附图的以下详细描述将容易地理解实施例。为了便于该描述,同样的参考标号指明同样的结构元件。作为示例而不是作为附图的各图中的限制来图示实施例。
图1示意性地图示了根据各种实施例的可以在向量化效益分析期间被标识的可执行指令的示例群组。
图2示意性地图示了根据各种实施例的用于针对向量化机会而分析可执行指令的执行的示例系统。
图3示意性地描绘了根据各种实施例的可以被生成并且用于向量化效益分析的示例控制流程图。
图4示意性地描绘了根据各种实施例的可以被生成并且用于向量化效益分析的相关性链。
图5示意性地描绘了根据各种实施例的可以被生成以提供向量化效益分析的结果的示例报告。
图6示意性地描绘了根据各种实施例的可以被实现为执行向量化效益分析的示例方法。
图7示意性地图示了根据各种实施例的用于向量化效益分析的另一示例系统。
图8示意性地描绘了根据各种实施例的在其上可以实现所公开的方法和计算机可读介质的示例计算设备。
具体实施方式
在以下的具体实施方式中,参考形成其部分的附图,其中贯穿全文同样的标号指明同样的部分,并且其中通过图示的方式示出可以实践的实施例。要理解,可以利用其它实施例,并且可以进行结构或逻辑改变,而不背离本公开的范围。因此,下面的详细描述不要以限制性的意义来理解,并且实施例的范围由所附权利要求及其等同物来限定。
可以以最有助于理解要求保护的主题的方式来依次将各种操作描述为多个分立的动作或操作。然而,描述的次序不应当被解释为暗示这些操作必定是次序相关的。具体地,这些操作可以不以呈现的次序来执行。可以以不同于所描述的实施例的次序来执行所描述的操作。可以执行各种附加的操作和/或可以在附加实施例中省略所描述的操作。
出于本公开的目的,短语“A和/或B”意指(A)、(B)或(A和B)。出于本公开的目的,短语“A、B和/或C”意指(A)、(B)、(C)、(A和B)、(A和C)、(B和C)或(A、B和C)。
描述可以使用短语“在实施例中”或“在多个实施例中”,其可以各自指代一个或多个相同或不同的实施例。此外,如关于本公开的实施例使用的术语“包括”、“包含”、“具有”等是同义的。
如本文所使用的,术语“模块”和/或“逻辑”可以指代以下各项、是以下各项的部分或者包括以下各项:专用集成电路(“ASIC”)、电子电路、执行一个或多个软件或固件程序的处理器(共享的、专用的或群组)和/或存储器(共享的、专用的或群组)、组合逻辑电路和/或提供所描述的功能性的其它合适的组件。
本文中描述了用于向量化效益分析的技术。如本文所使用的,“向量化效益分析”可以指针对向量化机会而分析多个可执行指令的执行和/或提供向量化的潜在效益的指示。如本文所使用的,“多个可执行指令”通常可以指容易地可执行(例如,不需要完全编译)的计算机程序。容易地可执行的多个可执行指令可以包括非人类可读指令,诸如二进制指令(例如,机器代码)、字节代码(例如,通过软件解释器可执行的)等。与此相反,人类可读的源代码(例如,以C、C++等编写的)将不会被认为是“容易地可执行的”,因为其在没有至少一些编译的情况下不可执行。容易地可执行的多个可执行指令的另一示例可以附加地或替代地包括计算机程序跟踪(trace),诸如指令的在先执行的动态跟踪(例如,从监视指令的实际执行或从以任何形式的所记录的跟踪而生成的)。在各种实施例中,可以提供向量化的潜在效益的指示以用于向用户报告和/或作为对另一系统或过程的输入。
图1描绘了根据各种实施例的示出了可以在向量化效益分析的各个阶段被标识和/或检测的可执行指令的各种集合和子集的维恩图解100。指明为{A}的可执行指令的第一集合可以包括被分析的计算机程序或跟踪中的所有可执行指令,并且可以用作向量化效益分析的开始点。集合{B}-{E}表示{A}和/或彼此的子集。如将在下面更详细描述的,{B}可以包括位于{A}的相对执行密集的点(例如,频繁执行的循环)中的可执行指令。 {C}可以包括位于一个或多个循环中的可执行指令,诸如被包含在循环中的{B}中的可执行指令。{D}可以包括没有向量相关性(dependency)的可执行指令,诸如没有迭代间相关性的{C}中的可执行指令。{E}可以包括适合于向量化(例如,转换为单指令多数据或“SIMD”指令)作为封装的可执行指令。这些可以包括具有规则的操作数存储器访问模式的可执行指令,诸如具有寄存器操作数的指令或以恒定或可预测的间隔访问存储器的指令。
在各种实施例中,向量化效益分析可以包括标识适合于向量化的多个可执行指令的子集。在各种实施例中,如果指令可转换为一个或多个SIMD指令,则例如形成基本块的可执行指令的群组可以适合于向量化。各种指令集架构(“ISA”)可以包括向量/ SIMD指令,包括但不限于高级向量扩展(“AVX”)、AVX2和流式SIMD扩展(“SSE”),这全部经由加利福尼亚州圣克拉拉的Intel®公司。
参考图2,在各种实施例中,用于向量化效益分析的系统200可以包括被配置为对多个可执行指令的执行进行仿真的仿真器202。仿真器202可以包括硬件和软件的任何组合。各种现有工具可以用作仿真器202。例如,在一些实施例中,一个或多个Pin——动态二进制插桩工具和软件开发仿真器(“SDE”)(二者都经由Intel®)可以用作仿真器202。在一些实施例中,用于分析指令跟踪的工具,诸如Funcsim,可以用作仿真器202。这些示例并不意味着是限制性的,并且其它工具可以用作仿真器202。
在各种实施例中,效能评测器(profiler)204可以被配置为监视{A}中的可执行指令的执行,并且采用各种二进制转化和/或编译器技术来检测一个或多个执行密集点,也被称为“热点”或“热区”。热点可以以各种方式来标识。在一些实施例中,热点可以包括被执行多于计算机程序的总操作时间和/或操作周期的阈值百分比的可执行指令的序列和/或群组。例如,如果可执行指令集的执行构成计算机程序或指令跟踪的总周期的多于40%,则该指令集可以被表征为热点。给定较高的执行速率,对热点可执行指令进行向量化的潜在效益可以大于例如对不太经常执行的可执行指令进行向量化的潜在效益。在图1中,指明为{B}的{A}内的可执行指令的子集被标识为在(多个)热区内。
在各种实施例中,效能评测器204可以被配置为生成关于可执行指令的执行的其它信息。例如,在各种实施例中,效能评测器204可以被配置为生成动态分支方向简档、动态存储器(例如,加载/存储地址)简档、指令字节(例如,使用X86编码器解码器或“XED”所解码的)等。在各种实施例中,动态分支方向简档可以包括关于在{A}和/或{B}的执行期间遵循哪些分支的数据。在各种实施例中,动态加载/存储地址简档可以包括关于在{A}和/或{B}的执行期间访问的存储器位置的地址的数据。在各种实施例中,指令字节可以包括关于在{A}和/或{B}的执行期间执行哪些操作(例如,操作码,诸如添加、分支、减去等)的数据。
在各种实施例中,系统200可以包括分析器206,分析器206被配置为分析由效能评测器204生成的信息。在各种实施例中,分析器206可以被配置为确定通过对多个可执行指令中的至少一些可执行指令进行向量化可以获得的效益。作为该分析的部分,在各种实施例中,分析器206可以被配置为标识在图1中被指明为{C}-{E}的群组中的一个或多个。
例如,在各种实施例中,分析器206可以被配置为检测在图1中被指明为{C}的一个或多个循环中的可执行指令。为了检测循环,在各种实施例中,分析器206可以采用诸如构建控制流程图并且然后在该图上执行后沿检测的技术。
在图3中示出了示例控制流程图300。在该示例中,控制可以开始于被标明为“BB1”的指令的第一基本块。然后,控制可以沿着路径302向下流到被标明为“BB6”的指令的基本块或者沿着路径304向下到被标明为“BB2”的指令的另一基本块。控制可以沿着路径306向下从BB2流到被标明为“BB3”的指令的基本块,或者沿着路径308向下到被标明为“BB4”的指令的另一基本块。在BB3处,控制可以沿着路径310向下流到被标明为“BB5”的指令的基本块。然而,在BB4处,控制可以沿着路径312向下流到BB5,或者可以通过路径314循环回到BB4。因此,路径314构成循环。控制可以保持在BB4处,直到满足使得控制退出由路径314限定的循环的条件。在BB5处,控制可以通过路径316流到BB6。在BB6处,控制可以通过路径318流回到BB1。因此,从BB1到BB6并且再次返回而可以取的各种路径可以构成另一循环。此外,由路径314所限定的循环可以是在BB1和BB6之间的“较大”循环内的嵌套循环。在各种实施例中,诸如这些的循环内的可执行指令可以形成{C}。
参考回图1和图2,在各种实施例中,分析器206可以被配置为例如从{C}内检测没有向量或循环迭代间相关性的可执行指令的子集。这样的指令子集在图1中被标识为{D}。为了检测{D},在各种实施例中,分析器206可以执行相关性分析,例如以标识在指令之间的执行次序约束(例如,循环迭代间相关性),以确定对可执行指令进行重排序是否是安全的。在各种实施例中,分析器206可以在寄存器上执行静态相关性分析,以标识数据相关性。在各种实施例中,分析器206可以执行重会聚分析以发现分支的两个边在哪里会聚,例如,以标识控制相关性。例如,在图3中,BB2的端部处的分支会聚于BB5处,使得BB3和BB4中的所有指令依赖于BB2的端部处的分支。
作为相关性分析的部分,在各种实施例中,分析器206可以被配置为生成一个或多个相关性链。用于指令I的相关性链C列出了I直接/间接依赖于的所有指令(例如,由I消耗的值的直接/间接产生器)。如果C包含I本身(例如,I直接/间接依赖于本身),则指令I可以具有阻止向量化的迭代间相关性,并且因此可能不被指派给{D}。另一方面,如果I不直接/间接依赖于本身,则I可以被指派给{D}。在图4中描绘了示例相关性链。图4中的指令1和3可以潜在地依赖于它们本身,并且因此可能不是可向量化的。
在各种实施例中,分析器206可以被配置为例如从没有向量相关性的可执行指令集(图1中的{D})中检测适合于转换为一个或多个SIMD指令的一个或多个可执行指令。这些指令在图1中被指明为{E}。为了标识{E},在一些实施例中,分析器206可以标识引起以规则间隔的地址而对存储器的访问的指令。例如,以存储器位置的邻接序列或者至少以存储器位置的可辨别模式(例如,每隔、每三个等)访问存储器的指令可以被视为以“规则”间隔访问存储器,并且可以被描述为具有恒定“跨步(stride)”。在各种实施例中,{E}中的可执行指令的基本块可以被认为是可向量化的(例如,可转换为SIMD)。将从该向量化获得的潜在增益可以例如由分析器206确定和提供为对用户的报告或者对自动化系统的输入以用于优化可执行指令。
图5描绘了根据各种实施例的可以例如由分析器206生成以提供向量化效益分析的结果的示例报告500。报告500中呈现的信息和效益不意味着是限制性的,并且其它信息和统计可以在报告中呈现,这取决于执行向量化效益分析的实体的偏好。在各种实施例中,报告500可以取具有超链接和通常存在于网页上的其它组件的超文本标记语言(“HTML”)文档的形式。报告500可以附加地或替代地取其它形式,诸如经由向量化效益分析计算机程序的图形用户接口(“GUI”)。
在各种实施例中,报告500可以包括在向量化效益分析期间计算的各种量。例如,报告500可以包括被包含在循环中的可执行指令或{C}如与过程中的所有指令或者{A}相比的百分比。因此,在该示例中,{C}中的可执行指令可以形成{A}中的所有可执行指令的3.1%。在各种实施例中,报告500可以附加地或替代地包括没有向量相关性的可执行指令或{D}(在图5中被称为“独立Instr.”)如与{C}相比的百分比,其在该示例中为100%。在各种实施例中,报告500可以附加地或替代地包括可向量化的指令或{E}(在图5中被称为“可向量化(作为封装的)”)如与{C}相比的百分比,其在该示例中为100%。
在各种实施例中,报告500可以包括平均行程(trip)计数乘以数据操作数大小。在各种实施例中,“平均行程计数”可以指{C}中的可执行指令的平均迭代(例如,执行循环中的可执行指令的平均次数)。在图5的示例中,数据操作数大小(其可以是原始指令可以作用于的数据的宽度)是8.0字节,其当乘以平均行程计数时得到185.6。在各种实施例中,报告500可以包括{C}中的基本块和两边(two-edge)基本块的数目,其在该示例中分别为1.0和0,以捕获循环内的控制复杂度的量。
在各种实施例中,评级(ranking)系统可以被采用以向用户提供各种上述量影响了向量化的潜在效益多少的快速和简单的指示。例如,在报告500中,在各种百分比和量的右侧描绘了一系列星“*”。这些星可以提供那些量中的每一个如何对向量化的影响起作用的粗略指示。
如上所指出的,{C}中的指令形成整个计算机程序{A}的3.1%,这可能相当于五星中的三颗。在各种实施例中,如果{C}中的指令形成了整个程序{A}的更高的百分比,例如,50%,那么可以给出四个或五个星。如果{C}中的指令形成了{A}的更低的百分比,例如,1%,那么可以给出一或零个星。在各种实施例中,针对特定量而给出的星的数目可以基于与该量相关联的影响的各种阈值。这样的阈值可以由用户例如基于经验数据和/或用户偏好来确定和/或配置。
在各种实施例中,可以在报告500中报告关于可以通过向量化获得的效益的信息。例如,在一些实施例中,报告500可以包括可以通过向量化实现的整个程序或{A}的多个可执行指令的计数的减少。在图5中,例如,报告了向量化将产生关于整个程序{A}的1.03x的增益。作为另一示例,在一些实施例中,报告500可以包括关于可执行指令循环{C}的可执行指令的计数的减少,其在这里是7.73x。
在各种实施例中,报告500中可以包括其它信息。例如,“循环展开”是在编译期间执行的优化过程,其中循环中的可执行指令被重复多次(称为“循环展开因子”)。在一些实施例中,分析器206可以被配置为确定循环展开因子,例如,以供在报告500中提供。
另外或替代地,报告500可以包括用户可操作元素,诸如对各种类型的信息的链接。例如,在图5中,报告500包括对以下各项的链接:循环{C}的汇编代码、针对该特定程序生成的控制流程图(例如,在图3中的300)、用于{B}的热区的调试文件、和源文件。
在各种实施例中,分析器206可以使用诸如以下一个的算法来确定来自向量化的潜在增益。
在该示例中,“潜在增益”可以是提供可以通过向量化获得的增益的指示(例如,作为百分比)的正数。“Total_Insts”可以是指代{A}中的可执行指令的总数的正数。“Estimated_Vector_Insts”可以是指代被标识为适合于转换为SIMD指令的可执行指令(例如,{E})的所估计数目除以所谓的“Iteration_Reduction_Ratio”的正数。“Non_Vectorizable_Insts”可以是指代在{A}中的可执行指令的总数与{A}中的不可向量化的可执行指令的数目之间的差(例如,{A}-{E})的正数。“Iteration_Reduction_Ratio”可以是指代所谓的“Avg_Trip_Count”除以所谓的“Vectorized_Trip_Count”的正数。“Avg_Trip_Count”可以是指代检查中的循环的循环迭代的平均数的正数。“Vectorized_Trip_Count”可以是指代“Avg_Trip_Count”与所谓的“Vector_Element_Size”的向上舍入的乘积除以所谓的“SIMD_Width”的正数。“Vector_Element_Size”可以是指代通过指令而在其上操作的数据操作数的大小的正数。“SIMD_Width”可以是指代SIMD寄存器的宽度的正数,例如以字节。
图6描绘了示例方法600,其各种方面可以通过仿真器202、效能评测器204和/或分析器206中的一个或多个实现,以执行向量化效益分析。这些技术可以在整数或浮点(“FP”)代码上使用,并且可以在标量代码和已经部分向量化的代码(例如,SSE到AVX)二者上使用。在框602处,可以例如由仿真器202来执行多个可执行指令{A},诸如计算机程序或指令跟踪。在框604处,可以例如由效能评测器204来检测多个可执行指令的执行密集点或“热点”{B}。
在框606处,可以例如由分析器206从多个可执行指令{A}内检测包括循环的可执行指令集,例如{C}。在框608处,可以例如由分析器206从{C}内检测不具有相关性(其可能阻止向量化)的可执行指令集,例如{D}。在框610处,可以例如由分析器206从{D}内检测以规则间隔访问寄存器或存储器的一个或多个可执行指令,例如{E}。在框612处,可以例如由分析器206来提供通过向量化{E}中的指令将获得的效益的指示。在一些实施例中,那些效益可以在报告中被提供,诸如图5的报告500。在一些实施例中,那些效益可以被提供为对另一计算机程序的输入,例如以允许所述另一计算机程序选择性地执行多个可执行指令{A}中的一个或多个可执行指令的向量化。
图7描绘了根据各种实施例的可以用于执行实时向量化效益分析的类似于图2的系统100的可替代的硬件/软件共同设计的系统700。基于硬件的热点检测器702可以被配置为检测当前执行的多个可执行指令内的热点,特别是RTIT。基于那些检测的热点,在一些情况下也可以基于硬件的跟踪效能评测器704可以提供与以上关于图2的效能评测器204描述的那些类似的各种简档。分析器706可以被配置为执行与本文中关于图2的分析器206描述的那些类似的各种分析操作。
图8图示了根据各种实施例的示例计算设备800。计算设备800可以包括多个组件、一个或多个处理器804和至少一个通信芯片806。在各种实施例中,处理器804可以是处理器核。在各种实施例中,至少一个通信芯片806还可以物理地和电气地耦合到处理器804。在另外的实现中,通信芯片806可以是处理器804的部分。在各种实施例中,计算设备800可以包括印刷电路板(“PCB”)802。对于这些实施例,处理器804和通信芯片806可以布置在其上。在替代实施例中,可以在没有采用PCB
802的情况下耦合各种组件。
取决于其应用,计算设备800可以包括可以或可以不被物理地和电气地耦合到PCB
802的其它组件。这些其它组件包括但不限于易失性存储器(例如,动态随机存取存储器808,也称为“DRAM”)、非易失性存储器(例如,只读存储器810,也被称为“ROM”)、闪速存储器812、图形处理器814、输入/输出控制器816、数字信号处理器(未示出)、加密处理器(未示出)、一个或多个天线818、显示器(未示出)、触摸屏显示器820、触摸屏控制器822、电池824、音频编解码器(未示出)、视频编解码器(未示出)、全球定位系统(“GPS”)设备828、罗盘830、加速度计(未示出)、陀螺仪(未示出)、扬声器832、相机834和大容量存储设备(诸如硬盘驱动装置、固态驱动装置、光盘(“CD”)、数字通用盘(“DVD”))(未示出)等。在各种实施例中,处理器804可以与其它组件被集成在相同芯片上,以形成芯片上系统(“SoC”)。
在各种实施例中,易失性存储器(例如,DRAM 808)、非易失性存储器(例如,ROM
810)、闪速存储器812和大容量存储设备可以包括编程指令,所述编程指令被配置为使得计算设备800能够响应于通过(多个)处理器804的执行而实践方法600的全部或所选择的方面。例如,诸如易失性存储器(例如,DRAM 808)、非易失性存储器(例如,ROM
810)、闪速存储器812和大容量存储设备之类的存储器组件中的一个或多个可以包括指令的暂时和/或持久拷贝,其当被执行时,使得计算设备800操作仿真器202或热点检测器702的软件版本、效能评测器204/704和/或分析器206/706,其被配置为实践方法600的所有或选择的方面。
通信芯片806可以使得能够实现有线和/或无线通信以用于向和从计算设备800传递数据。术语“无线”及其衍生词可以用于描述电路、设备、系统、方法、技术、通信信道等,其可以通过非固态介质通过使用调制的电磁辐射来传送数据。所述术语没有暗示相关联的设备不包含任何导线,尽管在一些实施例中它们可能不包含。本文描述的大多数实施例包括作为示例的WiFi和LTE
RAT。然而,通信芯片806可以实现多个无线标准或协议中的任一个,包括但不限于IEEE
802.20、通用分组无线电服务(“GPRS”)、演进数据优化的(“EV-DO”)、演进的高速分组接入(“HSPA+”)、演进的高速下行链路分组接入(“HSDPA+”)、演进的高速上行链路分组接入(“HSUPA+”)、全球移动通信系统(“GSM”)、用于GSM演进的增强的数据速率(“EDGE”)、码分多址(“CDMA”)、时分多址(“TDMA”)、数字增强的无绳电信(“DECT”)、蓝牙、其衍生物以及被指明为3G、4G、5G以及以上的任何其它无线协议。计算设备800可以包括多个通信芯片806。例如,第一通信芯片806可以专用于诸如Wi-Fi和蓝牙的较短距离无线通信,并且第二通信芯片806可以专用于较长距离无线通信,诸如GPS、EDGE、GPRS、CDMA、WiMAX、LTE、EV-DO以及其它。
在各种实现中,计算设备800可以是膝上型计算机、上网本、笔记本、超级本、智能电话、计算平板、个人数字助理(“PDA”)、超移动PC、移动电话、台式计算机、服务器、打印机、扫描仪、监视器、机顶盒、娱乐控制单元(例如,游戏控制台)、数字相机、便携式音乐播放器或数字视频记录器。在另外的实现中,计算设备800可以是处理数据的任何其它电子设备。
示例
示例1目的在于具有体现在其中的计算机可读代码的至少一个计算机可读介质,所述计算机可读代码被配置为使得计算设备响应于代码的执行来分析多个可执行指令的执行,并且基于所述分析来提供通过多个可执行指令的至少子集的向量化将获得的效益的指示,其中,分析包括标识适合于转换为一个或多个单指令多数据(“SIMD”)指令的多个可执行指令的子集。
示例2包括示例1的至少一个计算机可读介质,其中分析包括检测多个可执行指令中的一个或多个执行密集点,并且标识包括从一个或多个检测到的执行密集点内选择子集。
示例3包括示例1或2的至少一个计算机可读介质,其中分析包括检测多个可执行指令中的包括循环的可执行指令集{C},并且标识包括从{C}中选择子集。
示例4包括示例3的至少一个计算机可读介质,其中分析还包括从{C}内检测没有向量相关性的可执行指令集{D},并且标识还包括从{D}中选择子集。
示例5包括示例4的至少一个计算机可读介质,其中分析还包括从{D}内检测引起以规则间隔的地址访问存储器的一个或多个可执行指令{E},并且标识包括标识{E}中的可执行指令。
示例6包括示例5的至少一个计算机可读介质,其中,将获得的效益被提供为{E}中的可执行指令的计数作为{C}中的可执行指令的计数的百分比。
示例7包括示例1或2的至少一个计算机可读介质,其中,将获得的效益被提供为多个可执行指令的计数的减少。
示例8包括示例3的至少一个计算机可读介质,其中,将获得的效益被提供为{C}中的可执行指令的计数的减少。
示例9包括示例1或2的至少一个计算机可读介质,其中多个可执行指令包括指令跟踪。
示例10目的在于一种系统,包括:一个或多个处理器;存储器,其耦合到一个或多个处理器;分析器,其将由一个或多个处理器操作以分析多个可执行指令的执行,并且基于所述分析来提供通过多个可执行指令的至少子集的向量化将获得的效益的指示,其中,分析包括标识适合于转换为一个或多个单指令多数据(“SIMD”)指令的多个可执行指令的子集。
示例11包括示例10的系统,并且还包括效能评测器,所述效能评测器将由一个或多个处理器操作以检测在多个可执行指令中的一个或多个执行密集点,其中,分析器被配置为从一个或多个检测到的执行密集点内选择子集。
示例12包括示例10或11的系统,其中,分析器还被配置为:检测多个可执行指令中的包括循环的可执行指令集{C};以及从{C}中选择子集。
示例13包括示例12的系统,其中,分析器还被配置为:从{C}内检测没有向量相关性的可执行指令集{D};以及从{D}中选择子集。
示例14包括示例13的系统,其中,分析器还被配置为:从{D}内检测引起以规则间隔的地址访问存储器的一个或多个可执行指令{E};以及为了包括在子集中而选择{E}中的可执行指令。
示例15包括示例14的系统,其中,分析器还被配置为把将获得的效益提供为{E}中的可执行指令的计数作为{C}中的可执行指令的计数的百分比。
示例16包括示例10或11的系统,其中,分析器还被配置为把将获得的效益提供为多个可执行指令的计数的减少。
示例17包括示例12的系统,其中,分析器还被配置为把将获得的效益提供为{C}中的可执行指令的计数的减少。
示例18包括示例10或11的系统,其中多个可执行指令包括指令跟踪。
示例19目的在于一种计算机实现的方法,包括:由计算设备分析多个可执行指令的执行;由计算设备标识适合于转换为一个或多个单指令多数据(“SIMD”)指令的多个可执行指令的子集;以及由计算设备提供通过多个可执行指令的至少子集的向量化将获得的效益的指示。
示例20包括示例19的计算机实现的方法,其中分析包括检测多个可执行指令中的一个或多个执行密集点,并且标识包括从一个或多个检测到的执行密集点内选择子集。
示例21包括示例19或20的计算机实现的方法,其中分析包括检测多个可执行指令中的包括循环的可执行指令集{C},并且标识包括从{C}中选择子集。
示例22包括示例21的计算机实现的方法,其中,分析还包括从{C}内检测没有向量相关性的可执行指令集{D},并且标识包括从{D}中选择子集。
示例23包括示例22的计算机实现的方法,其中,分析还包括从{D}内检测引起以规则间隔的地址访问存储器的一个或多个可执行指令{E},并且标识包括标识{E}中的可执行指令。
示例24包括示例23的计算机实现的方法,其中,提供包括把将获得的效益提供为{E}中的可执行指令的计数作为{C}中的可执行指令的计数的百分比。
示例25包括示例19或20的计算机实现的方法,其中,提供包括把将获得的效益提供为多个可执行指令的计数的减少。
示例26包括示例21的计算机实现的方法,其中,提供包括把将获得的效益提供为{C}中的可执行指令的计数的减少。
示例27包括示例19的计算机实现的方法,其中多个可执行指令包括指令跟踪。
示例28目的在于一种装置,包括:用于分析多个可执行指令的执行的构件;用于标识适合于转换为一个或多个单指令多数据(“SIMD”)指令的多个可执行指令的子集的构件;以及用于提供通过多个可执行指令的至少子集的向量化将获得的效益的指示的构件。
示例29包括示例28的装置,其中用于分析的构件包括用于检测多个可执行指令中的一个或多个执行密集点的构件,以及用于标识的构件包括用于从一个或多个检测到的执行密集点内选择子集的构件。
示例30包括示例28或29的装置,其中用于分析的构件包括用于检测多个可执行指令中的包括循环的可执行指令集{C}的构件,以及用于标识的构件包括用于从{C}中选择子集的构件。
示例31包括示例20的装置,其中用于分析的构件还包括用于从{C}内检测没有向量相关性的可执行指令集{D}的构件,以及用于标识的构件包括从{D}中选择子集。
示例32包括示例31的装置,其中用于分析的构件还包括用于从{D}内检测引起以规则间隔的地址访问存储器的一个或多个可执行指令{E}的构件,以及用于标识的构件包括标识{E}中的可执行指令。
示例33包括示例32的装置,其中,用于提供的构件包括用于把将获得的效益提供为{E}中的可执行指令的计数作为{C}中的可执行指令的计数的百分比的构件。
示例34包括示例28或29的装置,其中,用于提供的构件包括用于把将获得的效益提供为多个可执行指令的计数的减少的构件。
示例35包括示例30的装置,其中,用于提供的构件包括用于把将获得的效益提供为{C}中的可执行指令的计数的减少的构件。
示例36包括示例28的装置,其中多个可执行指令包括指令跟踪。
尽管已经出于描述的目的而在本文中图示和描述了某些实施例,但本申请意在涵盖本文所讨论的实施例的任何适配或变型。因此,显然意图的是本文描述的实施例仅由权利要求来限制。
在本公开叙述了“一”或“第一”元件或其等同物的地方,这样的公开包括一个或多个这样的元件,既不要求也不排除两个或更多个这样的元件。另外,用于所标识的元件的序数指示符(例如,第一、第二或第三)用于在元件之间进行区分,并且不指示或暗示所需或有限数目的这样的元件,它们也不指示这样的元件的特定定位或次序,除非以其它方式特别声明。
Claims (25)
1.一种具有体现在其中的计算机可读代码的至少一个计算机可读介质,所述计算机可读代码被配置为使得计算设备响应于代码的执行来分析多个可执行指令的执行,并且基于所述分析来提供通过多个可执行指令的至少子集的向量化将获得的效益的指示,其中,所述分析包括标识适合于转换为一个或多个单指令多数据(“SIMD”)指令的多个可执行指令的子集。
2.根据权利要求1所述的至少一个计算机可读介质,其中,所述分析包括检测多个可执行指令中的一个或多个执行密集点,并且所述标识包括从一个或多个检测到的执行密集点内选择子集。
3.根据权利要求1或2所述的至少一个计算机可读介质,其中,所述分析包括检测多个可执行指令中的包括循环的可执行指令集{C},并且所述标识包括从{C}中选择子集。
4.根据权利要求3所述的至少一个计算机可读介质,其中,所述分析还包括从{C}内检测没有向量相关性的可执行指令集{D},并且所述标识还包括从{D}中选择子集。
5.根据权利要求4所述的至少一个计算机可读介质,其中,所述分析还包括从{D}内检测引起以规则间隔的地址访问存储器的一个或多个可执行指令{E},并且所述标识包括标识{E}中的可执行指令。
6.根据权利要求5所述的至少一个计算机可读介质,其中,将获得的效益被提供为{E}中的可执行指令的计数作为{C}中的可执行指令的计数的百分比。
7.根据权利要求1或2所述的至少一个计算机可读介质,其中,将获得的效益被提供为多个可执行指令的计数的减少。
8.根据权利要求3所述的至少一个计算机可读介质,其中,将获得的效益被提供为{C}中的可执行指令的计数的减少。
9.根据权利要求1或2所述的至少一个计算机可读介质,其中,多个可执行指令包括指令跟踪。
10.一种系统,包括:
一个或多个处理器;
存储器,其耦合到一个或多个处理器;
分析器,其将由一个或多个处理器操作以分析多个可执行指令的执行,并且基于所述分析来提供通过多个可执行指令的至少子集的向量化将获得的效益的指示,其中,所述分析包括标识适合于转换为一个或多个单指令多数据(“SIMD”)指令的多个可执行指令的子集。
11.根据权利要求10所述的系统,还包括效能评测器,所述效能评测器将由一个或多个处理器操作以检测多个可执行指令中的一个或多个执行密集点,其中,分析器被配置为从一个或多个检测到的执行密集点内选择子集。
12.根据权利要求10或11所述的系统,其中,分析器还被配置为:
检测多个可执行指令中的包括循环的可执行指令集{C};以及
从{C}中选择子集。
13.根据权利要求12所述的系统,其中,分析器还被配置为:
从{C}内检测没有向量相关性的可执行指令集{D};以及
从{D}中选择子集。
14.根据权利要求13所述的系统,其中,分析器还被配置为:
从{D}内检测引起以规则间隔的地址访问存储器的一个或多个可执行指令{E};以及
为了包括在子集中而选择{E}中的可执行指令。
15.根据权利要求14所述的系统,其中,分析器还被配置为把将获得的效益提供为{E}中的可执行指令的计数作为{C}中的可执行指令的计数的百分比。
16.根据权利要求10或11所述的系统,其中,分析器还被配置为把将获得的效益提供为多个可执行指令的计数的减少。
17.根据权利要求12所述的系统,其中,分析器还被配置为把将获得的效益提供为{C}中的可执行指令的计数的减少。
18.根据权利要求10或11所述的系统,其中,多个可执行指令包括指令跟踪。
19.一种计算机实现的方法,包括:
由计算设备分析多个可执行指令的执行;
由计算设备标识适合于转换为一个或多个单指令多数据(“SIMD”)指令的多个可执行指令的子集;以及
由计算设备提供通过多个可执行指令的至少子集的向量化将获得的效益的指示。
20.根据权利要求19所述的计算机实现的方法,其中,所述分析包括:
检测多个可执行指令中的一个或多个执行密集点;
检测多个可执行指令中的包括循环的可执行指令集{C};
从{C}内检测没有向量相关性的可执行指令集{D};以及从{D}内检测引起以规则间隔的地址访问存储器的一个或多个可执行指令{E},
其中,所述标识包括标识{E}中的可执行指令。
21.根据权利要求20所述的计算机实现的方法,其中,所述提供包括:
把将获得的效益提供为{E}中的可执行指令的计数作为{C}中的可执行指令的计数的百分比;
把将获得的效益提供为多个可执行指令的计数的减少;或者
把将获得的效益提供为{C}中的可执行指令的计数的减少。
22.一种装置,包括:
用于分析多个可执行指令的执行的构件;
用于标识适合于转换为一个或多个单指令多数据(“SIMD”)指令的多个可执行指令的子集的构件;以及
用于提供通过多个可执行指令的至少子集的向量化将获得的效益的指示的构件。
23.根据权利要求22所述的装置,其中,用于分析的构件包括:
用于检测多个可执行指令中的一个或多个执行密集点的构件;
用于检测多个可执行指令中的包括循环的可执行指令集{C}的构件;
用于从{C}内检测没有向量相关性的可执行指令集{D}的构件;以及
用于从{D}内检测引起以规则间隔的地址访问存储器的一个或多个可执行指令{E}的构件,
其中,用于标识的构件包括用于标识{E}中的可执行指令的构件。
24.根据权利要求23所述的装置,其中,用于提供的构件包括:
用于把将获得的效益提供为{E}中的可执行指令的计数作为{C}中的可执行指令的计数的百分比的构件;
用于把将获得的效益提供为多个可执行指令的计数的减少的构件;或者
用于把将获得的效益提供为{C}中的可执行指令的计数的减少的构件。
25.根据权利要求22-24中任一项所述的装置,其中,多个可执行指令包括指令跟踪。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2013/029165 WO2014137327A1 (en) | 2013-03-05 | 2013-03-05 | Analyzing potential benefits of vectorization |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104956322A true CN104956322A (zh) | 2015-09-30 |
CN104956322B CN104956322B (zh) | 2019-03-01 |
Family
ID=51489373
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380072306.1A Active CN104956322B (zh) | 2013-03-05 | 2013-03-05 | 分析向量化的潜在效益 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9170789B2 (zh) |
EP (1) | EP2965194A4 (zh) |
CN (1) | CN104956322B (zh) |
WO (1) | WO2014137327A1 (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9672019B2 (en) | 2008-11-24 | 2017-06-06 | Intel Corporation | Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads |
WO2013048468A1 (en) * | 2011-09-30 | 2013-04-04 | Intel Corporation | Instruction and logic to perform dynamic binary translation |
US9152490B2 (en) * | 2013-04-02 | 2015-10-06 | Western Digital Technologies, Inc. | Detection of user behavior using time series modeling |
US9529622B1 (en) * | 2014-12-09 | 2016-12-27 | Parallel Machines Ltd. | Systems and methods for automatic generation of task-splitting code |
JP6331865B2 (ja) * | 2014-08-13 | 2018-05-30 | 富士通株式会社 | プログラム最適化方法,プログラム最適化プログラム及びプログラム最適化装置 |
US10019341B2 (en) * | 2014-09-25 | 2018-07-10 | Intel Corporation | Using hardware performance counters to detect stale memory objects |
DE102015013627A1 (de) * | 2015-10-20 | 2017-04-20 | Fresenius Medical Care Deutschland Gmbh | Blutbehandlungsgerät und Verfahren zur Erstellung einer Verschreibung |
US10078505B2 (en) * | 2016-07-20 | 2018-09-18 | International Business Machines Corporation | Partial connection of iterations during loop unrolling |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050289529A1 (en) * | 2004-06-24 | 2005-12-29 | Yoav Almog | Method and apparatus to vectorize multiple input instructions |
US20060195828A1 (en) * | 2005-02-28 | 2006-08-31 | Kabushiki Kaisha Toshiba | Instruction generator, method for generating instructions and computer program product that executes an application for an instruction generator |
CN101488083A (zh) * | 2007-12-26 | 2009-07-22 | 英特尔公司 | 用于转换向量数据的方法、装置和指令 |
US20110161643A1 (en) * | 2009-12-30 | 2011-06-30 | International Business Machines Corporation | Runtime Extraction of Data Parallelism |
CN102171679A (zh) * | 2008-10-03 | 2011-08-31 | 微软公司 | 用于声明性编程语言的基于树的有向图编程结构 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07271764A (ja) * | 1994-03-24 | 1995-10-20 | Internatl Business Mach Corp <Ibm> | 計算機プロセッサ及びシステム |
JP4077252B2 (ja) * | 2002-06-28 | 2008-04-16 | 富士通株式会社 | コンパイラプログラムおよびコンパイル処理方法 |
US7340732B2 (en) | 2003-11-26 | 2008-03-04 | Sun Microsystems, Inc. | Updating profile frequency for procedure inlining |
US20080250399A1 (en) * | 2005-12-30 | 2008-10-09 | Bo Huang | Evaluation and Selection of Programming Code |
US8505002B2 (en) * | 2006-09-29 | 2013-08-06 | Arm Limited | Translation of SIMD instructions in a data processing system |
US7962906B2 (en) * | 2007-03-15 | 2011-06-14 | International Business Machines Corporation | Compiler method for employing multiple autonomous synergistic processors to simultaneously operate on longer vectors of data |
US8555037B2 (en) * | 2008-08-15 | 2013-10-08 | Apple Inc. | Processing vectors using wrapping minima and maxima instructions in the macroscalar architecture |
US8327344B2 (en) * | 2008-10-14 | 2012-12-04 | International Business Machines Corporation | Array reference safety analysis in the presence of loops with conditional control flow |
US8493979B2 (en) | 2008-12-30 | 2013-07-23 | Intel Corporation | Single instruction processing of network packets |
US8484276B2 (en) * | 2009-03-18 | 2013-07-09 | International Business Machines Corporation | Processing array data on SIMD multi-core processor architectures |
US8904366B2 (en) * | 2009-05-15 | 2014-12-02 | International Business Machines Corporation | Use of vectorization instruction sets |
US8996845B2 (en) | 2009-12-22 | 2015-03-31 | Intel Corporation | Vector compare-and-exchange operation |
US8640112B2 (en) * | 2011-03-30 | 2014-01-28 | National Instruments Corporation | Vectorizing combinations of program operations |
US20140188961A1 (en) * | 2012-12-27 | 2014-07-03 | Mikhail Plotnikov | Vectorization Of Collapsed Multi-Nested Loops |
US9501276B2 (en) * | 2012-12-31 | 2016-11-22 | Intel Corporation | Instructions and logic to vectorize conditional loops |
-
2013
- 2013-03-05 CN CN201380072306.1A patent/CN104956322B/zh active Active
- 2013-03-05 WO PCT/US2013/029165 patent/WO2014137327A1/en active Application Filing
- 2013-03-05 EP EP13877084.7A patent/EP2965194A4/en not_active Withdrawn
- 2013-03-05 US US13/997,140 patent/US9170789B2/en not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050289529A1 (en) * | 2004-06-24 | 2005-12-29 | Yoav Almog | Method and apparatus to vectorize multiple input instructions |
US20060195828A1 (en) * | 2005-02-28 | 2006-08-31 | Kabushiki Kaisha Toshiba | Instruction generator, method for generating instructions and computer program product that executes an application for an instruction generator |
CN101488083A (zh) * | 2007-12-26 | 2009-07-22 | 英特尔公司 | 用于转换向量数据的方法、装置和指令 |
CN102171679A (zh) * | 2008-10-03 | 2011-08-31 | 微软公司 | 用于声明性编程语言的基于树的有向图编程结构 |
US20110161643A1 (en) * | 2009-12-30 | 2011-06-30 | International Business Machines Corporation | Runtime Extraction of Data Parallelism |
Also Published As
Publication number | Publication date |
---|---|
US9170789B2 (en) | 2015-10-27 |
EP2965194A1 (en) | 2016-01-13 |
CN104956322B (zh) | 2019-03-01 |
US20140258677A1 (en) | 2014-09-11 |
WO2014137327A1 (en) | 2014-09-12 |
EP2965194A4 (en) | 2016-11-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104956322A (zh) | 分析向量化的潜在效益 | |
CN107608677B (zh) | 一种编译处理方法、装置及电子设备 | |
US9201659B2 (en) | Efficient directed acyclic graph pattern matching to enable code partitioning and execution on heterogeneous processor cores | |
US20140181591A1 (en) | Test strategy for profile-guided code execution optimizers | |
US7430733B1 (en) | Method for validation of binary code transformations | |
EP2912548B1 (en) | Partial vectorization compilation system | |
Buchwald | Optgen: A generator for local optimizations | |
US9329974B2 (en) | Technologies for determining binary loop trip count using dynamic binary instrumentation | |
Madougou et al. | The landscape of GPGPU performance modeling tools | |
US20140040858A1 (en) | Method and apparatus for generating resource efficient computer program code | |
US20090265531A1 (en) | Code Evaluation for In-Order Processing | |
CN111124479B (zh) | 配置文件的解析方法、系统及电子设备 | |
US11120521B2 (en) | Techniques for graphics processing unit profiling using binary instrumentation | |
US20180173610A1 (en) | Method for performing cared-zone code coverage evaluation with no source code modification | |
CN105468505A (zh) | 覆盖率测试方法及覆盖率测试装置 | |
US10922779B2 (en) | Techniques for multi-mode graphics processing unit profiling | |
US20110016455A1 (en) | Power Profiling for Embedded System Design | |
US9274925B2 (en) | Programmable symbolic execution based dynamic checker | |
Reichelt et al. | PeASS: A tool for identifying performance changes at code level | |
US8516467B2 (en) | Method and apparatus for enhancing comprehension of code time complexity and flow | |
CN108874656A (zh) | 代码测试方法、装置、可读存储介质及计算机设备 | |
US11762762B1 (en) | Static and automatic inference of inter-basic block burst transfers for high-level synthesis | |
US8756580B2 (en) | Instance-based field affinity optimization | |
US9606779B2 (en) | Data processing system and data simulation method in the system | |
Fangquan et al. | Binary-oriented hybrid fuzz testing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |