CN105260165B - 基于smt的线程级推测系统中推测线程数目的动态控制方法 - Google Patents
基于smt的线程级推测系统中推测线程数目的动态控制方法 Download PDFInfo
- Publication number
- CN105260165B CN105260165B CN201510654581.5A CN201510654581A CN105260165B CN 105260165 B CN105260165 B CN 105260165B CN 201510654581 A CN201510654581 A CN 201510654581A CN 105260165 B CN105260165 B CN 105260165B
- Authority
- CN
- China
- Prior art keywords
- thread
- level
- performance
- supposition
- cycle
- 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
Abstract
本发明公开了一种基于SMT的线程级推测系统中推测线程数目的动态控制方法,主要通过动态检测每个循环运行时的并行执行特征来判定每次循环调用所需分配的推测线程数目,以达到充分挖掘循环潜在并行性能和提高处理器资源有效利用率的目的。在进行线程分配之前,需要对所选循环进行运行时的性能剖析,动态监测和估算所有激发线程在整个循环推测执行过程中所带来的正向和负向性能干扰作用。在此基础上,将所有激发线程按照自身所属的推测级为单位,对当前线程分配下的各个推测级进行相应的性能评估和能效评估。最后,再根据各个推测级的评估结果,预测所选循环在下次循环调用中所需分配的推测线程数目,以确保整个循环的高能效推测执行。
Description
技术领域
本发明属于计算机领域,涉及线程级并行与线程级推测技术,特别涉及基于SMT的线程级推测系统中推测线程数目的动态控制方法。
背景技术
线程级推测(Thread-Level Speculation,TLS),作为一种主流的线程级并行技术,能够从非规则串行程序中识别和提取出多个具有潜在控制与数据依赖的线程。这些线程在执行模型的作用下,按照正确的串行语义进行激发、执行、验证和提交,用于实现整个程序的自动化推测并行。在传统推测执行过程中,每个循环所需的推测线程的个数总是被简单地假定与当前处理器核的个数保持一致,同时认为其潜在的并行性能能够随着处理器核数目的增加而获得相应的线性提升。然而,每个循环的性能总是受到所分配处理器资源的限制。不合适的处理器资源分配,不仅会引发频繁的线程间数据依赖违规,而且还会造成低效率的处理器资源利用,导致每个循环难以在有效的代价开销下达到预期的执行效果。
特别地,当多个线程同时执行在SMT处理器上时,所有线程将会始终共享所在处理器上的所有硬件资源。当所分配的推测线程数目减少时,对于那些具有频繁数据依赖的循环,其潜在的线程间性能干扰能够得到有效地改善。相比之下,那些具有较高数据独立性的循环将会因所分配的推测线程数目过少而不能充分发挥潜在的并行性能,从而极大地影响整个循环的性能提升。反之,当所分配的推测线程数目增多时,随着线程指令派遣的增加,所有正在并行执行的线程将会迅速占用所有可用的处理器资源。一旦线程所需的处理器资源处于饱和状态时,将会很容易引发频繁的资源竞争,导致部分具有较高并行优先权的线程因缺乏可用的处理器资源而产生额外的执行延迟,最终影响整个程序的并行效率。
发明内容
本发明的目的在于提供一种基于SMT的线程级推测系统中推测线程数目的动态控制方法,该方法能够对每个循环所需的推测线程数目进行不断地预测和动态调整,以实现整个程序的动态自适应线程分配过程。
为达到上述目的,本发明采取以下的技术方案来实现:
一种基于SMT的线程级推测系统中推测线程数目的动态控制方法,包括以下步骤:
步骤一,在编译时采取贪心的循环选择的基础上,结合运行时的循环调度策略和当前线程分配的需求,选择候选循环在所分配的处理器资源上进行推测并行和循环性能剖析;
步骤二,在循环性能剖析中,根据线程内和线程间的性能影响作用,提取出循环推测执行过程中的正向线程性能干扰和负向线程性能干扰,并计算得到相应的正向性能估计值和负向性能估计值;
步骤三,识别出每个线程在推测并行过程中所属的推测级,再以各个推测级为单位,利用单个线程的正向性能估计值和负向性能估计值来估算和量化在当前线程分配下各个推测级的并行代价开销,用于对整个循环的执行结果进行性能评估和能效评估;
步骤四,根据整个循环的评估结果,采用线程分配算法预测整个循环在不同循环调用过程中所需的推测线程数目,并将此结果反馈到循环性能表中,用于指导不同循环调用间的线程分配和资源调度;
步骤五,利用循环性能表中当前循环的线程分配信息计算所激发线程的相对位置,进行推测线程和处理器核之间的动态映射以及资源调度,完成整个循环在所分配的处理器资源上的一次推测执行;
步骤六,若当前循环在一次推测执行结束时,经性能评估和能效评估之后,仍未找到所需的推测线程数目,那么在后续的循环调用过程中,将会重复步骤一至步骤五,直到找到合适的线程分配结果为止;若当前循环在一次推测执行结束时已经找到所需的推测线程数目,将会停止对当前循环进行再次线程分配,并在后续的循环调用过程中重复利用当前所找到的推测线程数目,直到整个程序执行结束,至此即完成了SMT的线程级推测系统中对于推测线程数目的动态控制。
所述步骤二中得到正向性能估计值和负向性能估计值的具体步骤如下:
2-1)利用线程执行周期分解技术,构建基于硬件的线程周期计数框架,根据处理器流水线指令调度阶段中分派槽的占用与空闲状态的分析与统计,得到对每个线程指令执行周期的动态监测;
2-2)在动态监测过程中,借助于四个周期计数组件来分解和计算每个线程的执行时间,即基本周期计数组件,流水线前端周期计数组件,流水线后端周期计数组件和推测等待周期计数组件,每个周期计数组件都由一个或多个计数器组成,将每个周期计数组件中所有计数器所统计的分派槽的个数除以整个处理器的分派带宽即得到每个周期计数组件的执行时间;
2-3)根据各个周期计数组件的执行时间以及线程内和线程间的相互性能影响,定义正向线程性能干扰和负向线程性能干扰,其中正向线程性能干扰指所有非推测指令的执行时间以及在线程推测过程中各种数据预提取和数据共享情形所缩短的有效执行时间的总和,负向线程性能干扰指所有推测指令的执行时间以及因线程的推测执行所引发的额外执行时间的总和;然后利用行为调整手段对已发生并行行为变化的周期计数组件进行相应的性能预测和行为校正,以得到正向线程性能干扰和负向线程性能干扰各自准确的执行时间,即正向性能估计值和负向性能估计值。
所述步骤三中推测级通过以下公式计算得到:
A)若当前线程所分配的处理器核ID大于等于非推测线程所分配的处理器核ID,则当前线程的推测级通过等式dist=curr_cxt-non_spec_cxt得到;
B)若当前线程所分配的处理器核ID小于非推测线程所分配的处理器核ID,则当前线程的推测级通过等式dist=curr_cxt+MAX_NUM_CONTEXT-non_spec_cxt得到;
其中,curr_cxt和non_spec_cxt分别表示当前线程和非推测线程所分配的处理器核ID,dist表示当前线程相对于非推测线程所计算获得的推测级结果,MAX_NUM_CONTEXT表示运行时处理器中所有可用的处理器核的个数。
所述步骤三中整个循环的性能评估和能效评估通过以下步骤得到:
3-1)根据线程的正向性能估计值和负向性能估计值,将每个推测级i的并行代价划分为四个部分,表示推测级i的基本正向并行代价,指在推测级i上所有非推测指令的执行时间以及各种数据预提取和数据共享情形所缩短的的执行时间总和,表示推测级i的基本负向并行代价,指在推测级i上所有推测指令的执行时间以及因线程的推测执行所引发的额外执行时间的总和,和分别表示推测级i的推测正向并行代价和推测负向并行代价,通过识别和计算各个周期计数组件行为调整中的正向性能估计值和负向性能估计值得到;
3-2)通过计算推测级i中所有线程的正向性能估计值和负向性能估计值,将基本正向并行代价和推测正向并行代价的总和记作推测级i的总正向并行代价开销将基本负向并行代价和推测负向并行代价的总和记作推测级i的总负向并行代价开销
3-3)将推测级i中总正向并行代价开销和推测负向并行代价两者之间的差值记作推测级i的预测串行执行时间,并将各个推测级的预测串行执行时间总和记作整个循环的预测串行执行时间,再减去整个循环的实际并行时间则得到当前线程分配下整个循环推测执行的并行收益,用于对当前线程分配下整个循环的执行结果进行性能评估;
3-4)采用基于推测级的代价评估和基于非推测级的代价评估对当前线程分配下整个循环的执行结果进行能效评估,具体包括以下步骤:
a)基于推测级的代价评估是将和两者之间的差值作为评估标准,用于判定推测级i的并行执行效率,若表明推测级i利于循环并行性能的提升,将会被保留并在下次循环调用中继续进行推测并行;当时,表明推测级i不利于循环并行性能的提升,在下次循环调用过程中将不再派遣任何线程到此推测级上进行推测执行;
b)基于非推测级的代价评估是通过非推测级的总正向并行代价与其它所有推测级的总正向并行代价之和的比值得到的,用于评估当前线程分配下非推测级的执行效率,若当前非推测级的代价评估结果大于等于其上一次的代价评估结果,则当前线程分配不利于整个循环并行性能的提升,若当前非推测级的代价评估结果小于其上一次的代价评估结果,则当前线程分配有利于高能效的循环推测并行。
所述步骤四中循环调用过程中所需的推测线程数目具体通过以下步骤得到:
4-1)若当前循环从未进行过线程分配,则初始时分配的推测线程数目等于所有可用的处理器核的个数,否则依据当前循环的前两次循环调用中循环迭代次数是否相等来判定线程分配结果,若不等,则仅以最近一次循环调用中线程分配的结果为准来指导线程分配,若相等,则根据当前循环所处的线程分配模式进行进一步的判定;
4-2)若当前循环已找到恰当的推测线程数目,表明当前循环的线程分配模式为固定模式Fixed Mode,直接将已找到的线程分配结果分配给当前循环的后续循环调用,进行重复利用即可;
4-3)若当前循环仅根据性能评估结果来判定推测线程数目,表明当前循环的线程分配模式为步进模式Stepping Mode,需要利用当前线程分配的结果和所设置的步长两者之间的差值来判定下次循环调用所需分配的推测线程数目;其中所设置的步长为每次循环调用所需减少的推测线程的个数;
4-4)若当前循环仅根据能效评估结果来判定推测线程数目,表明当前循环的线程分配模式为激进模式Aggressive Mode,估算当前循环非推测级所占比值,若当前非推测级所占比值小于上次循环调用所得到的非推测级比值,则直接转换为步进模式,并按照步进模式分配当前循环所需的推测线程数目;否则依次对每个推测级分别进行正向性能估计和负向性能估计,直至某个推测级的正向性能估计值小于相应的负向性能估计值时为止,在此过程中,累计所有正向性能估计值大于负向性能估计值的推测级的个数,并将此统计结果作为线程分配的标准,用于决定下次循环调用所需分配的推测线程数目;
4-5)当前循环在得到所需的推测线程数目之后,调度与所需的推测线程数目相等的处理器核分配给当前循环进行推测执行;
4-6)在循环推测执行过程中,计算当前循环的并行收益,对当前线程分配结果进行性能评估,若当前循环调用的并行收益小于上次循环调用的并行收益,则更新当前线程分配模式为固定模式,表明已找到合适的推测线程数目;否则保持当前线程分配模式不变,并在后续循环调用中继续查找当前循环所需的推测线程数目。
所述步骤四和步骤五中的循环性能表中包含以下信息:循环标识符,当前循环调用所分配的起始处理器核的位置,当前循环调用所允许分配的推测线程数目,当前循环调用之前连续两次循环调用的循环迭代次数以及所分配的推测线程数目,上次循环调用的非推测级所占比值,以及上次循环调用的并行收益。
所述步骤五中获得推测线程和处理器核之间的动态映射的具体步骤如下:
5-1)若当前循环从未进行过线程分配,则所有的处理器核均对当前循环可用,并按照循环方式计算和查找当前线程的下一个处理器核,将其分配给激发线程进行推测并行;
5-2)若当前循环已发生了线程分配,则从循环性能表中查找到当前循环所分配的起始处理器核的位置和所允许执行的推测线程数目,再结合当前线程的位置共同判定激发线程的处理器核的位置;
5-3)计算当前线程与起始处理器核之间的相对距离,得到当前线程的处理器核的相对位置,在所允许分配的推测线程数目范围内,依据当前线程的位置信息,计算激发线程所要分配的处理器核的相对位置;
5-4)结合当前循环所分配的起始处理器核的位置,计算激发线程所要分配的处理器核与起始处理器核之间的相对距离,得到激发线程的处理器核的绝对位置;
5-5)当得到激发线程的处理器核的绝对位置后,直接进行推测执行,完成线程和处理器核之间的动态映射。
相对于现有技术,本发明具有以下有益的技术效果:
本发明提供的基于SMT的线程级推测系统中推测线程数目的动态控制方法,能够在循环推测执行过程中,利用循环性能剖析中所得到的各个推测级的正向性能估计值和负向性能估计值,对当前线程分配下整个循环的执行结果进行性能评估和能效评估,指导后续循环调用总能在所需的推测线程数目下进行推测执行。与传统的循环推测执行方法相比,本发明的每个推测执行的循环不再总是简单地被分配到所有可用的处理器核,而是依据整个循环的执行结果进行动态自适应地线程分配和资源调度,避免了不必要的性能损失和能耗开销。具体的:
1)在SMT处理器上采用基于硬件的线程周期计数框架,对整个循环的推测执行过程进行动态监测和性能剖析,通过计算各个推测级的正向性能估计值和负向性能估计值,能够在每次循环调用结束时得到整个循环的串行执行时间和并行执行时间,而不需要增加额外的源程序串行执行剖析遍,有利于在运行时直接计算整个循环的推测执行所带来的并行收益,减少了整个循环在后续循环调用中所产生的不必要的并行代价开销。
2)通过在循环推测执行过程中采用动态线程分配和线程映射,使得每次循环调用时将不再简单地假定分配所有可用的处理器核能够带来性能提升,而是首先利用循环性能剖析所得到的各个推测级的正向性能估计值和负向性能估计值对整个循环进行性能评估和能效评估,然后再预测整个循环运行时所需分配的推测线程数目,确保后续循环调用总能在所需的推测线程数目下得到高效的推测执行。因此本发明提供的方法不仅能防止具有并行收益的循环因不合适的线程分配过而早地被判定为串行执行,而且在某种程度上有利于充分挖掘整个循环的并行性。
3)针对每个推测执行的循环,不同的线程分配结果将会产生不同的能耗开销和执行延迟,在循环的推测执行过程中采用了能耗开销与执行延迟平方的乘积(Energy-DelaySquared Product,ED2P)对整个循环在所需的推测线程数目分配下所产生的能耗开销及执行延迟展开相关的能效评估,能效评估的结果表明,每个推测执行的循环在经过线程分配之后所计算得到的ED2P值总是小于传统未进行线程分配的结果,表明本发明提供的方法能够提高处理器资源的有效利用率。
综上所述,本发明提供的方法在程序推测执行过程中,能够根据每个循环的推测执行特征,动态控制不同循环调用所需的推测线程数目,不仅有利于最大化每个循环运行时的并行性能,而且在某种程度上也提高了处理器资源的有效利用率,确保了整个程序的高能效推测执行。
附图说明
图1为循环推测执行过程中推测线程数目的动态控制流程示意图;
图2为基于硬件的线程周期计数框架示意图;
图3为运行时的线程分配流程示意图;
图4为线程和处理器核之间的映射流程示意图。
具体实施方式
下面对本发明作进一步详细说明。所述是对本发明的解释而不是限定。
本发明提供的基于SMT的线程级推测系统中推测线程数目的动态控制方法,是针对每个推测执行的循环,利用一组基于硬件的性能计数器,对当前线程分配下整个循环所产生的各种并行代价开销进行详细地剖析和评估。根据这些评估结果的指导,后续循环调用将会在当前线程分配的基础上对所选循环不断地进行线程分配和资源调整,直到找到合适的推测线程数目为止,具体步骤如下:
步骤一,在编译时贪心的循环选择基础上,结合运行时的循环调度策略和当前线程分配的需求,选择候选循环在所分配的处理器资源上进行推测并行和循环性能剖析;
步骤二,在循环性能剖析中,根据线程内和线程间的性能影响作用,提取出循环推测执行过程中的正向线程性能干扰和负向线程性能干扰,并计算得到相应的正向性能估计值和负向性能估计值;
步骤三,识别出每个线程在推测并行过程中所属的推测级,再以各个推测级为单位,利用单个线程的正向性能估计和负向性能估计来估算和量化在当前线程分配下各个推测级的并行代价开销,用于对整个循环的执行结果进行性能评估和能效评估;
步骤四,根据整个循环的评估结果,采用线程分配算法预测整个循环在不同循环调用过程中所需的推测线程数目,并将此结果反馈到循环性能表中,用于指导不同循环调用间的线程分配和资源调度;
步骤五,利用循环性能表中当前循环的线程分配信息计算所激发线程的相对位置,进行推测线程和处理器核之间的动态映射以及资源调度,完成整个循环在所分配的处理器资源上的一次推测执行;
步骤六,若当前循环在一次推测执行结束时,经性能评估和能效评估之后,仍未找到所需的推测线程数目,那么在后续的循环调用过程中,将会重复以上五个步骤,直到找到合适的线程分配结果为止;若当前循环在一次推测执行结束时已经找到所需的推测线程数目,将会停止对当前循环进行再次线程分配,并在后续的循环调用过程中重复利用当前所找到的推测线程数目,直到整个程序执行结束。
在上述循环性能剖析中,利用线程执行周期分解技术对整个循环中所有推测执行的线程进行线程执行周期分解,识别和确定在当前线程分配下线程内和线程间的相互性能影响作用,用于得到整个循环推测过程中的正向性能估计值和负向性能估计值,具体步骤如下:
2-1)利用线程执行周期分解技术,构建基于硬件的线程周期计数框架,根据处理器流水线指令调度阶段中分派槽的占用与空闲状态的分析与统计,得到对每个线程指令执行周期的动态监测;
2-2)在动态监测过程中,借助于四个周期计数组件来分解和计算每个线程的执行时间,即基本周期计数组件,流水线前端周期计数组件,流水线后端周期计数组件和推测等待周期计数组件,每个周期计数组件都由一个或多个计数器组成,将每个周期计数组件中所有计数器所统计的分派槽的个数除以整个处理器的分派带宽即得到每个周期计数组件的执行时间;
2-3)根据各个周期计数组件的执行时间以及线程内和线程间的相互性能影响,定义正向线程性能干扰和负向线程性能干扰,其中正向线程性能干扰指所有非推测指令的执行时间以及在线程推测过程中各种数据预提取和数据共享情形所缩短的有效执行时间的总和,负向线程性能干扰则指所有推测指令的执行时间以及因线程的推测执行所引发的额外执行时间的总和,再利用行为调整手段对已发生并行行为变化的周期计数组件进行相应的性能预测和行为校正,以得到正向线程性能干扰和负向线程性能干扰各自准确的执行时间,即正向性能估计值和负向性能估计值。
在上述对整个循环进行正向性能估计和负向性能估计的过程中,每个线程的正向性能估计值和负向性能估计值却总受到相应推测级的执行限制,需要识别和计算每个线程所属的推测级,具体的推测级通过以下公式计算得到:
A)若当前线程所分配的处理器核ID大于等于非推测线程所分配的处理器核ID,则当前线程的推测级通过等式dist=curr_cxt-non_spec_cxt得到;
B)若当前线程所分配的处理器核ID小于非推测线程所分配的处理器核ID,则当前线程的推测级通过等式dist=curr_cxt+MAX_NUM_CONTEXT-non_spec_cxt得到;
其中,curr_cxt和non_spec_cxt分别表示当前线程和非推测线程所分配的处理器核ID,dist表示当前线程相对于非推测级所计算获得的推测级结果,MAX_NUM_CONTEXT表示运行时处理器中所有可用的处理器核的个数。
通过识别每个线程所属的推测级,再以推测级为单位,利用每个线程在相应推测级上所产生的代价开销对当前线程分配下整个循环的执行结果进行性能评估和能效评估,具体步骤如下:
3-1)根据线程的正向性能估计值和负向性能估计值,将每个推测级i的并行代价划分为四个部分,表示推测级i的基本正向并行代价,指在推测级i上所有非推测指令的执行时间以及各种数据预提取和数据共享情形所缩短的的执行时间总和,表示推测级i的基本负向并行代价,指在推测级i上所有推测指令的执行时间以及因线程的推测执行所引发的额外执行时间的总和,和分别表示推测级i的推测正向和推测负向并行代价,通过识别和计算各个周期计数组件行为调整中的正向性能估计和负向性能估计得到;
3-2)通过计算推测级i中所有线程的正向性能估计值和负向性能估计值,将基本正向并行代价和推测正向并行代价的总和记作推测级i的总正向并行代价开销将基本负向并行代价和推测负向并行代价的总和记作推测级i的总负向并行代价开销
3-3)将推测级i中总正向并行代价开销和推测负向并行代价两者之间的差值记作推测级i的预测串行执行时间,并将各个推测级的预测串行执行时间总和记作整个循环的预测串行执行时间,再减去整个循环的实际并行时间则得到当前线程分配下整个循环推测执行的并行收益,用于对当前线程分配下整个循环的执行结果进行性能评估;
3-4)采用基于推测级的代价评估和基于非推测级的代价评估对当前线程分配下整个循环的执行结果进行能效评估,具体地:
a)基于推测级的代价评估是将和两者之间的差值作为评估标准,用于判定推测级i的并行执行效率,若表明推测级i利于循环并行性能的提升,将会被保留并在下次循环调用中继续进行推测并行;当时,表明推测级i不利于循环并行性能的提升,在下次循环调用过程中将不再派遣任何线程到此推测级上进行推测执行;
b)基于非推测级的代价评估是通过非推测级的总正向并行代价与其它所有推测级的总正向并行代价之和的比值得到的,用于评估当前线程分配下非推测级的执行效率,若当前非推测级的代价评估结果大于其上一次的代价评估结果,则当前线程分配不利于整个循环并行性能的提升,若当前非推测级的代价评估结果小于其上一次的代价评估结果,则当前线程分配有利于高能效的循环推测并行。
根据整个循环在当前线程分配下的性能评估结果和能效评估结果判定下次循环调用所需分配的推测线程数目,整个循环所需分配的推测线程数目具体通过以下步骤得到:
4-1)如果当前循环从未进行过线程分配,则初始时分配的推测线程数目等于所有可用处理器核的个数,否则依据当前循环前两次循环调用中循环迭代次数是否相等来判定线程分配的结果,如果不等,则仅以最近一次循环调用中线程分配的结果为准来指导线程分配,如果相等,则根据当前循环所处的线程分配模式进行进一步的判定;
4-2)若当前循环已找到恰当的推测线程数目,表明当前循环的线程分配模式为固定模式(Fixed Mode),直接将已找到的线程分配结果分配给当前循环的后续循环调用,进行重复利用即可;
4-3)若当前循环仅根据性能评估结果来判定推测线程数目,表明当前循环的线程分配模式为步进模式(Stepping Mode),需要利用当前线程分配的结果和所设置的步长(每次循环调用所需减少的推测线程的个数)两者之间的差值来判定下次循环调用所需分配的推测线程数目;
4-4)若当前循环仅根据能效评估结果来判定推测线程数目,表明当前循环的线程分配模式为激进模式(Aggressive Mode),需要估算当前循环非推测级所占比值,如果当前非推测级所占比值小于上次循环调用所得到的非推测级比值,则直接转换为步进模式,并按照步进模式分配当前循环所需的推测线程数目;否则,需要依次对每个推测级分别进行正向性能估计和负向性能估计,直至某个推测级的正向性能估计结果小于相应的负向性能估计结果时为止,在此过程中,累计所有正向性能估计结果大于负向性能估计结果的推测级的个数,并将此统计结果作为线程分配的标准,用于决定下次循环调用所需分配的推测线程数目;
4-5)当前循环在得到所需的推测线程数目之后,调度与所需的推测线程数目相等的处理器核分配给当前循环进行推测执行;
4-6)在循环推测执行过程中,计算当前循环的并行收益,对当前线程分配结果进行性能评估,如果当前循环调用的并行收益小于上次循环调用的并行收益,则更新当前线程分配模式为固定模式,表明已找到合适的推测线程数目;否则保持当前的线程分配模式不变,并在后续循环调用中继续查找当前循环所需的推测线程数目。
在当前线程分配结束时,整个循环的线程分配信息将被保存到循环性能表中,用于指导后续循环调用进行再次线程分配以及相应的线程映射,循环性能表包含以下信息:循环标识符(循环ID),当前循环调用所分配的起始处理器核的位置,当前循环调用所允许分配的推测线程数目,当前循环调用之前连续两次循环调用的循环迭代次数以及所分配的推测线程数目,上次循环调用非推测所占比值,上次循环调用的并行收益。
根据循环性能表中所保存的线程分配信息对候选循环进行线程映射和资源调度,确保每个激发的线程能够被分配到适当的处理器核上进行推测并行。例如,若当前循环要发起一个新创建的后继线程时,后继线程和处理器核之间的动态映射的具体步骤如下:
5-1)如果当前循环从未进行过线程分配,则认为所有的处理器核均对当前循环可用,并按照循环方式计算和查找当前发起线程的下一个处理器核,将其分配给后继激发线程进行推测并行;
5-2)如果当前循环已发生了线程分配,则从循环性能表中查找到当前循环所分配的起始处理器核的位置和所允许执行的推测线程数目,再结合当前发起线程的位置共同判定后继激发线程的处理器核的位置;
5-3)计算当前线程与起始处理器核之间的相对距离,得到当前发起线程的处理器核的相对位置,在所允许分配的推测线程数目范围内,依据当前发起线程的位置信息,计算后继激发线程所要分配的处理器核的相对位置;
5-4)再次结合当前循环所分配的起始处理器核的位置,计算后继激发线程所要分配的处理器核与起始处理器核之间的相对距离,最终得到后继激发线程的处理器核的绝对位置;
5-5)当后继激发线程得到处理器核的绝对位置后,直接进行推测执行,完成线程和处理器核之间的动态映射。
下面结合附图对本发明作进一步详细说明。
参见图1所示的循环推测执行过程中推测线程数目的动态控制总体框架图,所有的候选循环经编译时贪心的循环选择之后,经汇编链接生成相应的二进制代码在模拟器上进行推测执行,其中,循环调度+线程映射模块负责选择恰当的循环嵌套层,并给所选择的循环嵌套层分配所需的处理器资源;在循环性能剖析中,正向性能估计模块和负向性能估计模块分别用于分析和量化线程内和线程间的正向和负向性能干扰,对当前线程分配下整个循环的执行结果进行性能评估和能效评估;动态线程分配模块依据整个循环的评估结果来确定后续循环调用中所需分配的推测线程数目;循环性能表用于登记每个循环的并行收益和线程分配信息,整个循环在运行时的具体执行步骤如下:
步骤一,在编译时贪心的循环选择基础上,结合运行时的循环调度策略和当前线程分配的需求,选择候选循环在所分配的处理器资源上进行推测并行和循环性能剖析;
步骤二,在循环性能剖析中,根据线程内和线程间的性能影响作用,提取出循环推测执行过程中的正向线程性能干扰和负向线程性能干扰,并计算得到相应的正向性能估计值和负向性能估计值;
步骤三,识别出每个线程在推测并行过程中所属的推测级,再以各个推测级为单位,利用单个线程的正向性能估计和负向性能估计来估算和量化在当前线程分配下各个推测级的并行代价开销,用于对整个循环的执行结果进行性能评估和能效评估;
步骤四,根据整个循环的评估结果,采用线程分配算法预测整个循环在不同循环调用过程中所需的推测线程数目,并将此结果反馈到循环性能表中,用于指导不同循环调用间的线程分配和资源调度;
步骤五,利用循环性能表中当前循环的线程分配信息计算所激发线程的相对位置,进行推测线程和处理器核之间的动态映射以及资源调度,完成整个循环在所分配的处理器资源上的一次推测执行;
步骤六,若当前循环在一次推测执行结束时,经性能评估和能效评估之后,仍未找到所需的推测线程数目,那么在后续的循环调用过程中,将会重复以上五个步骤,直到找到合适的线程分配结果为止;若当前循环在一次推测执行结束时已经找到所需的推测线程数目,将会停止对当前循环进行再次线程分配,并在后续的循环调用过程中重复利用当前所找到的推测线程数目,直到整个程序执行结束。
在循环性能剖析中,根据线程内和线程间的性能影响作用,构建基于硬件的线程周期计数框架,提取出整个循环推测执行过程中的正向和负向线程性能干扰,计算得到相应的正向性能估计值和负向性能估计值。参见图2所示的基于硬件的线程周期计数框架。在此框架中,当多个线程在基于硬件的指令调度器的作用下被选择进行指令分派时,指令派遣检测机制将通过对处理器流水线指令调度阶段中分派槽的占用与空闲状态统计,得到对每个线程指令执行的动态监测。在动态监测过程中,采用周期分类器来统计每个线程的执行时间。此周期分类器共包含四个周期计数组件,分别为基本周期计数组件(Base CycleComponent),流水线前端计数组件(Front-end Cycle Component),流水线后端周期计数组件(Back-end Cycle Component)和推测等待周期计数组件(Waiting Cycle Component)。它们各自的具体功能如下:
Base Cycle Component(Base):仅包含了一个Busy计数器,用于统计程序中非推测指令的执行时间;
Front-end Cycle Component(Front-end):包含了ExeStall、iFetch和Bpred三个计数器,分别负责计算处理器前端流水线中流水线执行延迟、指令缓存访问延迟和分支误预测执行延迟;
Back-end Cycle Component(Back-end):包含了dCache和ResStall两个计数器,用于计算数据访问延迟、功能部件及读写端口的执行延迟开销;
Waiting Cycle Component(Waiting):包含了Squash和Others两个计数器,这两者分别指线程推测撤销开销和除线程推测撤销之外的其它所有负向性能干扰,即线程创建、线程提交、线程同步、推测缓冲区溢出和推测指令执行代价。
将每个周期计数组件中所有计数器所统计的分派槽的个数除以整个处理器的分派带宽即得到每个周期计数组件的执行时间,这四个周期计数组件所包含的计数器的功能分别如下:
Busy:指派遣非推测指令的所需的执行时间;
ExeStall:指流水线执行延迟所需的执行时间;
iFetch:指令缓存或页表访问延迟;
Bpred:运行时分支误预测事件所造成的流水线指令执行延迟;
dCache:数据缓存或页表访问延迟;
ResStall:功能部件和读写端口如除法部件、乘法部件、指令写回等的执行延迟;
Squash:线程推测撤销所产生的代价开销;
Others:指在循环推测过程中所产生的其它所有负向性能干扰的开销,即线程创建、线程提交、线程同步、推测缓冲区溢出和推测指令执行代价。
依据各个计数器的功能及其对整个循环推测执行的性能影响作用,将Squash和Others两者作为负向线程性能干扰。相比之下,Busy、ExeStall、iFetch、Bpred、dCache和ResStall这些计数器都被称作正向线程性能干扰。同时,还需借助于行为调整手段已发生并行行为变化的周期计数组件进行相应的性能预测和行为校正,以得到正向线程性能干扰和负向线程性能干扰各自准确的执行时间,即正向性能估计值和负向性能估计值。
为了从已发生并行行为变化的周期计数组件中提取出正向和负向性能干扰,需要将循环推测执行过程中每个计数器所得到的周期数与原始串行程序中各个计数器所得到的周期数进行详细地比较,对其中不一致的计数器进行行为调整,即包括Bpred(分支误预测)、dCache(数据缓存访问和内存级并行)、ExeStall(流水线执行延迟)和ResStall(功能部件访问延迟),以得到它们各自准确的正向性能估计值和负向性能估计值。具体行为调整如下:
1)在分支误预测(Branch Misprediction)的行为调整方面,正向性能干扰来自于对那些在线程撤销之前更新的分支目标地址的再次访问,这种分支的访问将会减小线程重启时分支执行的时间;负向性能干扰则来自于多个线程间共享硬件资源的相互竞争,一些已发生分支误预测的线程常会因等待前驱线程中已发生指令调度的指令的推测执行而产生额外的执行延迟;其它的负向性能干扰则来自于多个线程同时对同一目标分支进行多次重复相同分支目标地址更新的过程。
2)在数据缓存访问(L1 Data Cache)行为调整方面,正向性能干扰一方面来自于对撤销线程对自身撤销之前所加载的长延迟数据的再次访问。另一方面来自于多个不同线程间的数据通信与数据共享,后继线程访问到前驱线程将要替换出去的数据,减少了自身的数据加载执行延迟;负向性能干扰由多个不同线程同时访问且加载同一Cache行中的数据所造成的额外数据访问延迟得到。此外,若存在某个线程在进行数据加载的同时又需要替换出某一先前访问的Cache行时,这种行为也将被作为一种负向性能干扰。
3)在内存级并行(Memory-Level Parallelism,MLP)的行为调整方面,则采用估算推测并行中所得到的MLP总数与所预测的单线程中所得到的MLP总数两者的比率,作为MLP的相关调节系数,对所得到的MLP开销进行量化。在此过程中,MLP的正向性能干扰通过所增加的MLP执行延迟得到。相应地,MLP的负向性能干扰则来自于所减少的MLP执行时间。
4)在流水线执行延迟与功能部件的行为调整方面,流水线执行延迟将整个程序因线程划分和推测执行所产生的额外流水线执行延迟作为负向性能干扰,功能部件的负向性能干扰将通过多个线程间功能部件的竞争所造成的优先级线程的执行延迟时间得到。
在对整个循环进行正向性能估计和负向性能估计的过程中,每个线程的正向性能估计值和负向性能估计值却总受到相应推测级的执行限制,需要识别和计算每个线程所属的推测级,具体的推测级通过以下公式计算得到:
a)若当前线程所分配的处理器核ID大于等于非推测线程所分配的处理器核ID,则当前线程的推测级通过等式dist=curr_cxt-non_spec_cxt得到;
b)若当前线程所分配的处理器核ID小于非推测线程所分配的处理器核ID,则当前线程的推测级通过等式dist=curr_cxt+MAX_NUM_CONTEXT-non_spec_cxt得到;
其中,curr_cxt和non_spec_cxt分别表示当前线程和非推测线程所分配的处理器核ID,dist表示当前线程相对于非推测级所计算获得的推测级结果,MAX_NUM_CONTEXT表示运行时处理器中所有可用的处理器核的个数。
一旦得到每个线程所属的推测级,即可进行推测级的性能评估和能效评估。每个推测级的总并行代价被划分为四个重要的组成部分。表示推测级i的基本正向并行代价,指在推测级i上所有非推测指令的执行时间以及各种数据预提取和数据共享情形所缩短的的执行时间总和,表示推测级i的基本负向并行代价,指在推测级i上所有推测指令的执行时间以及因线程的推测执行所引发的额外执行时间的总和,和分别表示推测级i的推测正向和推测负向并行代价,通过识别和计算各个周期计数组件行为调整中的正向性能估计和负向性能估计得到。
A)根据这些正向性能估计结果和负向性能估计结果,从公式(1)中可以获得推测级i的总正向并行代价开销相应地,从公式(2)中可以计算得到相应的总负向并行代价开销
B)将推测级i中总正向并行代价开销和推测负向并行代价两者之间的差值记作推测级i的预测串行执行时间,并将各个推测级的预测串行执行时间总和记作整个循环的预测串行执行时间,再减去整个循环的实际并行时间则得到当前线程分配下整个循环推测执行的并行收益,用于对当前线程分配下整个循环的执行结果进行性能评估;
C)公式(3)和(4)分别采用了基于推测级的代价评估和基于非推测级的代价评对当前线程分配下整个循环的执行结果进行能效评估。
D)公式(3)将主要将和两者之间的差值作为评估标准,用于判定推测级i的并行执行效率。若表明推测级i利于循环并行性能的提升,将会被保留并在下次循环调用中继续进行推测并行;当时,表明推测级i不利于循环并行性能的提升,在下次循环调用过程中将不再派遣任何线程到此推测级上进行推测执行;
E)公式(4)是通过非推测级的总正向并行代价与其它所有推测级的总正向并行代价之和两者之间的比值得到的,用于评估当前线程分配下非推测级的执行效率,若当前非推测级的代价评估结果大于其上一次的代价评估结果,则当前线程分配不利于整个循环并行性能的提升,若当前非推测级的代价评估结果小于其上一次的代价评估结果,则当前线程分配有利于高能效的循环推测并行。
依据当前线程分配下整个循环的性能评估结果和能效评估结果,参见图3所示的运行时的线程分配流程图,当某个循环需要进行线程分配时,需结合三种不同的线程分配模式,来判定和计算当前循环在下次循环调用时所需分配的推测线程数目,同时需要获得当前循环的以下信息:当前循环ID:CurrLoop;处理器中所有可用的处理器核的个数:MAX_NUM_CONTEXT;当前循环最近所执行的两次循环调用的迭代次数:LastIterCount与PastIterCount;当前循环最近所执行的两次循环调用的线程分配结果:LastCoreCount和PastCoreCount;当前循环调用非推测所占比值和上次循环调用非推测所占比值分别为:CurrRatio和LastRatio;线程分配的步进长度:StepCoreCount=1;具体执行流程如下:
1)当CurrLoop在第一次循环调用被选择进行推测执行时,因未经过线程分配,则直接将运行时处理器中所有可用的处理器核的个数MAX_NUM_CONTEXT作为所需分配的推测线程数目,对CurrLoop进行推测执行;
2)当CurrLoop再次被选择进行推测执行时,则根据CurrLoop在已发生的循环调用中所得到的线程分配信息来指导后续循环调用如何进行线程分配。此时,需要比较当前循环前两次循环调用的迭代次数LastIterCount与PastIterCount是否相等,若LastIterCount与PastIterCount不等,直接将上次循环调用的线程分配结果LastCoreCount作为当前循环所需分配的推测线程数目;若LastIterCount与PastIterCount相等,需要进一步根据当前循环所处的线程分配模式进行判定;
3)若当前循环已找到恰当的推测线程数目,表明当前循环的线程分配模式为固定模式(Fixed Mode),直接将上次循环调用的线程分配结果LastCoreCount作为当前循环所需分配的推测线程数目;
4)若当前循环仅根据性能评估结果来判定推测线程数目,表明当前循环的线程分配模式为步进模式(Stepping Mode),需要将LastCoreCount-StepCoreCount作为当前循环所需分配的推测线程数目;
5)若当前循环仅根据能效评估结果来判定推测线程数目,表明当前循环的线程分配模式为激进模式(Aggressive Mode),估算当前循环非推测所占比值(公式4),并比较当前循环调用非推测所占的比值CurrRatio和上次循环调用非推测所占的比值LastRatio,若CurrRatio小于等于LastRatio,需要将PastCoreCount-StepCoreCount作为当前循环所需分配的推测线程数目,同时设置线程分配的模式为步进模式;若CurrRatio大于LastRatio,依次累计每个推测级的正向性能估计(公式1)和负向性能估计(公式2),直至某个推测级的正向性能估计结果小于负向性能估计结果(公式3)。此时累计所有正向性能估计结果大于负向性能估计结果的推测级的个数,并将此统计结果作为线程分配的标准,用于决定下次循环调用所需分配的推测线程数目;
6)根据CurrLoop所需分配的推测线程数目,调度与所需的推测线程数目相等的处理器核分配给当前循环CurrLoop进行推测执行;
7)在整个循环的推测执行过程中,还需判断CurrLoop的StepCoreCount的取值,如果StepCoreCount=-1,设置CurrLoop线程分配的模式为固定模式;如果StepCoreCount=1,计算CurrLoop当前循环的并行收益,并比较当前循环调用中所获得的并行收益和上次循环调用所得到的并行收益,若当前循环调用中所获得的并行收益大于上次循环调用所得到的并行收益,保持StepCoreCount=1不变;若当前循环调用中所获得的并行收益小于等于上次循环调用所得到的并行收益,设置StepCoreCount=-1,并将上次循环调用的线程分配结果LastCoreCount作为当前循环所需分配的推测线程数目,并在下一次循环调用时进行重复利用。
在当前线程分配结束时,整个循环的线程分配信息将被保存到循环性能表(LoopPerformance Table)中,用于指导后续循环调用进行再次线程分配以及相应的线程映射,循环性能表包含以下信息:循环标识符(循环ID),当前循环调用所分配的起始处理器核的位置(startID),当前循环调用所允许分配的推测线程数目(assignCount),当前循环调用之前连续两次循环调用的循环迭代次数(LastIterCount与PastIterCount)以及所分配的推测线程数目(LastCoreCount和PastCoreCount),上次循环调用非推测所占比值(LastRatio),上次循环调用的并行收益(LastBenefit)。
根据循环性能表中所保存的线程分配信息对候选循环进行线程映射和资源调度,确保每个激发的线程能够被分配到适当的处理器核上进行推测并行。参见图4所示线程和处理器核映射的示意图。当某个循环被选择进行推测并行时,需要利用当前循环的线程分配信息计算激发线程的相对位置,进行推测线程和处理器核之间的动态映射。在线程映射之前,需要得到以下信息:当前循环ID:CurrLoop;当前线程所在处理核的位置:curr_cxt;循环性能表:Loop Performance Table,用于得到候选循环的起始处理器核的位置和所允许分配的推测线程数目,在获取到这些信息之后,推测线程和处理器核之间的动态映射的具体步骤如下:
1)从Loop Performance Table中查找到CurrLoop所分配的起始处理器核的位置(startID)和所允许分配的推测线程数目(assignCount);
2)计算当前线程与起始处理器核之间的相对距离distance,即等于(curr_cxt-startID+MAX_NUM_CONTEXT)mod MAX_NUM_CONTEXT;
3)在所允许分配的推测线程数目范围内,计算激发线程要分配的处理器核的相对位置,即nextDist=(distance+1)mod assignCount;
4)结合CurrLoop所分配的起始处理器核的位置startID,利用(startID+nestDist)mod MAX_NUM_CONTEXT得到后继激发线程的处理器核的绝对位置next_cxt。
当激发线程得到处理器核的绝对位置之后,直接在当前分配的处理器核上进行推测执行,完成线程和处理器核之间的动态映射工作。
本发明提供的基于SMT的线程级推测系统中推测线程数目的动态控制方法,采用不同的线程分配策略来动态控制每个循环运行时的并行性能和能耗开销。该方法主要依赖于运行时的循环性能剖析信息,识别和计算在循环推测执行过程中各个推测级的正向性能估计值和负向性能估计值,对整个循环的执行结果进行相应的性能评估和能效评估,然后根据性能评估结果和能效评估结果,对每个循环所需的推测线程数目进行不断地预测和动态调整,以实现整个程序的动态自适应线程分配过程。
上述结合附图进行说明的具体内容只是示意性的,并非构成对本发明保护范围的限制,所属领域的研究人员在本发明提供的基于SMT的线程级推测系统中推测线程数目的动态控制方法的基础上,不需付出创造性劳动而做出的各种修改或变形仍在本发明的保护范围内。
Claims (7)
1.一种基于SMT的线程级推测系统中推测线程数目的动态控制方法,其特征在于,包括以下步骤:
步骤一,在编译时采取贪心的循环选择的基础上,结合运行时的循环调度策略和当前线程分配的需求,选择候选循环在所分配的处理器资源上进行推测并行和循环性能剖析;
步骤二,在循环性能剖析中,根据线程内和线程间的性能影响作用,提取出循环推测执行过程中的正向线程性能干扰和负向线程性能干扰,并计算得到相应的正向性能估计值和负向性能估计值;
步骤三,识别出每个线程在推测并行过程中所属的推测级,再以各个推测级为单位,利用单个线程的正向性能估计值和负向性能估计值来估算和量化在当前线程分配下各个推测级的并行代价开销,用于对整个循环的执行结果进行性能评估和能效评估;
步骤四,根据整个循环的评估结果,采用线程分配算法预测整个循环在不同循环调用过程中所需的推测线程数目,并将此结果反馈到循环性能表中,用于指导不同循环调用间的线程分配和资源调度;
步骤五,利用循环性能表中当前循环的线程分配信息计算所激发线程的相对位置,进行推测线程和处理器核之间的动态映射以及资源调度,完成整个循环在所分配的处理器资源上的一次推测执行;
步骤六,若当前循环在一次推测执行结束时,经性能评估和能效评估之后,仍未找到所需的推测线程数目,那么在后续的循环调用过程中,将会重复步骤一至步骤五,直到找到合适的线程分配结果为止;若当前循环在一次推测执行结束时已经找到所需的推测线程数目,将会停止对当前循环进行再次线程分配,并在后续的循环调用过程中重复利用当前所找到的推测线程数目,直到整个程序执行结束,至此即完成了SMT的线程级推测系统中对于推测线程数目的动态控制。
2.根据权利要求1所述的基于SMT的线程级推测系统中推测线程数目的动态控制方法,其特征在于,所述步骤二中得到正向性能估计值和负向性能估计值的具体步骤如下:
2-1)利用线程执行周期分解技术,构建基于硬件的线程周期计数框架,根据处理器流水线指令调度阶段中分派槽的占用与空闲状态的分析与统计,得到对每个线程指令执行周期的动态监测;
2-2)在动态监测过程中,借助于四个周期计数组件来分解和计算每个线程的执行时间,即基本周期计数组件,流水线前端周期计数组件,流水线后端周期计数组件和推测等待周期计数组件,每个周期计数组件都由一个或多个计数器组成,将每个周期计数组件中所有计数器所统计的分派槽的个数除以整个处理器的分派带宽即得到每个周期计数组件的执行时间;
2-3)根据各个周期计数组件的执行时间以及线程内和线程间的相互性能影响,定义正向线程性能干扰和负向线程性能干扰,其中正向线程性能干扰指所有非推测指令的执行时间以及在线程推测过程中各种数据预提取和数据共享情形所缩短的有效执行时间的总和,负向线程性能干扰指所有推测指令的执行时间以及因线程的推测执行所引发的额外执行时间的总和;然后利用行为调整手段对已发生并行行为变化的周期计数组件进行相应的性能预测和行为校正,以得到正向线程性能干扰和负向线程性能干扰各自准确的执行时间,即正向性能估计值和负向性能估计值。
3.根据权利要求1所述的基于SMT的线程级推测系统中推测线程数目的动态控制方法,其特征在于,所述步骤三中推测级通过以下公式计算得到:
A)若当前线程所分配的处理器核ID大于等于非推测线程所分配的处理器核ID,则当前线程的推测级通过等式dist=curr_cxt-non_spec_cxt得到;
B)若当前线程所分配的处理器核ID小于非推测线程所分配的处理器核ID,则当前线程的推测级通过等式dist=curr_cxt+MAX_NUM_CONTEXT-non_spec_cxt得到;
其中,curr_cxt和non_spec_cxt分别表示当前线程和非推测线程所分配的处理器核ID,dist表示当前线程相对于非推测线程所计算获得的推测级结果,MAX_NUM_CONTEXT表示运行时处理器中所有可用的处理器核的个数。
4.根据权利要求2所述的基于SMT的线程级推测系统中推测线程数目的动态控制方法,其特征在于,所述步骤三中整个循环的性能评估和能效评估通过以下步骤得到:
3-1)根据线程的正向性能估计值和负向性能估计值,将每个推测级i的并行代价划分为四个部分,表示推测级i的基本正向并行代价,指在推测级i上所有非推测指令的执行时间以及各种数据预提取和数据共享情形所缩短的执行时间总和,表示推测级i的基本负向并行代价,指在推测级i上所有推测指令的执行时间以及因线程的推测执行所引发的额外执行时间的总和,和分别表示推测级i的推测正向并行代价和推测负向并行代价,通过识别和计算各个周期计数组件行为调整中的正向性能估计值和负向性能估计值得到;
3-2)通过计算推测级i中所有线程的正向性能估计值和负向性能估计值,将基本正向并行代价和推测正向并行代价的总和记作推测级i的总正向并行代价开销将基本负向并行代价和推测负向并行代价的总和记作推测级i的总负向并行代价开销
3-3)将推测级i中总正向并行代价开销和推测负向并行代价两者之间的差值记作推测级i的预测串行执行时间,并将各个推测级的预测串行执行时间总和记作整个循环的预测串行执行时间,再减去整个循环的实际并行时间则得到当前线程分配下整个循环推测执行的并行收益,用于对当前线程分配下整个循环的执行结果进行性能评估;
3-4)采用基于推测级的代价评估和基于非推测级的代价评估对当前线程分配下整个循环的执行结果进行能效评估,具体包括以下步骤:
a)基于推测级的代价评估是将和两者之间的差值作为评估标准,用于判定推测级i的并行执行效率,若表明推测级i利于循环并行性能的提升,将会被保留并在下次循环调用中继续进行推测并行;当时,表明推测级i不利于循环并行性能的提升,在下次循环调用过程中将不再派遣任何线程到此推测级上进行推测执行;
b)基于非推测级的代价评估是通过非推测级的总正向并行代价开销与其它所有推测级的总正向并行代价开销之和的比值得到的,用于评估当前线程分配下非推测级的执行效率,若当前非推测级的代价评估结果大于等于其上一次的代价评估结果,则当前线程分配不利于整个循环并行性能的提升,若当前非推测级的代价评估结果小于其上一次的代价评估结果,则当前线程分配有利于高能效的循环推测并行。
5.根据权利要求1所述的基于SMT的线程级推测系统中推测线程数目的动态控制方法,其特征在于,所述步骤四中循环调用过程中所需的推测线程数目具体通过以下步骤得到:
4-1)若当前循环从未进行过线程分配,则初始时分配的推测线程数目等于所有可用的处理器核的个数,否则依据当前循环的前两次循环调用中循环迭代次数是否相等来判定线程分配结果,若不等,则仅以最近一次循环调用中线程分配的结果为准来指导线程分配,若相等,则根据当前循环所处的线程分配模式进行进一步的判定;
4-2)若当前循环已找到恰当的推测线程数目,表明当前循环的线程分配模式为固定模式Fixed Mode,直接将已找到的线程分配结果分配给当前循环的后续循环调用,进行重复利用即可;
4-3)若当前循环仅根据性能评估结果来判定推测线程数目,表明当前循环的线程分配模式为步进模式Stepping Mode,需要利用当前线程分配的结果和所设置的步长两者之间的差值来判定下次循环调用所需分配的推测线程数目;其中所设置的步长为每次循环调用所需减少的推测线程的个数;
4-4)若当前循环仅根据能效评估结果来判定推测线程数目,表明当前循环的线程分配模式为激进模式Aggressive Mode,估算当前循环非推测级所占比值,若当前非推测级所占比值小于上次循环调用所得到的非推测级比值,则直接转换为步进模式,并按照步进模式分配当前循环所需的推测线程数目;否则依次对每个推测级分别进行正向性能估计和负向性能估计,直至某个推测级的正向性能估计值小于相应的负向性能估计值时为止,在此过程中,累计所有正向性能估计值大于负向性能估计值的推测级的个数,并将此统计结果作为线程分配的标准,用于决定下次循环调用所需分配的推测线程数目;
4-5)当前循环在得到所需的推测线程数目之后,调度与所需的推测线程数目相等的处理器核分配给当前循环进行推测执行;
4-6)在循环推测执行过程中,计算当前循环的并行收益,对当前线程分配结果进行性能评估,若当前循环调用的并行收益小于上次循环调用的并行收益,则更新当前线程分配模式为固定模式,表明已找到合适的推测线程数目;否则保持当前线程分配模式不变,并在后续循环调用中继续查找当前循环所需的推测线程数目。
6.根据权利要求1所述的基于SMT的线程级推测系统中推测线程数目的动态控制方法,其特征在于,所述步骤四和步骤五中的循环性能表中包含以下信息:循环标识符,当前循环调用所分配的起始处理器核的位置,当前循环调用所允许分配的推测线程数目,当前循环调用之前连续两次循环调用的循环迭代次数以及所分配的推测线程数目,上次循环调用的非推测级所占比值,以及上次循环调用的并行收益。
7.根据权利要求1所述的基于SMT的线程级推测系统中推测线程数目的动态控制方法,其特征在于,所述步骤五中获得推测线程和处理器核之间的动态映射的具体步骤如下:
5-1)若当前循环从未进行过线程分配,则所有的处理器核均对当前循环可用,并按照循环方式计算和查找当前线程的下一个处理器核,将其分配给激发线程进行推测并行;
5-2)若当前循环已发生了线程分配,则从循环性能表中查找到当前循环所分配的起始处理器核的位置和所允许执行的推测线程数目,再结合当前线程的位置共同判定激发线程的处理器核的位置;
5-3)计算当前线程与起始处理器核之间的相对距离,得到当前线程的处理器核的相对位置,在所允许分配的推测线程数目范围内,依据当前线程的位置信息,计算激发线程所要分配的处理器核的相对位置;
5-4)结合当前循环所分配的起始处理器核的位置,计算激发线程所要分配的处理器核与起始处理器核之间的相对距离,得到激发线程的处理器核的绝对位置;
5-5)当得到激发线程的处理器核的绝对位置后,直接进行推测执行,完成线程和处理器核之间的动态映射。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510654581.5A CN105260165B (zh) | 2015-10-10 | 2015-10-10 | 基于smt的线程级推测系统中推测线程数目的动态控制方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510654581.5A CN105260165B (zh) | 2015-10-10 | 2015-10-10 | 基于smt的线程级推测系统中推测线程数目的动态控制方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105260165A CN105260165A (zh) | 2016-01-20 |
CN105260165B true CN105260165B (zh) | 2018-01-05 |
Family
ID=55099871
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510654581.5A Expired - Fee Related CN105260165B (zh) | 2015-10-10 | 2015-10-10 | 基于smt的线程级推测系统中推测线程数目的动态控制方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105260165B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI735520B (zh) * | 2017-01-24 | 2021-08-11 | 香港商阿里巴巴集團服務有限公司 | 調整元件邏輯執行緒數量的方法及裝置 |
CN108932137B (zh) * | 2018-07-17 | 2022-09-27 | 西安航空学院 | 一种基于推测多线程的汇编级过程间指针分析方法 |
CN113238854B (zh) * | 2021-07-07 | 2021-11-19 | 苏州浪潮智能科技有限公司 | 一种线程数自动调节的方法、装置、设备及可读介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101515231A (zh) * | 2009-03-23 | 2009-08-26 | 浙江大学 | 基于数据流分析的单线程程序并行化的实现方法 |
CN102063289A (zh) * | 2010-09-07 | 2011-05-18 | 中国科学技术大学 | 串行程序线程级推测执行能力评估方法和评估器 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6314471B1 (en) * | 1998-11-13 | 2001-11-06 | Cray Inc. | Techniques for an interrupt free operating system |
KR100806274B1 (ko) * | 2005-12-06 | 2008-02-22 | 한국전자통신연구원 | 멀티 쓰레디드 프로세서 기반의 병렬 시스템을 위한 적응형실행 방법 |
-
2015
- 2015-10-10 CN CN201510654581.5A patent/CN105260165B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101515231A (zh) * | 2009-03-23 | 2009-08-26 | 浙江大学 | 基于数据流分析的单线程程序并行化的实现方法 |
CN102063289A (zh) * | 2010-09-07 | 2011-05-18 | 中国科学技术大学 | 串行程序线程级推测执行能力评估方法和评估器 |
Non-Patent Citations (2)
Title |
---|
Mitosis: A Speculative Multithreaded Processor;Carlos;《IEEE TRANSACTIONS ON PARALLEL AND DISTRIBUTED SYSTEMS》;20080731;第914-925页 * |
基于性能预测的推测多线程循环选择方法;刘 斌;《电子与信息学报》;20141130;第2768-2774页 * |
Also Published As
Publication number | Publication date |
---|---|
CN105260165A (zh) | 2016-01-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11449364B2 (en) | Processing in a multicore processor with different cores having different architectures | |
Li et al. | Performance analysis and optimization for SpMV on GPU using probabilistic modeling | |
CN106257411B (zh) | 单指令多线程计算系统及其方法 | |
Rhu et al. | CAPRI: Prediction of compaction-adequacy for handling control-divergence in GPGPU architectures | |
US20110209153A1 (en) | Schedule decision device, parallel execution device, schedule decision method, and program | |
KR102616212B1 (ko) | 다수의 컴퓨팅 코어들상의 데이터 드라이브 스케줄러 | |
KR101730282B1 (ko) | 지연된 재구성된 프로그램 순서를 이용한 선택 로직 | |
CN105260165B (zh) | 基于smt的线程级推测系统中推测线程数目的动态控制方法 | |
CN102981807A (zh) | 一种基于cuda并行环境的gpu程序优化方法 | |
Kamthe et al. | A stochastic approach to estimating earliest start times of nodes for scheduling DAGs on heterogeneous distributed computing systems | |
CN106874112B (zh) | 一种结合负载均衡的工作流回填方法 | |
US10152354B2 (en) | Optimized thread scheduling on processor hardware with performance-relevant shared hardware components | |
Schaub et al. | The impact of the SIMD width on control-flow and memory divergence | |
US10558500B2 (en) | Scheduling heterogenous processors | |
US10162679B2 (en) | Method and system for assigning a computational block of a software program to cores of a multi-processor system | |
CN109522126B (zh) | 面向共享内存多核结构中线程级并行的数据优化方法及装置 | |
US10613866B2 (en) | Method of detecting repetition of an out-of-order execution schedule, apparatus and computer-readable medium | |
Uddin et al. | Signature-based high-level simulation of microthreaded many-core architectures | |
CN104361183B (zh) | 基于模拟器的微处理器微体系结构参数优化方法 | |
TW201740348A (zh) | 減少流程控制發散度之分析系統與方法 | |
US10488911B2 (en) | Method and computing system of allocating registers | |
CN110750856B (zh) | 一种基于机器学习的有效指令窗口大小评估方法 | |
Baghsorkhi et al. | Analytical performance prediction for evaluation and tuning of GPGPU applications | |
CN104679521A (zh) | 一种精确计算任务高速缓存wcet的分析方法 | |
CN107577524A (zh) | 非访存任务优先的gpgpu线程调度方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20180105 Termination date: 20201010 |