(2015年7月9日 多核

SIMICS 5多核加速器 - 提升性能,添加并行性

由雅各布Engblom

Jakob-engblom-Intro-Picture

头条新闻之一simics.5是多核加速器。有了多核加速器,我们可以使用多核主机来模拟紧耦合的多核目标。自从2008年Simics 4.0发布以来,Simics已经能够在多个主机核心上模拟多个离散的目标机器或机架,而Simics 5将这一功能引入了逻辑上的下一步,即拆分主板和soc。

执行方法的逻辑进展如下图所示(是的,这张图也在Simics 5的原始公告):

MCA-1

我们可以看到,关键是将目标系统逐步分割成更小的部分,以确保我们能够更快地完成工作量中最需要计算的部分。多机加速器在许多情况下工作得很好,但如果我们有一个系统,其中一个沉重负载的多核SoC在关键路径上,它基本上会退回到串行执行。有了多核加速器,工作负载现在可以跨多个主机线程分配,从而更快地推进执行。这是一个非常简单的想法,但却很难有效且正确地实现。

值得注意的是,即使多核主机是用于Simics Accelerator的关键推动器,我们就会在多个主机上运行Simics线程在工人集合安排中。没有将目标核静态分配给主机核,而是在可用主机线程上动态调度计算工作。这个系统有很多层,如下图所示:

mca-2

请参阅目标核心如何生成仿真工作,这取决于其当前负载非常不同的尺寸,然后通过SIMICS动态调度机制调度此工作的主机线程。然后,主机线程由主机操作系统上的硬件核心和超线程执行。

那么,它的规模有多大?很好,真的。有许多类型的工作负载、目标、目标操作系统和内存系统需要探索,但是对于计算绑定的工作负载,我们已经看到在具有8个可用来运行Simics的真实核心的主机上模拟8核Linux SMP目标时,几乎可以实现线性扩展(加速7倍)。在我个人的实验中,我经常在Haswell Core i5上实现2倍的加速(2核,每个线程2个),在Core i7上实现4倍的加速(4核,每个线程2个)。

因此,我们可以看到MCA提供提高模拟性能和缩放的能力,以解决曾经是用于SIMICS的瓶颈的工作负载。它不是灵丹妙药,但是当多核目标处于临界模拟路径上时,可以应用非常有用的额外性能技术。即使对于大多数串行工作负载,如操作系统靴子,我们也看到了具有平行斑点的案例 - 以及提供25%左右的加速度的多芯加速器,这仍然非常有用。

通过使用MCA,你可以学到一些关于性能的有趣东西。并行性和并行性能确实不是那么容易理解,尤其是无法预测。

特别引人注目的是,目标在基本的SIMICS JIT上运行越好,而且(英特尔架构)主机上的超线程的值越少。似乎是这样的事情发生了:当目标工作量与JIT编译器良好时,JIT编译器将创建具有很少的管道摊位和缓存未命中的代码,并将处理器管道繁忙。对于许多这样的线程并行运行,没有松弛可以被超线程利用。请记住,在当前的硬件中,超线程基本上是共享相同执行核心的两个指令流,这通常非常适用于大多数代码患缓存未命中和其他阻塞事件,其中其他超线程可以进入并保持管道工作(从而改善对硬件资源的小额额外投资显着性能)。通过SIMICS,这种有益的案例似乎相当罕见。The hyperthreads sometimes speed things up, but just as often they appear to be tripping over each other’s feet in their rush to get things through the pipeline – running a 4-core target using 2 host threads was faster than when using 4 host threads on a 2-core, 2-threads-per-core Core i5, for example. The paradoxical fact here is that if the fundamental JIT had been doing a worse job, the MCA scaling would have been better, as there would have been more slack for the hyperthreads to exploit – but overall performance would have been worse, of course. Fun stuff.

从用户的角度来看,有必要注意,需要单独为每个处理器架构启用多核加速器,因为目标并行同步语义必须映射到主机基元。在启动时,SIMICS 5支持英特尔,ARM和电源架构。

与已建立的多功序加速器不同,MultiCore Accelerator不是确定性的。这是一个最大化性能的必要级别,因为确定性化的实施遭受了明显的表现罚款。在实践中,这意味着为了使用SIMICS反向调试和重播调试,您需要在没有MCA的情况下运行 - 使用MCA定位工作负载并通过重型代码来获取重型代码,然后使用标准SIMICS来分析和调试。

增强的性能在SIMICS中始终是重要的,因为该性能决定可以在交互式用法给出的时间帧内模拟中有效地运行哪些软件负载,自动测试, 或者持续集成回车场。

以前的定义如何开发物联网系统
下一个如何开始使用嵌入式虚拟化