全部博文(436)
分类: C/C++
2012-12-16 00:03:31
我们组采用了分工阅读的办法,因为都需要背景知识,所以前面的背景介绍部分我们都阅读了,我负责的部分是第二节。
本文主要介绍BIS,一种软硬件合作的识别和加速瓶颈的机制。
BIS可以通过测量线程在每一个瓶颈处需要等待的周期数量来甄别到底是哪些瓶颈降低了性能,然后通过使用一个或者多个在非对称芯片多处理(ACMP)上的高速内核来加速这些瓶颈。
应用程序性能的瓶颈:临界段,障碍,缓慢的流水线阶段。因为这些部分都必须要序列化执行。
瓶颈: 有线程竞争的代码段。
以前研究的不对称芯片多处理器并没有通用性和自适应性,只对部分瓶颈有加速作用。
加速临界段方法:只能加速一些特定临界段,却不能加速影响性能最大的临界段。
集合点方法:加速在并行区域中预期时间最长的线程,却只适用于静态规划。
基本法亏的流水程方法:通过分配线程给内核来实现平衡流水线上工作负载的阶段吞吐量和提高性能或减少功耗,但适应阶段不好,因为是基于软件实现的。
BIS方法:
在运行时,通过关键序列化瓶颈会使得其他线程等待最久这个特点来找到瓶颈,然后用一个或多个大的内核来加速他们。
软件方面:通过是同BottleneckCall 和BottleneckReturn指令来划定可能的瓶颈,用BottleneckWait指令来替换等待瓶颈的代码。
硬件方面:使用以上指令来测量每一个瓶颈导致的线程等待周期,然后用一个瓶颈来记录他们。有最高等待周期的瓶颈会被选出来加速。当执行一个BottleneckCall指令的时候,小内核会检查这个瓶颈是否已经被选择需要加速。若是则放入大内核调度缓存中,当执行瓶颈并遇到BottleneckReturn 指令时通知小内核。
无流水线下的负载ACS以及流水线下的负载FDP什么意思??
瓶颈的例子:
①阿姆达尔的串行部分:当只有一个线程时,放在最大的内核上,其他内核闲置。
②临界段:在给定时间内的一个临界段只有一个线程可以执行。
③障碍:一个遇到障碍的线程必须等所有线程都达到这个障碍才能一起继续执行。
⑤流水线阶段:一个流水线并行程序中,循环被分成运行在不同线程上的不同阶段。加速最慢的阶段才可以提高性能。(图不是太懂,S2加速两倍,吞吐量为什么就平衡了?即使加速两倍他不还是应该要等待S3的执行的完成吗?)
瓶颈是如何随着时间变化的:
在运行时对程序进行成功的加速需要动态的识别哪一段代码是现在的关键瓶颈并用大内核加速它。(第二个图完全没看懂)