CN1269036C - 用于生成预测助手线程的方法和计算机 - Google Patents

用于生成预测助手线程的方法和计算机 Download PDF

Info

Publication number
CN1269036C
CN1269036C CN 03156069 CN03156069A CN1269036C CN 1269036 C CN1269036 C CN 1269036C CN 03156069 CN03156069 CN 03156069 CN 03156069 A CN03156069 A CN 03156069A CN 1269036 C CN1269036 C CN 1269036C
Authority
CN
China
Prior art keywords
seed
target
instruction
path
probability
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
Application number
CN 03156069
Other languages
English (en)
Other versions
CN1540507A (zh
Inventor
托·M·阿默迪特
王宏
沈中立
佩尔·哈玛隆德
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Priority claimed from US10/422,528 external-priority patent/US7523465B2/en
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN1540507A publication Critical patent/CN1540507A/zh
Application granted granted Critical
Publication of CN1269036C publication Critical patent/CN1269036C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

揭示了用于为高速缓存预取生成预测助手线程的方法和设备。所揭示的技术根据特征数据和一系列计算来选择种子-目标对。然后生成助手线程,以在选定的种子点启动,以便为一个单一线程软件应用程序预取软件指令(或数据)。接着将生成的助手线程附加到单一线程软件应用程序中以创建一个多线程软件应用程序。

Description

用于生成预测助手线程的方法和计算机
技术领域
本发明涉及用于多线程处理器的助手线程,尤其涉及用于生成预测助手线程(speculative helper thread)并确定与相应的非预测主线程相关的预测助手线程的进展的方法和设备。
背景技术
消费者不断地需要更快的计算机。同步多线程(SMT)是一种对处理器的芯片区域影响有限但能提升其吞吐性能的有效方法。SMT通过并行执行多个处理线程来增加处理器的吞吐量。不过,许多软件应用程序都没有从SMT中受益。
此外,处理器和存储器速度之间的差距仍在扩大。结果,计算机性能越来越由高速缓存层次的效率决定。预取是一种公知的用于提高高速缓存层次的效率的有效方法。不过,处理器的工作负荷通常会导致严重的高速缓存未命中。
发明内容
本发明的目的是提供一种克服了上述现有技术缺点的用于生成预测助手线程的方法和计算机。
根据本发明,提供一种用于生成预测助手线程的方法,该方法包括:在主线程软件指令中识别一代码区域;选择一种子-目标对,该种子-目标对包括一个在代码区域之前的目标点和一个在目标点之前的种子点,种子-目标对的选择基于一种子-目标选择计算进行;生成助手线程软件指令,以便在种子点启动一个助手线程来预取主线程软件指令的一个子集;以及将助手线程软件指令附加到主线程软件指令中。
根据本发明,还提供一种计算机,包括:处理器;可操作地与处理器耦联的存储器,该存储器保存了一软件工具和一应用程序,该软件工具可以使计算机:识别应用程序中的代码区域;在应用程序中选择一种子-目标对,该种子-目标对包括一个在代码区域之前的目标点和一个在目标点之前的种子点,种子-目标对的选择基于一种子-目标选择计算进行;生成助手线程指令,以便在种子点启动一个助手线程来预取应用程序的一个子集;以及将助手线程指令附加到应用程序中。
本发明中由助手线程执行的高速缓存预取通过执行明智及时(或者“预知”)的指令和(或)数据预取而提高了处理器性能。
附图说明
图1是包含三个控制流区域的程序片断的示意图。
图2是显示用于生成预测助手线程的一个示例流程的流程图。
图3是显示用于生成特征信息(profile information)的一个示例流程的流程图。
图4是调用示例程序的示例控制流图。
图5是预取松弛的一个典型图。
图6是图4中所显示的示例程序的示例控制流图。
图7是显示用于所揭示的系统的环境的计算机系统的框图。
图8是图7中所显示的多处理器的更加详细的框图。
具体实施方式
总体上,揭示了一种采用预测线程级并行来使高速缓存预取更为高效的体系架构机制。虽然这里所显示的例子涉及由于指令高速缓存(I型高速缓存)未命中和预取所致的性能损失,本领域内具有普通技术水准的人很容易明白,这里所揭示的技术可用于任何类型的助手线程。例如,这里所揭示的技术可用于数据高速缓存预取。
特别地,描述了一个用于优化助手线程的算法,该算法采用多线程化的硬件,通过执行明智及时(或者“预知”)的指令和(或)数据预取来提高应用程序性能。特征信息用来识别由于I型高速缓存未命中导致性能损失的代码区域。对于软件应用程序中识别出的每个目标点,识别出一个对应的种子点(spawn point),该种子点可以作为启动用于指令预取的助手线程执行的触发点。一旦识别出一个种子-目标对,一个助手线程即被生成并附加到原始的应用程序二进制文件(即,主线程)中。当在运行时在主线程中遇到一个种子点时,助手线程即被生成以在空闲线程环境中开始执行。助手线程的执行将沿着目标点之后的短路径为预期的I型高速缓存的未命中有效地预取指令。
图1是表示包括三个不同的控制流区域的一个示例性的主线程118程序片断的示意图。在所显示的例子中,紧随目标点104之后的后缀区域102被预测由于指令高速缓存未命中要遭受严重的性能损失。为说明简单起见,种子点108之前的区域106被称作前缀区域106,而种子点108和目标点104之间的区域110被称作中缀区域110。
高效的指令预取得益于后缀区域102中的分支的精确解析。因此,一个助手线程112可以包括两个执行阶段。具体来讲,助手线程112的执行可以包括一个预计算阶段114和一个预取阶段116。在预计算阶段114期间,助手线程112在开始执行后缀区域102中的预取阶段116之前,先在中缀区域110中确定一个或多个1ive-in值。助手线程112在预计算阶段114期间执行的指令对应于主线程位于落在种子点108和目标点104之间的中缀区域110中的指令的一个子集(称作“后向片(backwardslice)”)。在预取阶段116期间,助手线程112执行后缀区域102中的代码。预取阶段116中代码的执行既为后缀区域102中的助手线程112解析控制流,又为主线程118预取指令。
优选地,对于一个给定的目标点104,种子点108的选定既要在目标点104前面足够远的地方,以便为预取指令提供足够的松弛,又不要太远,以至于驱除驻留在高速缓存中的仍对主线程118有用的指令,从而潜在地导致整体性能的降低。类似地,预取那些似乎主线程118要马上遇到,而实际上很久以后才会遇到的指令,也会降低性能。因此,最好是在种子点108和目标点104之间有足够长的距离,但是在种子点108和目标点104之间又有很强的控制流相关性。如果控制流图中的两个点中一个的执行预示着另一个执行的概率也很高,这两个点即是强控制流相关的。
控制流相关性包含两个因子:从种子点108到达目标点104的前向概率,和种子点108领先于目标点104的逆转(或“后验”)概率。前面的属性确保助手线程112的预测执行不会由于主线程118实际的控制流没有经过目标点104而是徒然的。不过,是后者量化了助手线程112的潜在价值。
用于定义与之相关联的助手线程112的合适种子-目标点108、104的识别被揭示为一个优化问题。优化技术利用从特征数据导出的统计信息将运行时程序行为建模为一个离散马尔可夫(Markov)过程。这个公式使得可以通过有效的计算方法对和助手线程112的执行相关的重要的统计量做精确的估计。由此导致了将在下面详细说明的种子-目标对108、104选择算法。该算法可以由诸如Itanium处理器系列(IPE)体系等任何处理器体系实现。
该马尔可夫模型公式用于量化当主线程118到达一个给定的种子点108时,生成一个在给定的目标点104开始的在前运行的指令预取线程的价值。尤其是,路径表示被用于有效计算某个信息,该信息描述与在程序二进制文件中的任何两个点之间的执行有关的预期程序行为。计算的信息包括(i)假定到了程序中的第一点的情况下,到达程序中的第二点的概率,(ii)将在程序中的两点之间执行的指令数的统计期望值(例如,平均数),(iii)当在两点之间遍历时,所需的指令存储空间,(iv)给定程序中的当前执行点的情况下,提前执行了一个特定的基础块的概率,和(v)对较早的块发生的执行时间接近程度的度量。
对于一个控制流图,其中节点表示基础块,边沿表示基础块之间的过渡,过程内的程序执行用一个离散的马尔可夫链来建模。基础块表示状态。状态过渡用控制流图中的分支结果的概率来表示。这些概率基于边沿特征信息,该信息表示在假定分支结果独立的前提下,一个块流向另一个块或者从另一个块流出的可能性。正如本领域内具有普通技术水准的人所知晓的那样,马尔可夫链可用状态和过渡概率来构造,过渡概率表示采用通过原始控制流图的一个特殊的路径段(具有给定长度)的联合概率(例如,从块A开始,分支到块B,然后分支到块C的概率)。
对于过程间的控制流,对限制过渡进/出过程的过程调用的效果进行了建模,以便一个过程必须返回到其调用者。尤其是,当表示当前状态的基础块以一个过程调用结束时,在首先等待通常过渡时间(与当前基础块相关联)过去后,进行了一个从马尔可夫模型向过程间的模型的过渡。当进入与一个过程的退出块相关联的状态时,控制返回到调用块。
为了建模指令存储器的效果,采用了一个两级指令存储器层次。存储器包括一个具有最近最少使用(LRU)替代策略的有限容量完全相关指令高速缓存,以便所有的未命中要么是冷启动未命中,要么是容量未命中。该模型的简化没有以任何方式限制种子-目标选择算法只适合用于具有这样的存储器配置的计算机系统,相反,这种简化有助于包括具有任意级高速缓存(统一的或独立的)与任意程度相关联性的高速缓存层次的系统的分析。在下面的方程式中,符号“$”用于表示可以保存在指令高速缓存中的指令数。注意,程序的控制流路径完全确定了该高速缓存的内容。通过考虑由控制流的统计模型给定的所有这些路径的概率,(原则上)就可能获得在程序中的一个特定点当模型进入给定状态(基础块)时,任何特定指令处于高速缓存中的概率。在这里的公式中,计算的是和此概率相关的量(期望路径覆盖区)。为了估计指令高速缓存中的内容,采用了一个一条指令的高速缓存线容量。为了利用空间局部性,真实的指令高速缓存将采用几个指令的线容量。
Tarjan的快速路径表示算法解决了单一源路径问题。我们通过找到路径表示映射提高了Tarjan的快速路径表示算法的效率。这些映射将控制流图中两个点之间的所有路径的广义的求和运算转化成了表示这些路径的一个公式的运算。这个公式相当重要,它用一个十分紧凑闭包形式的表达式描述了一个可能无穷的集合。为了说明作为所用转换的基础的映射,首先介绍下列标准术语(类似于Tarjan在他的有关路径表示算法的书中所使用的)是有帮助的。“方向图”G(V,E)包括V中的顶点v,和E中的边沿e=(u,v),这里u是边沿e的头,v是边沿e的尾,所以u和v都在V中。边沿被看作是从头至尾的连线。在许多情形中,都对边沿加标注以获得一个“标注方向图”。给定一个有限字母表∑,具有元素a∈∑,且不与符号{Λ,,(,)}相交,“Λ”、“”和a∈∑是最小的正规表达式,如果R1和R2是正规表达式,那么“(R1∪R2)”、“(R1·R2)”和“(R1)*”则是复合正规表达式。符号Λ表示空串,表示空集,∪表示并,·表示级联,*表示级联下的传递闭包。
方向图G(V,E)上的“路径表示”P(x,y)是概括了G中的顶点x和y之间的所有路径的E中边沿集上的一个规范表示。路径表示有一个“起点”x和一个“终点”y。所有的路径表示都有一个唯一定义的起点和终点。当按照Tarjan的快速路径算法所做的那样构造时,路径表示将按照唯一的方法枚举x和y之间每条不同的路径。这样的路径表示被称作是“明确的”。当并运算符的行为不是等幂的(即,x∪x=x不必为真)时,为了获得正确的结果,需要明确的路径表示。由P(x,y)枚举的所有的路径的集合用σ(P(x,y))表示。在本公布资料中将σ(P(x,y))称作x和y之间的路径集。“开放路径表示”P0(x,y)表示从x到y的所有路径的集合,这样,y仅出现在每条路径的终点(当且仅当x=y时,出现在路径的起点)。
图2显示了一个用于为指令高速缓存预取生成一个或多个预测助手线程112的示例流程200。优选地,流程200用一个或者多个软件程序来具体实现,这些软件程序保存在一个或多个存储器上,并由一个或多个处理器按照公知的方式执行。不过,流程200的某些或者全部块可以人工完成。尽管流程200是以图2中所显示的流程图为例进行说明的,本领域内具有普通技术水准的人很容易明白,也可以采用许多其他的方法来完成流程200。例如,可以更改许多块的次序,可以改变一个或者多个块的操作,可以组合和(或)取消一些块。
通常,示例流程200根据下面详细描述的特征数据和一系列运算来选择种子-目标对108、104。接着,为给一个软件应用程序预取软件指令,流程200生成在选定的种子点108开始启动的助手线程代码。生成的助手线程代码接下来被附加到软件应用程序上以创建多线程的软件应用程序。
所显示的示例流程200通过加载一个软件应用程序和相关联的特征信息来开始启动(块202)。典型情况下,软件应用程序和相关联的特征信息从硬盘驱动器116加载到主存储器108中。特征信息可以由一个高速缓存特征提取(cache profiling)程序生成,然后被读取来识别由于I型高速缓存未命中导致性能降低的代码区域(块204)。另选地,特征信息可以由基于硬件的特征提取器和(或)代码检查技术生成。在一个例子中,只有特定的块被作为目标(例如,占所有指令高速缓存未命中的前90%的块)。
图3中显示了用于生成特征信息的示例流程300。优选地,流程300用一个或者多个软件程序来具体实现,这些软件程序保存在一个或多个存储器上,并由一个或多个处理器按照公知的方式执行。特征信息302通常由一个或多个机器和执行检查(execution pass)生成。在图3中,流程300包括两个编译器执行的检查304、306,还包括一个通常由用户(例如软件编程人员)启动的测试运行308。在第一个检查304期间,编译器(例如图6中的709)作为输入接收需要编译的源代码310。编译器接着生成对应于源代码310的机器二进制代码312。除去用于源代码310的指令的二进制代码外,机器二进制代码312还包括额外的二进制代码,在机器代码312运行期间,该额外代码可使统计信息被收集和保存在特征信息302和调用图314中。当用户启动机器二进制代码312的测试运行308时,就会生成特征302和调用图314。在正常的编译检查306期间,采用特征302作为编译器的输入,同时生成了二进制代码文件。例如,在标准的编译器检查306期间,特征信息302可为编译器使用,以有助于诸如预测分支预报(speculative branch prediction)之类的性能增强。
检查304、306和测试运行308中的每一个对于方法300都是可选的。本领域内的熟练人员都将明白,任何生成由特征302表示的信息的方法都可采用,图3中所显示的动作304、306和308仅为示例目的而提供。本领域内的熟练人员还将明白,这里所述的方法300可在一个另选的实施例中应用于一个二进制文件。即,可以为一个二进制文件而非一个高级的源代码文件生成特征302,也可以采用这样的基于二进制的特征作为输入来进行特征分析。
返回到图2中,一旦读取了特征信息,流程200就为识别出的代码区域确定了多个潜在的种子-目标对108、104(块206)。在一个例子中,为识别出的代码区域确定多个潜在的种子-目标对108、104包括与每个潜在的种子-目标对108、104相关联的“到达概率“的确定。马尔可夫模型中两个状态x和y之间的“到达概率”RP(x,y)可以在形式上定义为,给定当前状态为x,在将来的某个时刻遇到状态y的概率。如果从x到y的到达概率超过一个给定的阈值(例如95%),点y就被称作是点x的“控制准独立”点。
(过程内的)到达概率可以通过用过渡概率标注一给定过程的马尔可夫模型中的所有过渡来确定。当x≠y时,在计算路径表示之前首先将离开y的边沿的概率设为零,来对RP(x,y)进行计算。
给定路径表示R1和R2,二者概率分别为p和q,下面要用的运算符解释如下,其中方括号表示所包括的路径表示的值。
级联        [R1·R2]=pq
并          [R1∪R2]=p+q
闭包 [ R 1 * ] = 1 1 - p
当计算到达概率时,空集(即,“没有路径存在”)被解释为零,而空串Λ(即,表示从一个节点到其自身的不包括控制流边沿而只包括基础块自身的无效路径(trivial path)的集合)被解释为1。这里所述的公式对于x和y之间的任何特殊路径的概率在所有路径上进行求和计算。
注意,忽略有限精度运算的限制,如果用于定义边沿概率的特征信息表示一个具有明确的退出块的真实程序执行的分支特征,不会发生被0除的情况。(理论上,被零除表示存在一个无限循环。)本领域内的熟练人员将明白,另一种方案是扩充用于计算中间结果以包括无穷大的数字系统,以及定义0和无穷大相乘等于0。
图4显示了一个示例的控制流片断。从块a(402)到块X(404)的到达概率的确定如下所述。
P(a,X)=A·((B·C∪D·E)·F)*·B
[ P ( a , X ) ] = 0.98 · ( 1 1.0 - ( 0.1 ( 0.0 ‾ ) + 0.90 ( 1.0 ) ) · ( 0.999 ) ) · 0.10 ≅ 0.97
当x=y时,路径表示P(x,x)是x和它自身之间只包括x作为终点的所有路径的闭包。为了保持定义的连贯性,对于x=y的情形,闭包运算符的作用必须取消。这样,从x到x的到达概率(即,从x出发并且返回x的概率)可采用下面的关系式来确定:
RP ( x , x ) = [ P ( x , x ) ] - 1 [ P ( x , x ) ]
注意,对于x≠y的情形,该到达概率的公式允许x在y之前出现多次。也可以这样定义到达概率:通过在计算P(x,y)之前,将进入x的边沿的概率设为0,以便只包括那些x在每条路径的开始出现的执行结果。下面将采用这种最后到开始(last-to-first)到达概率RPLF(x,y)来计算后验概率。
接下来,要考虑过程间到达概率。尤其是,假定y处于由包含x的过程调用的过程中,程序目前位于x处,假定包含该特殊实例x的过程调用返回之前必须到达y,考虑到达y的概率。这个到达概率可以通过把在自底向上遍历包含y的过程和被x调用的过程之间的调用图的过程中遇到的每个过程的入口到达y的概率相加来获得。
对于每个访问过的过程,表示用于该过程的马尔可夫链的图被添加了一个表示到达y的事件的附加状态Q,并且对于每个表示一个基础块的状态(该基础块对一个被调用的过程进行过程调用,而该被调用过程可以进而到达y),这样的状态将由两个状态取代。指向原始状态的流入边沿到达这两个状态中的第一个状态,流出边沿则从新状态中的第二个状态发出。最后,这两个状态由一个概率为1减去从被调用者的入口到达y的概率的边沿连接起来。第一状态还被用一个边沿连接到Q,该边沿具有从被调用者的入口到达y的到达概率。接着,通过计算从入口状态到新状态的到达概率来确定从过程的入口到达y的概率。对于包含x的过程,将使用同样的变换,所不同的是,不是计算从入口到Q的到达概率,而是计算从x到Q的到达概率。如果从x到y的遍历包含递归,可以通过求解一组联立方程来对上面概括的流程加以修改,其中通过用一个符号变量来表示到达y的概率来形成所述方程。
一旦确定了多个潜在的种子-目标对108、104,就要进行一个或多个种子-目标选择计算208,以便选择一个或多个种子-目标对。可在每个种子-目标对108、104上进行的一个计算是确定与每个潜在的种子-目标对108、104相关联的后验概率(块210)。给定当前状态是Y的情况下,在两个状态X和Y之间的后验概率PPr(X|Y)可在形式上定义为:自从状态Y(如果存在)上次发生以来,先前访问过状态X的概率。选择一个对于给定目标具有低的后验概率的种子点108是低效的,因为该种子点将只为目标的少数发生触发预取线程。因此,选择既有高的后验概率又有高的到达概率的种子点108就很有意义。
过程内的后验概率可以通过考虑关于时间反转版的马尔可夫链模型的最后到开始到达概率问题来计算。通过逆转控制流边沿,并且用前任领先后任的频率,而非用后任跟随前任的频率来加以标注,可以获得时间反转版的模型。对于x≠y的情形,从x到x的前任的边沿,以及从y到y的后任的边沿(指原始边沿方向)被设置为零。
例如,考虑图4中的控制流片断。给定当前块是X(404)的情况下,块a(402)被执行的后验概率通过计算下面的方程得到,其中将Cr设置为零,上标r表示所关注的是与图的反转相关联的边沿标注。
P(a,X)=Br·(Fr·(Cr·Br∪Er·Dr))*·Ar
因此,
[ P ( a , x ) ] = 1.00 · ( 1 1.0 - ( 0.999 ) · ( 0.0 ‾ ( 1.0 ) + 1.0 ( 0.9 ) ) ) · 0.001 ≅ 0.01
所以,在块X的任何实例之前访问块a(402)的后验概率大约是0.01。直观上,这个结果可从以下观察得出,即,每次进入循环,块X(404)大约执行100次,所以,循环开始以后,任何时候我们看到块X(404)时,其是第一个实例的概率大约是0.01。
另一个可以对每个种子-目标对108、104进行的计算是,与每个潜在的种子-目标对108、104相关联的路径长度的确定(块212)。给定一系列分支结果,路径长度是指令数的和,或者是执行每个访问到的基础块所花的时间长度的和(例如,指令数乘以每个基础块每条指令的周期(CPI),或许可以通过诸如Intel VtuneTM性能分析器(PerformanceAnalyzer)之类的基于采样的特征提取工具采样确定)。假定程序执行是在两个点x和y之间进行时,通过将一个元组与每个边沿相关联来估计期望路径长度(或平均路径长度)。元组中的第一个元素表示从前任分支到后任的概率,第二个元素表示前任的长度。类似地,对于路径表示R1和R2,采用相关元组<p,X>和<q,Y>,这里,元组的第一个元素表示所有路径的概率的和,而元组的第二个元素表示期望要执行指令的数量。用于组合这些元组来计算路径表示的规则是:
级联        [R1·R2]=<pq,X+Y>
[ R 1 &cup; R 2 ] = < p + q , pX + qY p + q >
闭包 [ R 1 * ] = < 1 1 - p , pX 1 - p >
例如,考虑图4中的控制流片断。将除去块c(406)之外的每个块的长度均设为10。对于块c(406),对foo()的过程调用的期望路径长度被包括在内。假设该路径长度为40,那么块c(406)的总路径长度就是50。然后,在首先设置与C相关联的值为<0,10>后,通过采用上面给定的映射,计算下列路径表示,可以得出从块a(402)到块X(404)的期望路径长度。
P(a,X)=A·((B·C∪D·E)·F)*·B
更详细地,将有以下结果:
[B·C]                          =<0,20>
[D·E]                          =<0.9,60>
[B·C∪D·E]                    =<0.9,60>
[(B·C∪D·E)·F]               =<0.8991,70>
[ ( ( B &CenterDot; C &cup; D &CenterDot; E ) &CenterDot; F ) * ] &cong; < 0.911,623.8 >
[ ( ( B &CenterDot; C &cup; D &CenterDot; E ) &CenterDot; F ) * &CenterDot; B ] &cong; < 0.9911,6338 >
[ A &CenterDot; ( ( B &CenterDot; C &cup; D &CenterDot; E ) &CenterDot; F ) * &CenterDot; B ] &cong; < 0.97.643.8 >
注意,最终元组中的第一个元素是从块a(402)到块X(404)的到达概率。计算从入口块到过程退出的期望路径长度概括了一个过程调用的期望路径长度。该过程的所有调用点都增加了这个值。
另一种可以对每个种子-目标对108、104进行的计算是与每个潜在的种子-目标对108、104相关联的路径长度方差的确定(块214)。一个变量的统计方差是描述该变量偏离其平均值程度的一个量。既然程序在两个点之间可以沿许多条路径执行,为了更加精确地量化一个种子-目标对108、104的期望价值,能够量化该方差是很有价值的。例如,当在两个种子点108之间进行选择时,选择一个具有较少平均松弛并且有较小方差的种子点108是有好处的,因为这样做,有可能减少具有比平均松弛大的实例的相消性干扰。
经过详细的统计学推导,可以得出以下用于路径长度方差的映射:
Figure C0315606900161
在上面的表格中,v和w表示分别由R1和R2概括的路径的路径长度方差(对于只包含一个单一边沿的路径表示,其值降为零);X和Y是由R1和R2概括的路径的期望路径长度;p和q是根据到达概率映射而计算得到的概率。如同到达概率和期望路径长度的情形一样,流出目标的边沿在映射计算前被设为具有零概率。
为了应用这些映射,将一个三元组与每个边沿相关联。元组中的第一个元素表示从前任分支到后任的概率,第二个元素表示前任的长度,最后一个元素表示方差。类似地,路径表示R1和R2分别与元组<p,X,v>和<q,Y,w>相关联。和前面一样,在路径表示计算前,离开y的边沿被设置为零概率。
另一个可以对每个种子-目标对108、104进行的计算是确定与每个种子-目标对108、104相关联的“预取松弛”为正的估计概率(块216)。对于一个给定的种子-目标对108、104,并且假定助手线程112正确地遵循了主线程118到达目标时所要遵循的控制流,“预取松弛”是从助手线程112发出指令预取时和主线程118试图取相同的指令时之间的执行周期的差。
指令i的一个特定实例(作为由在s生成的目标为t的助手线程112的目标)的预取松弛,在该程序遵循一个特定的执行路径的情况下,可以用下面的表达式给出,式中d(x,y)是x和y之间的距离(根据所执行的指令的数量来度量);o(s,t)表示在s处的线程生成(thread spawing)和用于t处的live-in预计算的开销;CPIm(s,t)表示在s和t的特定实例间运行的主线程118每取一个指令的平均周期数;CPIm(t,i)表示在t和i的特定实例间运行的主线程118每取一个指令的平均周期数;CPIh(t,i)表示在t和i的特定实例间运行的助手线程112每取一个指令的平均周期数。
slack(i,s,t)=CPIm(s,t)·d(s,t)+(CPIm(t,i)-CPIh(t,i))·d(t,i)-o(s,t)
如果具有正的预取松弛,由助手线程进行的给定指令预取可以降低主线程118中的目标指令的取指等待时间。高效的预取通常可以增加主线程118中每个周期平均执行的指令数(IPC),但不会增加助手线程112中每个周期平均执行的指令数。结果,当CPIh(t,i)保持恒定时,CPIm(t,i)将降低,这导致了一个上限值,该上限值限定了指令预取助手线程112可以在主线程118赶上它之前以多大的提前量运行。尤其是,当满足下面条件时,主线程118将赶上助手线程112:
d ( t , i ) = CPI m ( s , t ) &CenterDot; ( d ( s , t ) - o ( s , t ) ) CPI h ( t , i ) - CPI m ( t , i )
图5给出了一个预取松弛的图示。在图5中,实线502表示主线程118的进度,点线504表示在由于线程创建和预计算114所致的开销o(s,t)之后,指令预取助手线程112的进度。该图显示了一个特定指令i的松弛。当主线程118赶上助手线程112时,助手线程112将停止提供有用的预取松弛。该点506是点线504和实线502相交之处。在上面的方程中计算得到的距离对应于块508的高度。
注意,对应于助手线程112的两个阶段114、116的中缀片110(如图1中所显示),强烈依赖于种子108到目标104的路径长度。这是因为,增加种子点108和目标点104之间的程序执行量将增加操作的量,这些操作会潜在地影响在目标点104之后,但在助手线程112结束点之前的分支结果。详细考虑片容量(即,采用某种形式的程序分片)的一个替换方式是,假设增加种子108到目标104的平均指令路径长度是有益的,直至路径长度超过某个由经验而定的到达主存储器的等待时间的常数倍。
另一个可在每个种子-目标对108、104上进行的计算是确定与每个种子-目标对108、104相关联的“期望路径覆盖区”(块218)。路径的指令存储器覆盖区是保存给定路径上的所有指令所需的最小容量的指令存储器,其中假定用完全相关联存储器结构中的指令地址来保存指令。根据该定义,“期望路径覆盖区”是在程序中的两个点之间遍历时所用的平均指令存储器覆盖区。采用期望路径覆盖区作为种子-目标对108、104选择流程的一部分,有助于避免选择永远不会执行有用指令预取的种子点108,因为这些种子点预取的指令可能在需要它们之前会被从指令高速缓存中驱除,或者已经可能驻留在高速缓存中。
假设x和y位于同一过程中,并且忽略过程调用的影响,下面的方程显示了x和y之间的期望存储器覆盖区。式中,Pr(p|x→y)是假定程序从x到y遍历并且直到遍历结束只进入y一次的条件下,路径p被遵循的概率;f(p)是路径p的指令存储器覆盖区;σ(P0(x,y))是所有从x到y并且只在终点包括y的路径的集合。
F ( x , y ) = &Sigma; p &Element; &sigma; ( P 0 ( x , y ) ) Pr ( p | x &RightArrow; y ) &CenterDot; f ( p )
上式等价于:
Figure C0315606900182
其中,size(v)是基础块v中的指令数,RPβ(x,y)定义如下:
RP &beta; ( x , y ) = RP ( x , y ) , x &NotEqual; y 0 , x = y
RPα(x,v|﹁y)表示,假定没有路径经过y的情况下,从x到v的到达概率,定义如下:
这个值可以通过前面所显示的正常到达概率的计算方法计算得到,不同的是,从y出发的边沿的概率被设为零(包括那些从v出发的边沿,如同用于正常到达概率的计算那样)。RPα(x,v|﹁y)的值可以用RP(x,v)来近似,这可以加速种子-目标选择过程,代价是精度上的一些损失。
一个入口s被正好调用n次的过程h()的期望覆盖区是:
图6中显示了一个示例过程foo()600。在此例子中,过程600包括第一块602、第二块604和第三块606。在从块a(402)向块X(404)遍历时,在块X只被访问一次,并且给定块c(406)至少被访问一次的情况下,可以按照如下步骤来计算块c(图4中的406)的期望执行频率(即,块c被执行的次数)。首先,注意此值是一个几何随机变量。这个几何随机变量根据给定程序执行在块c中开始的情况下,在到达块X(404),或者经过y410退出相关的区域之前,程序执行再次访问块c(406)的概率来定义。这个概率p可以通过采用上面所给的到达概率映射,在首先将与流出块X(404)的边沿相关联的概率设为零后,计算P0(c,c)来得到。
返回到图2,可用上面所述的一个或多个计算方法来选择种子-目标对108、104(块220)。在一个例子中,路径长度(由块212计算)和路径长度方差(由块214计算)可用于估计路径长度落入一特定范围的概率。接着可用此概率来确定预取松弛(由块216计算)超过一特定周期数的概率。也可用此概率来确定在主线程118中一个给定的助手线程112可能结束以便释放线程资源的点。这一计算对于确保及时预取是有用的,并且可用于确定在给定位置处的并发助手线程112的数量,从而降低由于没有足够的线程资源来生成另一个助手线程112而导致种子点108被忽略的概率。
对于一个给定的目标t,可以通过计算一个指示种子点效率的度量值来选择一组独立的种子点。尤其是,一给定种子点s的value(s,t)可以作为下面几个因子的乘积来计算:
1.第一个因子是种子s领先目标t的可能性,用后验概率PPr(s|t)来量化表示。
2.第二个因子是助手线程将要预取的高速缓存未命中的期望数。一种对此近似的方法是,通过采用主线程的每个指令的估计周期(CPI_m),助手线程的每个指令的估计周期(CPI_h),以及种子和目标之间的平均路径长度(M),结合路径长度方差(V)来进行。下面提供了一个示例算法“postfix_size”,该算法假定种子-目标路径长度服从正态分布。
  postfix size: input   M,V  mean and variance of the path length between spawn and targetconstants  P  minimum probability an instruction is prefetchedCPI_h      average cycles per instruction for the helper threadCPI_m      average cycles per instruction for the main threadresult the number of instructions prefetched with minimum probability Pbegin:D=(CPI_m*M-O)/(CPI_h-CPI_m);//initial guess at maximum distanceS=CPI_m*sqrt(V);//square root of V is the standard deviationdo(T=(CPI_m*M-((CPI_h-CPI_m)*D+O))/SQ=probability z<T,where z is the standard normal variableif Q<Pdecrease M} while((M>0)&&(Q<P));return M;end
3.第三个因子是预取的指令在被使用前没有被驱除的概率。一种近似计算该值的方法是采用从种子到目标的期望路径覆盖区来进行:
4.第四个因子是预取的指令尚未在高速缓存中的概率。一种近似计算该值的方法是使用从目标到种子的期望路径覆盖区来进行:
5.第五个因子是种子-目标对不会在逻辑上导致在程序中的任何地方并发运行超过最大期望数的助手线程的概率。如果更新正在运行的助手线程的估计数量可以导致多于所允许的数量的线程在程序中的任何地方并发运行,可将该值估计为0;如果不是这样,则估计为1。
为了弄清选定的助手线程的效果,对剩余的期望高速缓存未命中和在主程序中的每个块处运行的助手线程的数保持了运行评估。这些评估影响了助手线程种子-目标对的选择,确保不选择那些会使运行线程数超过最大允许数量的种子点,或者不选择那些使用于其目标区域的指令高速缓存未命中覆盖的预设阈值水平被超过的种子点。
I型高速缓存覆盖(I-cache coverage)可以通过计算一个用于给定种子-目标对的助手线程预取一个给定块的概率来确定。下面给出了这样做的一个示例算法“update_icache_coverage”.
在程序中的每个点并发运行的助手线程的数量,可以通过计算用于一新选定的种子-目标对的助手线程将仍从该种子点开始执行一段给定距离,然后采用示例算法“update_max_helpers”更新先前的估计的概率来确定。
    update_icache_coverage:input s, t spawn,and targetM,V map rrom x and y to mean and variance of path lengths from x to yPP map from x and y to posteriori probability of having seen y once at xRP map from x and y to reaching probability from x to yI_r   map from basic block,to expected number of remaining I-cachemisses.I_o   map from basic block,to number of I-cache misses from profilingB     set of blocks with minimum distance from target less than maximumdistance thread can prefetch(see above algorithm)C     estimated spawn overhead(time to copy registers+precompute live-ins)constantsCPI_h  average cycles per instruction for the helper threadCPI_m   average cycles per instruction for the main threadresult updates I with the new expected number of misses in each block affected_beginL= postfix size(M(s,t),V(s,t))foreach b in the set Bif V(t,b)>0,T=(L-M(t,b))/sqrt(V(t,b))Q=probability z<T,where z is the standard normal variableelseQ=1,if M(t,b)<L,or zero otherwiseendslack=CPI_h*M(s,t)+(CPI_m-CPI_h)*M(t,b)-Cif V(s,t)+V(t,b)>0,W  =sqrt(CPI_m*CPI_m*V(s,t)+(CPI_m-CPI_h)*(CPI_m-CPI_h)*V(t,b))X  =slack/WR  =probability z<X,where z is the standard normal variableelseR=1,if slack>0,or zero otherwiseendp=PP(b,s)*RP(s,t);I_r[b]=p*Q*R(I_o[b]-I_r[b]);end end
       update_max_helpers:inputs s, t spawn,and targetM,V map from x and y to mean and variance of path lengths from x to yPP map from x and y to posteriori probability of having seen y once at xH     map from basic block,to expected number of running helper threadsB     set of blocks with minimum distance from spawn less than maximumdistance thread can prefetch times CPI_h/CPI_m,plus C/CPI_m.C     estimated spawn overhead(time to copy registers+precompute live-ins)constants    CPI_h average cycles per instruction for the helper threadCPI_m       average cycles per instruction for the main threadresult updates H with the new expected number of misses in each block affectedbeginL=   postfix size(M(s,t),V(s,t))D=   L*(CPI_h/CPI_m)+C/CPI_mforeach b in the set Bif V(s,b)>0,T=(M(s,b)-L)/sqrt(V(s,b))Q=probability z<T,where z is the standard normal variableelseQ=1,if M(s,b)<L,or zero otherwiseendH[b]=H[b]+PP(b,s)*Q;end end
用于选择目标104的过程可以通过根据估计的残余指令高速缓存未命中来排列块然后选择“最差的块”来开始。对于最差的块,通过检查到达最差的块的期望路径长度小于一个阈值距离,且这种情况具有高后验概率的前任,一组潜在的目标就找到了。对于按照PPr(t|w)*M(t,w)(即,后验概率和平均路径长度)降序排列的每个目标t,选择那些RP(s,t)大于一个阈值(比如95%)的种子点Sa(t)。通过在集合Sa(t)中按照到t的期望路径长度的降序排列,每次选择一个种子点s,计算为该目标选择的种子点Sb(t)。如果种子点s被已经在Sb(t)中的另一个具有更高值的种子点所隐含,则s被摒弃。如果s不隐含Sb(t)中的另一个种子,则将其添加到Sb(t)中。如果s隐含Sb(t)中的另一个种子r,并且具有较高值,那么把r从集合Sb(t)中去除。如果集合Sb(t)为空,考虑下一个预期的目标,直至找到一个非空的种子点集,或者该算法放弃查找以给定块为目标的助手线程112的尝试。
例如,考虑图4中的控制流图片段。假设foo()具有图6中所给的控制流图,并且每个基础块的长度为10。在此例中,根据高速缓存特征提取,可知块X(404)遭受了许多高速缓存未命中。用主程序将要采取给定路径的概率来标注每个边沿。问题是:在这个图中,何处是生成助手线程112来预取块X(404)的最佳位置?
首先要注意的事情是,所显示的例子中的所有块与块X(404)是高度控制流相关的。例如,尽管从a(402)直接到X(404)的概率只是0.098,在离开区域前,沿着边沿x(406)或y(408)中的一条,控制流从块a(402)离开并至少到达X(404)一次的概率仍为0.971。即便如此,并不需要所有种子点108是同样必要有效的。
有两个因子可以区分概率:种子点108和目标点104之间的期望路径长度,和在遍历到块X(404)的路径之后,高速缓存未命中可能发生的概率。有意义的是由foo()600在导向块X(404)的路径上消耗的期望指令存储器。如果foo()600和块b(412)、c(406)和d(414)一起适配于指令高速缓存中,那么在块a(402)处启动块X(404)的一个预取就很好,因为从块a(402)到块X(404)的期望路径长度近似于九次循环迭代。另一方面,如果过程foo()600非常大,那么从任何块直接以块X(404)为目标来生成助手线程112就没有意义,因为在主线程118到达块X(404)之前,由于从分支(416)过渡到块(404)的概率较低,将要取出的指令几乎必将被对foo()600的调用从高速缓存中驱除出去。另一方面,如果我们选择在块b(412)处开始执行助手线程112,可以避免这个问题,因为在块a(402)的结尾处对分支的评估将确定是否预取块X(404)。
由于对foo()600的过程调用,从任意块到块X(404)所采取的路径的指令存储器覆盖区超过高速缓存的容量具有很高的概率。结果,选定的是一个用于块X(404)的前任的种子点108,而非用于块X(404)的种子点108。以此方式,助手线程112的执行决定是否预取块X(404)。在这个例子中,实际上有两个这样的位置:块b(412)和块d(414),二者都可能是具有到块X(404)的较短的最小路径长度的的前任,不过,b(412)更好,因为对于块X(404)的任何给定实例,它有更多机会领先于目标块X(404)。可以通过计算在到达块X(404)的情况下,已执行块了b(412)的后验概率,并且将此结果与在到达块X(404)的情况下,已执行了块d(414)的后验概率来对比,将上述事实量化。不过,应该选取能导致足够的松弛以便有效预取块X(404)中的指令的种子点108。如果块d(414)相对较大,就可能有足够的松弛来预取从块d(414)的起点处开始的块X(404)。
当然,本领域内具有普通技术水准的人很容易明白,也可以采用其他的选择算法。例如,在决定一个或者多个种子-目标对之前,可以挑选和(或)取消选择多个种子-目标点。此外,可以采用一个或多个以上类型的计算来在应用程序中的合适位置处插入预取指令。例如,如果编译器或者传递后(post-pass)工具确定一个具体的加载指令有可能错过,可以用一个松弛计算(块216)来帮助为预取指令确定一个好的位置。目前实际应用的简化推断的一个示例是简单地将从预期位置到加载指令的支配路径上的块的长度相加。不过,这里所揭示的系统可以考虑“弱支配”路径来更精确地确定松弛,潜在地可以做出更好的预取指令位置的选择。简言之,可以使用到达概率计算(块206)和(或)后验概率计算(块210)来改进这种选择。
返回到图2,一旦选定了一个种子-目标对108、104,流程200将生成一个助手线程112(块222),并将该助手线程112附加到软件应用程序中(块224)。该助手线程112在选定的种子点108处开始启动来预取软件应用程序的软件指令。
图7中显示了可以实现上面描述的流程的计算机系统700的框图。计算机系统700可以是个人计算机(PC)、个人数字助理(PDA)、互联网设备、蜂窝电话,或者任何其他计算设备。在一个例子中,计算机系统700包括由电源703供电的主处理单元702。主处理单元702可以包括多处理器单元704,它通过系统互连706与一个主存储器设备708和一个或多个接口电路710电气耦联了起来。在一个例子中,系统互连706是地址/数据总线。当然,本领域内具有普通技术水准的人很容易明白,也可以采用除去总线之外的互连来将多处理器单元704与主存储器设备708连接起来。例如,可以采用一个或多个专用的线和(或)一个十字头(crossbar)来将多处理器单元704与主存储器设备708连接起来。
多处理器单元704可以是任何公知类型的处理器,例如IntelPentium微处理器系列、Intel Itanium微处理器系列,和(或)IntelXScale处理器系列的处理器。此外,多处理器704可以包括任何公知类型的高速缓冲存储器,例如静态随机存取存储器(SRAM)。主存储器设备708可以包括动态随机存取存储器(DRAM)和(或)任何其他形式的随机存取存储器。例如,主存储器设备708可以包括双倍数据速率随机存取存储器(DDRAM)。主存储器设备708也可以包括非易失存储器。在一个例子中,主存储器设备708保存了一个由多处理器单元704按照公知方式执行的一个软件程序。主存储器设备708也可保存一个由多处理器704执行的编译器程序709。
接口电路710可以用任何公知类型的接口标准(例如,以太网接口和(或)通用串行总线(USB)接口)来实现。可以将一个或多个输入设备712连接到接口电路710,以便向主处理单元702输入数据和命令。例如,输入设备712可以是键盘、鼠标、触摸屏、跟踪板、跟踪球、isopoint,和(或)语音识别系统。
通过一个或多个接口电路710,也可将一个或多个显示器、打印机、扬声器和(或)其他输出设备714连接到主处理单元702上。显示器714可以是阴极射线管(CRT)、液晶显示器(LCD),或者任何其他类型的显示器。显示器714可以生成主处理单元702运行期间生成的数据的可视表示。可视表示可以包括用于人工输入的提示符、计算值、检测数据等。
计算机系统700还可以包括一个或多个存储设备716。例如,计算机系统700可以包括一个或多个硬盘驱动器、光盘(CD)驱动器、数字多媒体光盘驱动器(DVD),和(或)其他的计算机介质输入/输出(I/O)设备。
计算机系统700也可以通过和网络718相连与其他设备交换数据。网络连接可以是任何类型的网络连接,例如以太网连接、数字用户线(DSL)、电话线、同轴电缆等。网络718可以是任何类型的网络,例如互联网、电话网、电缆网,和(或)无线网络。
图8中显示了多处理器单元704的一个更加详细的框图。所显示的多处理器704包括通过互连806电气耦联起来的一个或多个处理内核802和一个或多个高速缓存804。处理器802和(或)高速缓存804经由一个存储器控制器808通过系统互连706与主存储器708通信。
每个处理器802都可以用诸如Intel XScale处理器等任何类型的处理器来实现。每个高速缓存804都可以采用任何类型的存储器,例如静态随机存取存储器(SRAM)来构建。互连706可以是任何类型的互连,例如总线、一个或多个专用线和(或)一个十字头。多处理器704的每个组件可以在相同的芯片或者分立的芯片上。例如,主存储器708可以位于一个分立芯片上。
尽管以上内容揭示的是除去其他组件,包括在硬件上执行的软件的示例系统,需要明白的是,这样的系统仅仅是说明性的,不应看作对本发明的限制。例如,可以预期,所揭示的硬件和软件组件中的任一个或者全部可以只用专用硬件来实现,也可以只用软件来实现,还可以只用固件来实现,或者用硬件、固件与(或)软件的某种结合来实现。
此外,虽然这里描述的是特定的设备,本专利所覆盖的范围却不限于这些。相反,本专利将覆盖无论是在文字上,还是根据等同原则,明确落入附加权利要求范围内的所有设备、方法和产品。

Claims (25)

1.一种用于生成预测助手线程的方法,该方法包括:
在主线程软件指令中识别一代码区域;
选择一种子-目标对,该种子-目标对包括一个在代码区域之前的目标点和一个在目标点之前的种子点,种子-目标对的选择基于一种子-目标选择计算进行;
生成助手线程软件指令,以便在种子点启动一个助手线程来预取主线程软件指令的一个子集;以及
将助手线程软件指令附加到主线程软件指令中。
2.根据权利要求1中所述的方法,其中所述的种子-目标选择计算包括计算与种子-目标对相关联的一个后验概率。
3.根据权利要求2中所述的方法,其中所述的计算与种子-目标对相关联的一个后验概率包括确定多个路径概率。
4.根据权利要求1中所述的方法,其中所述的种子-目标选择计算包括计算在种子点和目标点之间的期望路径长度。
5.根据权利要求1中所述的方法,其中所述的种子-目标选择计算包括计算在种子点和目标点之间的路径长度方差。
6.根据权利要求1中所述的方法,其中所述的种子-目标选择计算包括计算与种子-目标对相关联的预取松弛。
7.根据权利要求6中所述的方法,其中所述的计算预取松弛包括:确定由助手线程预取一条指令和由主线程尝试取出该指令在执行周期上的差异。
8.根据权利要求7中所述的方法,其中所述的种子-目标选择计算进一步包括计算在种子点和目标点之间的期望路径长度。
9.根据权利要求8中所述的方法,其中所述的种子-目标选择计算包括计算在种子点和目标点之间的路径长度方差。
10.根据权利要求1中所述的方法,其中所述的种子-目标选择计算包括计算一期望路径覆盖区。
11.根据权利要求10中所述的方法,其中所述的计算期望路径覆盖区包括:计算保存沿着由主线程中的两条指令定义的路径上的多个指令所需的平均存储器量。
12.根据权利要求1中所述的方法,进一步包括计算与种子-目标对相关联的到达概率。
13.根据权利要求12中所述的方法,其中所述的计算到达概率包括确定多个路径概率的乘积。
14.根据权利要求1中所述的方法,其中所述的识别主线程软件指令中的代码区域包括读取与主线程软件指令相关联的特征信息。
15.根据权利要求14中所述的方法,其中所述的读取与主线程软件指令相关联的特征信息包括:读取与主线程软件指令相关联的特征信息,以便识别主线程软件指令中由于指令高速缓存未命中导致性能损失的代码区域。
16.根据权利要求1中所述的方法,其中所述的种子-目标选择计算是根据路径表示映射进行的。
17.根据权利要求1中所述的方法,其中所述的选择种子-目标对包括取消选择一个或多个其他种子-目标对。
18.一种计算机,包括:
处理器;
可操作地与处理器耦联的存储器,该存储器保存了一软件工具和一应用程序,该软件工具可以使计算机:
识别应用程序中的代码区域;
在应用程序中选择一种子-目标对,该种子-目标对包括一个在代码区域之前的目标点和一个在目标点之前的种子点,种子-目标对的选择基于一种子-目标选择计算进行;
生成助手线程指令,以便在种子点启动一个助手线程来预取应用程序的一个子集;以及
将助手线程指令附加到应用程序中。
19.根据权利要求18中所述的计算机,其中所述的软件工具使计算机计算与种子-目标对相关联的后验概率。
20.根据权利要求18中所述的计算机,其中所述的软件工具使计算机计算在种子点和目标点之间的期望路径长度。
21.根据权利要求18中所述的计算机,其中所述的软件工具使计算机计算在种子点和目标点之间的路径长度方差。
22.根据权利要求18中所述的计算机,其中所述的软件工具使计算机计算与种子-目标对相关联的预取松弛。
23.根据权利要求18中所述的计算机,其中所述的软件工具使计算机计算一期望路径覆盖区。
24.根据权利要求18中所述的计算机,其中所述的处理器包括一个同步多线程(SMT)处理器。
25.根据权利要求18中所述的计算机,其中所述的种子-目标选择计算是根据路径表示映射进行的。
CN 03156069 2003-04-24 2003-08-29 用于生成预测助手线程的方法和计算机 Expired - Fee Related CN1269036C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/422,528 US7523465B2 (en) 2003-01-31 2003-04-24 Methods and apparatus for generating speculative helper thread spawn-target points
US10/422,528 2003-04-24

Publications (2)

Publication Number Publication Date
CN1540507A CN1540507A (zh) 2004-10-27
CN1269036C true CN1269036C (zh) 2006-08-09

Family

ID=34375153

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 03156069 Expired - Fee Related CN1269036C (zh) 2003-04-24 2003-08-29 用于生成预测助手线程的方法和计算机

Country Status (1)

Country Link
CN (1) CN1269036C (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1846837A4 (en) * 2004-12-31 2012-04-04 Intel Corp DATA SCREENING AND REDUCING CRITICAL SECTIONS IN THE LEARNING OF A BAYESIAN NETWORK STRUCTURE
US8521961B2 (en) * 2009-08-20 2013-08-27 International Business Machines Corporation Checkpointing in speculative versioning caches
US9483308B2 (en) * 2012-06-29 2016-11-01 Intel Corporation Performance of predicted actions
CN114721727B (zh) * 2022-06-10 2022-09-13 成都登临科技有限公司 一种处理器、电子设备及多线程共享的指令预取方法

Also Published As

Publication number Publication date
CN1540507A (zh) 2004-10-27

Similar Documents

Publication Publication Date Title
US7523465B2 (en) Methods and apparatus for generating speculative helper thread spawn-target points
Liao et al. Post-pass binary adaptation for software-based speculative precomputation
CN1308826C (zh) 用于smt处理器上的cpi调度的系统和方法
CN1294486C (zh) 多重处理环境中透明动态优化的方法和系统
Li et al. Configuration prefetching techniques for partial reconfigurable coprocessor with relocation and defragmentation
EP1668500B1 (en) Methods and apparatuses for thread management of multi-threading
CN1308825C (zh) 用于在smt处理器中进行cpi负载平衡的系统和方法
US7428731B2 (en) Continuous trip count profiling for loop optimizations in two-phase dynamic binary translators
CN1853165A (zh) 用于多线程的编译器创建辅助线程的方法和装置
Rabbah et al. Compiler orchestrated prefetching via speculation and predication
EP1695213B1 (en) Methods and apparatus to dynamically insert prefetch instructions based on compiler and garbage collector analysis
US20060041875A1 (en) Methods and apparatus for creating software basic block layouts
Bhowmik et al. A general compiler framework for speculative multithreaded processors
CN1269036C (zh) 用于生成预测助手线程的方法和计算机
Chung et al. Source code transformation based on software cost analysis
Barik et al. Optimal bitwise register allocation using integer linear programming
Cassé et al. A framework to quantify the overestimations of static wcet analysis
Sondag et al. Predictive thread-to-core assignment on a heterogeneous multi-core processor
Fang et al. An auto-tuning solution to data streams clustering in opencl
Chaudhary Implemented static branch prediction schemes for the parallelism processors
Fursin Iterative compilation and performance prediction for numerical applications
Li et al. Energy minimization on thread-level speculation in multicore systems
Aamodt et al. Prescient instruction prefetch
Wang et al. Smarq: Software-managed alias register queue for dynamic optimizations
Zhao et al. Static classification of value predictability using compiler hints

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
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20060809

Termination date: 20130829