发明名称 一种用于异构众核系统下的应用程序线程数动态调整方法
摘要 本发明公开了一种用于异构众核系统下的应用程序线程数动态调整方法,该方法以异构众核硬件架构特征和程序运行时动态阶段性变化的特性为基础,通过采集反映程序性能变化的系统级性能计数器的状态信息,利用预测模型实时估计出最优的线程数,以此为指导动态的对应用程序的线程数进行调整。为保证合理的利用异构众核系统的计算资源来提高程序计算性能的同时降低系统能耗提供了一个有效的解决方法。
申请公布号 CN104657219A 申请公布日期 2015.05.27
申请号 CN201510090555.4 申请日期 2015.02.27
申请人 西安交通大学 发明人 董小社;巨涛;朱正东;李亮;白秀秀;吴树森;魏晓林
分类号 G06F9/50(2006.01)I 主分类号 G06F9/50(2006.01)I
代理机构 西安通大专利代理有限责任公司 61200 代理人 陆万寿
主权项 一种用于异构众核系统下的应用程序线程数动态调整方法,其特征在于,包括如下步骤:1)异构系统主机端主进程将程序循环部分代码分派到异构系统的协处理器上运行,通过系统硬件性能记数器获取程序在不同的线程数运行情况下的IPS<sub>1</sub>和IPS<sub>n</sub>的值,其中IPS<sub>1</sub>为单个线程运行时程序每秒钟所处理的指令数,IPS<sub>n</sub>为n个线程运行时程序每秒钟所处理的指令数;2)将收集到的状态信息IPS<sub>1</sub>和不同线程数情况下的IPS<sub>N</sub>值返回到CPU主机端;3)CPU主机端根据以下公式计算多线程运行时相对于单个线程运行时的相对周转时间f<sub>n</sub>:<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><msub><mi>f</mi><mi>n</mi></msub><mo>=</mo><mfrac><msub><mi>TT</mi><mi>n</mi></msub><msub><mi>TT</mi><mn>1</mn></msub></mfrac><mo>=</mo><mfrac><mrow><mfrac><mn>1</mn><msub><mi>IPS</mi><mi>n</mi></msub></mfrac><mo>*</mo><mi>SIP</mi></mrow><mrow><mfrac><mn>1</mn><msub><mi>IPS</mi><mn>1</mn></msub></mfrac><mo>*</mo><mi>SIP</mi></mrow></mfrac><mo>=</mo><mfrac><msub><mi>IPS</mi><mn>1</mn></msub><msub><mi>IPS</mi><mi>n</mi></msub></mfrac><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000675585450000011.GIF" wi="1262" he="277" /></maths>公式(1)中TT<sub>n</sub>和TT<sub>1</sub>分别表示多线程运行时程序的执行时间和单线程运行时的程序执行时间,SIP为程序总的指令数;3)根据公式(1)计算得到多组(f<sub>n</sub>,n)值,利用最小二乘法,通过求解以下方程组:<maths num="0002" id="cmaths0002"><math><![CDATA[<mfenced open='{' close=''><mtable><mtr><mtd><mi>&alpha;</mi><mo>*</mo><munderover><mi>&Sigma;</mi><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow><mi>N</mi></munderover><msup><mrow><mo>(</mo><mi>n</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><mi>&beta;</mi><mo>*</mo><munderover><mi>&Sigma;</mi><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow><mi>N</mi></munderover><mrow><mo>(</mo><msup><mi>n</mi><mn>2</mn></msup><mo>-</mo><mfrac><mrow><msup><mi>n</mi><mn>2</mn></msup><mo>-</mo><mn>1</mn></mrow><mi>n</mi></mfrac><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow><mi>N</mi></munderover><mo>[</mo><msup><mi>n</mi><mn>2</mn></msup><mo>-</mo><mrow><mo>(</mo><msub><mi>f</mi><mi>n</mi></msub><mo>+</mo><mn>1</mn><mo>)</mo></mrow><mo>*</mo><mi>n</mi><mo>+</mo><msub><mi>f</mi><mi>n</mi></msub></mtd></mtr><mtr><mtd><mi>&alpha;</mi><mo>*</mo><munderover><mi>&Sigma;</mi><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow><mi>N</mi></munderover><mfrac><mrow><mrow><mo>(</mo><msup><mi>n</mi><mn>2</mn></msup><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mrow><mo>(</mo><mi>n</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mrow><mi>n</mi></mfrac><mo>+</mo><mi>&beta;</mi><mo>*</mo><munderover><mi>&Sigma;</mi><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow><mi>N</mi></munderover><mfrac><msup><mrow><mo>(</mo><msup><mi>n</mi><mn>2</mn></msup><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mn>2</mn></msup><msup><mi>n</mi><mn>2</mn></msup></mfrac><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow><mi>N</mi></munderover><mrow><mo>(</mo><msup><mi>n</mi><mn>2</mn></msup><mo>-</mo><mfrac><mrow><msup><mi>n</mi><mn>2</mn></msup><mo>-</mo><mn>1</mn></mrow><mi>n</mi></mfrac><mo>*</mo><msub><mi>f</mi><mi>n</mi></msub><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mtd></mtr></mtable></mfenced>]]></math><img file="FDA0000675585450000012.GIF" wi="1339" he="328" /></maths>计算出最优线程数预测模型中的系数α,β的值,其中α表示所处理任务中的串行比例系数、β表示并行任务比例系统、γ表示额外开销对性能的影响因子;4)根据最优线程数预测模型:<maths num="0003" id="cmaths0003"><math><![CDATA[<mrow><mi>n</mi><mo>=</mo><msqrt><mfrac><mi>&beta;</mi><mi>&gamma;</mi></mfrac></msqrt><mo>=</mo><msqrt><mfrac><mi>&beta;</mi><mrow><mn>1</mn><mo>-</mo><mi>&alpha;</mi><mo>-</mo><mi>&beta;</mi></mrow></mfrac></msqrt><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>2</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000675585450000021.GIF" wi="1120" he="162" /></maths>计算最优线程数预测值n;5)将步骤3)中计算出的α和β的值代入公式(2)计算出最优线程数预测值n,将应用程序的线程数设为最优线程数n后重新在协处理器端运行应用程序;同时以最优线程数为标准将空闲的处理核及处理核内部的硬件线程关闭或置于非活动状态;6)程序在协处理器端运行的过程中,在一定的时间间隔内对程序的运行状态信息采集一次,并对程序的运行状态进行检测;如果检测到程序发生阶段性变化,则转到步骤2);如果程序在协处理器端运行过程中没有检测到阶段性变化,则继续运行程序,直到程序运行结束;7)将协处理器端的运行结果返回给主机端,主机端继续执行整个应用程序的后继部分,遇到有循环部分则继续分派到协处理器端执行,即转到步骤1);8)不断的迭代直到整个应用程序执行完成,从而实现了在应用程序运行的过程中动态的对线程数进行调整。
地址 710049 陕西省西安市咸宁西路28号