多线程进程上多核还是单核速度翻倍?

Multi-thread process on multi-core or single-core double the speed?

假设我有一个由两个 理想情况下 独立任务组成的进程(理想情况下,消除通信开销)。在 3GHz 速度的单核处理器或 1.5GHz 速度的双核处理器上执行速度会更快吗?

当然,在双核处理器的情况下,这项工作非常适合并行化。而对于单核,这两个任务将时间共享

更新: 问题换句话说

速度加倍的单核处理器总是比双核处理器更好?

理想情况下独立的 2 个任务 运行在不理想的 OS 上运行 Windows 2012 将 运行 在 1.5GHz 的 2 个内核上比在 3GHz 的 1 个内核上更快,因为消除线程上下文切换开销。

不幸的是,理想的独立任务非常少。

发布的问题严重不明确。首先,它似乎将性能与处理器频率混淆了。即使使用相同的核心微体系结构,内存延迟也不会固定在周期计数中。遍历十亿项链表是一种(人为的)工作负载,它依赖于内存延迟,其中两个并行 "half-speed" 线程会比时间切片更快。

如果较低的频率不是产品合并、节能配置等的结果,而是来自较浅的管道(宽度相同),那么 "slower" 处理器将有一个较低的分支错误预测惩罚和相同缓存容量的较低周期延迟,导致大多数工作负载上每个周期的指令数更高。

即使使用相同的微架构,两个内核也将避免缓存预热上下文切换开销。上下文切换的成本不仅仅是调用 OS、运行 和 OS 调度程序所花费的时间(在两个内核上只有两个活动线程,OS 调度程序开销会稍微低一些,因为没有其他就绪的线程,但会有两倍的定时器中断)和交换寄存器内容。 (如果运行在批处理模式下,这样的上下文切换开销将被避免。)

另一个需要考虑的因素是两个任务是否遇到了独立的瓶颈。例如,如果一个任务计算密集度极高,而另一个任务受主内存带宽限制,那么 运行 并行处理它们可以提供比时间分片更好的性能;有了时间片,内存带宽潜力在计算密集型时间片期间未被使用。

还有一个因素是对受限资源的干扰。例如,DRAM 可能会发生存储体冲突,这会大大降低有效带宽。如果内存寻址和时序恰好在并行操作期间引起最大冲突,则有效带宽将减少。共享的最后一级缓存中的有限关联性可以产生类似的效果。

较新的处理器也往往受热限制,因此如果在电源病毒条件下不能保证该频率,则双频处理器可能无法在最大利用率下维持该频率,而替代的双核处理器系统可能不会遇到功率密度限制。