0

让我们看一个琐碎的 CPU 绑定程序,例如暴力破解素数,它可能偶尔会将它们保存到 SD 卡中。

今天的程序效率低下包括解释和虚拟机等。所以为了速度,让我们把它们扔掉,并使用编译语言。

现在,虽然我们现在拥有可以直接在处理器上运行的代码,但我们仍然拥有操作系统,它将在不同进程之间多路复用、运行自己的代码、管理内存以及做其他会减慢程序执行速度的事情。

如果我们要编写自己的操作系统来单独运行我们的程序,我们可以期望看到什么加速因素?
我确信可能有许多变量,所以如果你愿意,请详细说明。

4

3 回答 3

5

看看 Return Infinity http://www.returninfinity.com/的产品(我不以任何方式加入),并进行实验。

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

在超过 TLB 或缓存大小的蛮力计算中,与必须进行基于 RAM 的转换表查找相比,您可以预期大约 5-15% 的性能提升 - 代价是每个软件错误都完全不受保护(您可以锁定一些静态页面与整体链接,你)。

在高带宽工作中,尤其是在有大量小消息传递的情况下,您可以通过进入内核空间轻松获得 500% 的加速,或者通过完全删除(多任务)操作系统,或者通过将应用程序加载为内核驱动程序,也绕过了整个抽象。我们已经能够将 MAC 层 ping 的网络延迟从 18us 降低到 1.3us。

在适合 L1 缓存的计算上,我预计改进最小(大约 1%)。

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

于 2013-05-05T18:52:29.230 回答
1

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

只是操作系统“空闲”不会(不应该)占用 CPU 的大部分处理能力。如果是,您需要更好的机器、更好的操作系统、格式或这些的某种组合。

另一方面,如果您正在运行一堆其他资源密集型的东西,显然可以期望通过运行其他东西来加快速度。

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

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

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

根据我的经验:

不是最科学或最可靠的结果,但大多数时候当我在 Windows 上打开任务管理器时,所有操作系统进程都低于 CPU 的 1%。

于 2013-05-05T18:37:47.193 回答
0

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

当超级计算机过大,但多核 CPU 功率不足,并且您的算法可并行化时,请考虑将其调整为 GPGPU。通过在 GPGPU 上执行 CPU 密集型任务,超级计算机解决方案的许多好处都可以以更低的成本以更低的形式获得。

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

于 2013-05-05T19:04:54.833 回答