让我们采用一个简单的CPU绑定程序,例如强制素数,这可能偶尔将它们保存到SD卡。
今天的程序效率低下包括解释和虚拟机等。因此,为了速度,让我们抛弃它们,并使用编译语言。
现在虽然我们现在拥有可以直接在处理器上运行的代码,但我们仍然拥有操作系统,它将在不同进程之间进行多路复用,运行自己的代码,管理内存以及执行其他会降低我们执行速度的操作系统程序
如果我们要编写自己的操作系统来运行我们的程序,我们可以期待看到什么样的加速因素?
我确定可能会有很多变量,所以请详细说明你是否愿意。
答案 0 :(得分:5)
通过Return Infinity http://www.returninfinity.com/查看产品(我不以任何方式加入),并进行实验。
我自己的超级计算经验表明,通过运行平面内存模型跳过TLB(几乎完全),加上内核和用户空间之间缺少上下文切换,可以并且确实加速了一些任务 - 特别是与消息传递相关的任务网络(MAC级别,甚至TCP,为什么还要麻烦),以及暴力计算(由于缺乏内存管理)。
在超过TLB或高速缓存大小的暴力计算中,与必须进行基于RAM的转换表查找相比,可以获得大约5-15%的性能提升 - 每个软件错误完全无人看守(您你可以用单片链接静态锁定一些页面,你可以。
在高带宽工作中,尤其是在大量小消息传递的情况下,通过完全删除(多任务)操作系统或加载应用程序,可以通过内核空间轻松获得500%的加速作为内核驱动程序,也可以绕过整个抽象。我们已经能够将MAC层ping的网络延迟从18us推迟到1.3us。
在适合L1缓存的计算中,我预计会有很小的改进(约1%)。
这一切都很重要吗?是的,不是。如果您的硬件成本远远超过您的工程成本,并且您已经完成了所有可以想到的算法改进(更好的是,证明完成的计算完全是结果所需的计算!) - 这可以提供有意义的性能优势。超级计算机额外3%(总体平均成功率)的电费约为800万美元/年,不包括硬件摊销,价值2400美元/年。足以支付工程师一个月来优化其运行的最常见任务:)。
答案 1 :(得分:1)
假设您正在运行一台体面的机器并且操作系统没有做太多其他事情:不是一个很大的因素,我预计会有不到10%的改进。
只是OS'空闲'没有(不应该)占用CPU的大部分处理能力。如果是,您需要更好的机器,更好的操作系统,格式或这些的组合。
另一方面,如果你正在运行一堆其他资源密集型的东西,显然希望通过而不是运行其他东西可以大大加快这一点。
如果您不是超级用户,您可能会惊讶地发现在后台运行了大量(非操作系统)进程,这些进程更有可能占用CPU处理能力OS。
稍微偏离主题但相关,请记住,如果您正在运行8个内核,那么在完美的世界中,您可以通过多线程将该过程加速8倍。
期望方式从已知解决方案到问题的更大改进,并更好地利用数据结构和算法,并在较小程度上选择语言和微观优化。
根据我的经验:
不是最科学或最值得信赖的结果,但在大多数情况下,当我在Windows上打开任务管理器时,所有操作系统进程都低于CPU的1%。
答案 2 :(得分:0)