发明名称 一种面向低功耗的多核共享Cache混合划分方法
摘要 本发明涉及一种面向低功耗的多核共享Cache混合划分方法,属于计算机体系结构领域。随着片上集成的核心数目的增加,低功耗设计成为必然趋势,然而目前的Cache划分方法大都是面向吞吐量或者公平性的,忽视了功耗问题。本发明提供了一种新的面向低功耗的划分方法。划分方法利用程序的局部性原理,将在二级Cache中访问差异度较大的线程合并为一个划分单位来实现Cache列划分,从而在运行同一个应用时,使用较少的Cache列,关闭剩余的Cache列,在满足性能的基础上达到降低功耗的目的。
申请公布号 CN102135793B 申请公布日期 2012.07.04
申请号 CN201110076723.6 申请日期 2011.03.29
申请人 北京工业大学 发明人 方娟;杜文娟
分类号 G06F1/32(2006.01)I 主分类号 G06F1/32(2006.01)I
代理机构 北京思海天达知识产权代理有限公司 11203 代理人 张慧
主权项 1.一种面向低功耗的多核共享Cache混合划分方法,其特征在于包含以下步骤:(1)初始化:1.1)将每个线程作为一个单独的划分单位,给每个划分单位划分一列二级Cache;1.2)一个时间片t后,判断程序是否运行结束,结束则跳转到步骤(4),否则继续执行步骤1.3);时间片t是指将应用程序的运行时间均匀分块,每块时间称为一个时间片t;1.3)根据公式①计算系统性能IPC<sub>[par]</sub>,IPC是每个时钟执行的指令数(Instruction Per Cycle);<maths num="0001"><![CDATA[<math><mrow><msub><mi>IPC</mi><mrow><mo>[</mo><mi>par</mi><mo>]</mo></mrow></msub><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover><msub><mi>IPC</mi><mrow><mo>[</mo><msub><mi>app</mi><mi>i</mi></msub><mo>]</mo></mrow></msub><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover><mfrac><mn>1</mn><mrow><mi>&alpha;</mi><mo>+</mo><mi>&beta;</mi><mo>&times;</mo><msub><mi>&theta;</mi><mi>i</mi></msub><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow></mrow></mfrac></mrow></math>]]></maths>①其中,n表示应用程序所包含的线程总数,<img file="FDA0000137697870000012.GIF" wi="164" he="65" />表示线程i(1≤i≤n)的每个时钟执行的指令数,用来表征线程i的性能,根据下式②计算得到:<maths num="0002"><![CDATA[<math><mrow><msub><mi>IPC</mi><mrow><mo>[</mo><msub><mi>app</mi><mi>i</mi></msub><mo>]</mo></mrow></msub><mo>=</mo><mfrac><mn>1</mn><mrow><mi>&alpha;</mi><mo>+</mo><mi>&beta;</mi><mo>&times;</mo><msub><mi>&theta;</mi><mi>i</mi></msub><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow></mrow></mfrac></mrow></math>]]></maths>②②式中的α和β计算公式如下式③,θ<sub>i</sub>(x)是根据栈距离特性获取的线程i的失效率,表示当为线程i分配x大小的二级Cache时,线程i在时间片t内的缺失次数;α=CPI<sub>[base]</sub>+E<sub>1</sub>+M<sub>1</sub>×E<sub>2</sub>,β=E<sub>3</sub>            ③③式中的CPI<sub>[base]</sub>为平均每条指令的执行周期数,E<sub>1</sub>为访问一级Cache的命中开销,M<sub>1</sub>为一级Cache的缺失次数,E<sub>2</sub>为一级Cache缺失时访问二级Cache的命中开销,E<sub>3</sub>为二级Cache缺失时访问主存的命中开销;M<sub>1</sub>、E<sub>1</sub>、E<sub>2</sub>、E<sub>3</sub>和CPI<sub>[base]</sub>的值由所使用的计算机体系结构决定;1.4)若此时系统性能IPC<sub>[par]</sub>≥(1-PLT)IPC<sub>[initial]</sub>,则关闭剩余的Cache列,执行步骤(3);否则执行步骤(2);其中,回溯阈值IPC<sub>[initial]</sub>表示Cache进行单纯列划分时的系统性能,PLT表示性能损失阈值;(2)划分阶段:令所有未合并的线程T组成线程集TS,TS={T<sub>i</sub>|1≤i≤n}2.1)若|TS|≥2,执行步骤2.2),否则跳转到步骤2.5);2.2)根据公式④计算TS中任意两个线程访问Cache列的差异度R<sub>diff</sub>;R<sub>diff</sub>=|P<sub>i</sub>-P<sub>j</sub>|,(1≤i≤n,1≤j≤n且i≠j)        ④其中P是线程访问偏度,由式⑤计算得到,<maths num="0003"><![CDATA[<math><mrow><mi>P</mi><mo>=</mo><mfrac><mrow><msub><mi>U</mi><mi>up</mi></msub><mo>-</mo><msub><mi>U</mi><mi>down</mi></msub></mrow><msub><mi>U</mi><mi>used</mi></msub></mfrac></mrow></math>]]></maths>⑤将Cache的每一列均分为上下两部分,U<sub>up</sub>表示在线程所分得的一列Cache中,上半部分访问过的Cache块数,U<sub>down</sub>表示在线程所分得的一列Cache中,下半部分访问过的Cache块数,U<sub>used</sub>表示这一列中访问过的Cache块总数;2.3)对于所有差异度R<sub>diff</sub>满足R<sub>diff</sub>≥R<sub>share</sub>的线程对,将R<sub>diff</sub>取得最大值的两个线程&lt;T<sub>i</sub>,T<sub>j</sub>&gt;合并为一个划分单位,TS=TS-{T<sub>i</sub>,T<sub>j</sub>};其中,R<sub>share</sub>表示差异度阈值;2.4)若|TS|≥2,则执行步骤2.3),否则执行步骤2.5);2.5)判断是否有未划分的Cache列,是则执行2.6),否则执行步骤(3);2.6)计算所有划分单位的IPC增加量Plus_IPC<sub>k</sub>(x)值,Plus_IPC<sub>k</sub>(x)是指当划分单位k(1≤k≤n)分配的Cache列从x(x∈[0,C<sub>L2</sub>))列增加到x+1列时,划分单位k的IPC增加量,其中C<sub>L2</sub>为二级Cache的总列数;Plus_IPC<sub>k</sub>(x)的计算公式如下式⑥:<img file="FDA0000137697870000022.GIF" wi="1664" he="222" />⑥其中,函数<img file="FDA0000137697870000023.GIF" wi="161" he="63" />的计算公式如上式②;2.7)划分一列Cache给取的最大Plus_IPC<sub>k</sub>(x)的划分单位;2.8)根据式①计算系统划分性能IPC<sub>[par]</sub>;2.9)如果此时IPC<sub>[par]</sub>≥(1-PLT)IPC<sub>[initial]</sub>,则划分阶段结束,关闭剩余的Cache列,转到步骤(3);否则执行2.5);(3)回溯阶段:程序运行一个时间片t后,3.1)程序是否运行结束,是则转到步骤(4),否则执行步骤3.2);3.2)根据式①计算系统划分性能IPC<sub>[par]</sub>;3.3)如果此时IPC<sub>[par]</sub>≥(1-PLT)IPC<sub>[initial]</sub>,转到步骤(3),否则,恢复初始划分,执行(2);(4)输出运行结果,用功耗评估工具评估系统所节省的功耗。
地址 100124 北京市朝阳区平乐园100号