全部博文(436)
分类: LINUX
2012-12-17 19:41:35
我们组采用了分工阅读的办法,摘要和介绍是每人必读,我负责的部分是从3.5.6到5.2之前的部分。
摘要:
性能的多线程应用受到很多瓶颈的限制(临界段、障碍、缓慢的流水线阶段),瓶颈的序列化执行,浪费了有价值的执行周期,限制了应用的可量测性。本文主要介绍了BIS,一种软硬件合作识别和加速瓶颈的机制。BIS可以通过测量线程在每一个瓶颈处需要等待的周期数量来识别哪些瓶颈降低了性能,然后通过使用一个或者多个在非对称芯片多核处理(ACMP)上的高速内核来加速这些瓶颈。BIS比以前的四种方法平均好了百分之十五,说明了BIS的优胜性。
介绍:
加速单独的应用用到多核处理器芯片,需要将应用分离成多个线程,使这些线程在多核上同时执行。瓶颈不仅限制了性能还限制了应用的可量测性,如5.1.1中的性能在数据库的十六线程中的最大值。
以前研究的不对称芯片多处理器并没有通用性和自适应性,如⑴amdahl的串行部分,在处理序列化瓶颈是只用到最大的内核使之加速,而其他的小内核则不予处理。⑵加速临界段,一般性能提高都与最大的一个内核的加速有关,但在给定时间内的一个临界段只有一个线程可以执行,所以往往结果不能使临界段加速。⑶集合点加速,加速在并行区域中预期时间最长的线程,但只适用于静态调度的工作量。⑷直接反馈流水线,通过分配线程给内核,平衡流水线上工作负载的阶段吞吐量,提高性能或减少功耗,但适应阶段不好,因为是基于软件实现的。所以,建立一个有通用性和自适应性的独立机制来加速临界瓶颈是很重要的。
BIS是一种软硬件结合的结构,软件通过BottleneckCall 和BottleneckReturn指令来划定可能的瓶颈,用BottleneckWait指令来替换等待瓶颈的代码;硬件使用以上指令来测量每一个瓶颈导致的线程等待周期,然后用一个瓶颈来记录他们。有最高等待周期的瓶颈会被选出来加速。当执行一个BottleneckCall指令的时候,小内核会检查这个瓶颈是否已经被选择需要加速。若是则放入大内核调度缓存中,当执行瓶颈并遇到BottleneckReturn 指令时通知小内核。
这篇文章做了三个贡献:⑴支持用软件和硬件结合的方法识别不同类型的最临界的瓶颈。⑵支持自动加速机制(决定那个瓶颈需要加速,从哪儿开始加速它们)。⑶这是第一篇文章研究用ACMP在多个大内核中加速瓶颈的权衡。
3.5.6 编译器支持
编译器可以在同样的范围内用BottleneckCall/BottleneckReturn来转变瓶颈的首尾。复杂的瓶颈有多种作用或模块可能需要程序员的介入,确定的BIS可能不会应用到连程序员都没有列出的瓶颈上。一个比较复杂的ISA把瓶颈分为BottleneckBegin和BottleneckEnd,它可以扩大BIS的适用性,但这篇文章没有研究这部分。如果最临界的瓶颈没有被标记,那么BIS就失去了提高性能的机会,其他的瓶颈的标记对提高性能用处不大。我们的目的是同构ISA ACMP,但BIS会用小内核执行和大内核执行扩大异构ISA ACMP,这是作者以后会研究的问题。
3.5.7 支持计划调优
BIS可以给程序员提供最临界点的反馈,加快程序员的编程速度。程序员会决定优化哪个瓶颈能得到最好的结果。作者尝试增加一个类似于计数器的装置来储存bid和累计的等待周期数。
4 实验方法
我们用一个x86循环水平的模拟器(SCMP和ACMP)。SCMPs(对称芯片多核处理器)只由小内核组成。SCMP和ACMP有不同的线程调度政策(无流水线和有流水线),BIS综合了以上两者。
机制 |
无流水线 |
有流水线 |
SCMP |
每个内核一个线程 |
最好的静态整体调度 |
ACMP |
几个部分在大内核中,其他的在小内核中 |
包括大内核的最好的静态整体调度 |
ACS |
几个部分和临界部分在大内核中,其他的在小内核中 |
不用 |
MC-ACS |
比较最好的可能基线,将ACS扩大为多个大内核 | |
FDP |
不用 |
动态调度所有内核 |
BIS |
作者研究的方法 |
5 评估
5.1独立大内核
没有I/O加强器的应用,利用资源最大化政策,虽然没有超过预定的内核数量,但是它的性能可能更差了,因为在线程中应用性能的最高点比内核数量低很多,所以我们评估线程数平等的内核数和最佳线程数。表中所示,除area budget为8的SCMP外,BIS随着area budget的提高,平均增长速度比SCMP,ACMP,ACS/FDP也随之加快,平等的内核数更为明显。
5.1.1 线程数平等的内核数
在预算范围为32个内核时,BIS相比ACMP、SCMP、ACS/FDP的性能分别提高了43%,45%,17%。我们有三个重要的观察值。
第一,随着内核数目的增加,BIS的效益也就越大。线程越少,对于瓶颈的争论越小,加速效率就越低,在小的预算范围内,小内核运行的消耗就难以抵消,所以此时BIS的性能与ACS/FDP相似,低于SCMP(在预算范围为8个内核时)。随着预算范围的增加,更多线程开始运行,瓶颈序列化的争论增加,从而,动态加速瓶颈(ACS,FDP,BIS)开始盛行。
第二,在线程较多时,临界瓶颈会随时间改变(iplookup,all mysql,webcache,mg,ft,rank),此时BIS比ACS/FDP的性能更好,因为BIS可以更好的选择要加速的瓶颈,并且能很快的适应改变。还有临界部分和障碍会在不同时间限制mg和ft的瓶颈,BIS会处理这两种类型,而ACS不同。临界瓶颈不会随时间改变(specjbb,sqlite,tsp),BIS综合了ACS的性能。Pagemine有两个极其相似的不可测量的流水线,频率受到瓶颈的影响,此时BIS只能用一个大内核相比于FDP不能很好的提高性能(两个阶段需要同时加速)。但我们研究在有多个大内核时BIS可以提高性能。
第三,BIS相比于ACS/FDP、ACMP、SCMP的可量测性更好。BIS可以减少争论与线程等待,在瓶颈限制性能的范围内允许最大线程数。
5.1.2 最佳线程数
最优线程数:对应Speedup norm. to ACMP最大值和最小值的差。
最优线程数与ACMP配置相关联,我们用每一对应用—配置模拟所有可能的线程数,报告结果得到最小的执行时间。
除sqlite以最大线程运行,其他都以预算范围为8个内核为基准。Sqlite的临界部分限制了只能用4个线程,相比其他的加速机制有很多好处。在所有执行中,只有Sqlite有唯一的明显的临界部分,ACS和BIS能提供同样的性能提高。
随着争论的增加,对最临界瓶颈加速的效果显得尤为重要。BIS主动识别和加速瓶颈防止项目产生更多的线程,ACS不允许加速临界部分,甚至不会影响它的线程等待时间。还有BIS对重要的瓶颈变化有良好的适应性,但是ACS和FDP保持决定,使周期固定且较长。所以BIS优于ACS和FDP。
BIS比ACS加速更多的瓶颈,可以提高核心对核心的缓存失误。由于这些瓶颈平均只有52个指令长度,加速时不能克服缓存错过点导致的错误,所以BIS性能比ACS稍慢一些。BIS能够提高tsp的性能,减少缓存失误而引起的瓶颈。
综上,BIS比其他所有机制提高性能的能力都强。
问题:
1、bottleneck瓶颈和barriers障碍,两者有什么区别?
2、Writing correct parallel programs is already a daunting task应该是什么意思?(我自己觉得可能是写一个调整的对比程序是件很困难的事或写一个正确的类似的程序是件很气馁的事)
3、介绍中说有种解决办法可以在执行时间内识别和移动瓶颈而不需程序员的努力,可以提高程序性能和可量测性还能减少程序员的工作量,这种解决方法是怎么解决问题的,没看懂!
4、32-entry、S-entry中的entry应该是什么意思?
5、Table 4中的BIS和其他的对比除了有多个内核之外还有什么优势,没完全看明白~
6、Table 6没看懂什么意思!
7、Pagemine部分:文章中的内容和figure 6的图没完全理解~
8、Therefore, SCMP performs the best because the loss of throughput on the configurations with a large core is greater than the benefit of acceleration.不是说SCMP执行的最好吗?为什么说明了BIS好?