2013-05-05 63 views
0

让我们来看一个微不足道的CPU绑定程序,比如暴力破解素数,这可能偶尔会将它们保存到SD卡。使用专门构建的操作系统的性能增益

当今程序中的低效率包括解释和虚拟机等等。所以,为了提高速度,我们把它们扔掉,然后使用编译语言。

现在,虽然我们现在有可以直接在处理器上运行的代码,但我们仍然拥有操作系统,它将在不同进程之间复用,运行自己的代码,管理内存并执行其他操作,这会减慢我们的计划。

如果我们要编写自己的操作系统来运行我们的程序,那么我们期望看到什么样的加速比?
我确定可能有一些变量,所以请详细说明,如果你想。

+1

你是如何得出结论:虚拟机和解释语言是无效的? – aqua 2013-05-05 18:11:50

+0

@aqua一般来说,他们需要更长的时间来加载并且有更大的开销。为了这个问题,您可以使用任何语言来保持与ASM相似的处理速度。 – user1277170 2013-05-05 18:25:58

+0

我认为你的假设是无效的。例如,Python是一种解释型语言,但Python本身可以从C语言中获益。虚拟机也有自己的优点和缺点 - 调用虚拟机效率低下是一个糟糕的IMO声明。 – aqua 2013-05-05 23:20:06

回答

5

看看产品返回Infinity http://www.returninfinity.com/(我不以任何方式附属)和实验。

我自己的超级计算经验表明,通过运行平坦内存模型以及缺乏内核和用户空间之间的上下文切换,可以并且确实加快了一些任务 - 特别是与消息传递有关的任务 - 跳过TLB(几乎完全)在网络(MAC级别,甚至没有TCP,为什么打扰),以及蛮力计算(由于缺乏内存管理)。

在超出TLB或缓存大小的蛮力计算上,与基于RAM的转换表查找相比,性能增益可能会提高5-15% - 这样做的代价是每个软件错误都完全没有遵守(你可以用单片链接静态地锁定一些页面,你)。在高带宽的工作中,尤其是在大量小型消息传递的情况下,通过进入内核空间,您可以轻松获得甚至500%的加速,无论是通过完全删除(多任务)操作系统,还是通过加载应用程序作为内核驱动程序,也绕过了整个抽象。我们已经能够将MAC层ping的网络延迟从18us降低到1.3us。

对于L1缓存内部适合的计算,我预计最小的改进(大约1%)。

这一切都很重要吗?是和不是。如果您的硬件成本大大超出了您的工程成本,并且您已经完成了所有可以考虑的算法改进(更好的是,证明所完成的计算完全是结果所需的计算!) - 这可以带来有意义的性能优势。一台价值约800万美元的超级计算机的额外3%(整体平均成功率),不包括硬件摊销,价值24万美元。足够支付一个月的工程师来优化它运行的最常见的任务:)。

+0

我是新来的;什么是TLB? – 2013-05-05 18:57:17

+1

TLB =翻译旁视缓冲区。一个特殊的表格用于将虚拟内存地址映射到物理内存中的地址。 TLB高速缓存该表的一部分,因此可以快速高效地将内存地址从虚拟映射到物理映射。 – Virtlink 2013-05-05 18:59:35

+0

@Virtlink:谢谢。 – 2013-05-05 19:05:59

1

假设你正在运行一台体面的机器并且操作系统没有做太多其他事情:不是一个很大的因素,我预计改进不到10%。

只是操作系统'怠速'没有(不应该)占用CPU的大部分处理能力。如果是这样,你需要更好的机器,更好的操作系统,格式或这些组合。

另一方面,如果你正在运行一堆其他资源密集型的东西,显然希望这可以通过运行其他东西的而不是加速很多。

如果您不是超级用户,您可能会惊讶地发现后台运行大量(非操作系统)进程,这些进程更有可能占用CPU的处理能力,即操作系统。

稍微偏离主题但相关,请记住,如果您运行8个内核,则可以在完美的世界中通过多线程将速度提高8倍。

期待一个方式从已知问题的解决方案较大改善和更好地利用数据结构和算法,以及,在较小程度上,语言和微优化的选择。

从我的经验:

不是最科学的或可信的结果,但最重要的,当我打开任务管理器在Windows上的时候,所有的OS进程低于CPU的1%。

0

有一个超级计算机的答案,并且已经有了多核心答案,所以这里是GPGPU答案。

当一台超级计算机过度杀毒,但多核CPU处于供电不足状态时,您的算法可以明显地并行化,请考虑将其适配到GPGPU。通过在GPGPU上执行CPU密集型任务,超级计算机解决方案的许多优点都可以通过简化成本的方式实现。

Here是我在实施执行去年的分析链接,和调整,使用计算能力2.0 NVIDIA显卡,CUDAfy和C#蛮力解决旅行商问题。