多核到单核仿真(核心分组)



今天只是我脑海中掠过的东西。例如,是否有可能将 4 个内核组合成模拟单核 CPU,其 Ghz 是这 4 个内核的四倍?

的意思是,假设我有一个3Ghz的四核CPU。在此仿真中,模拟的CPU将是单核CPU,但具有12Ghz的稳定功率。

我 99% 确定这是不可能的,但我很好奇,阻止一个人实现这样的事情的障碍是什么?

谢谢。

主要障碍与自动并行化编译器相同:很难将为串行执行编写的程序转换为执行相同操作的并行程序。人类花了很多时间这样做,而机器也没有多大帮助。

将机器指令流视为串行程序。每条指令访问资源(寄存器、内存(,有时会更改它们。未来的指令"假设"前面的那些已经完成了对共享数据的更改。在指令的所有输入都可用之前,无法执行该指令。但是,如果将来的指令不依赖于当前正在处理的任何数据,则可以更早启动。

现代无序 CPU 扫描串行指令流,寻找独立于数据的指令,并将它们调度到处理器内的多个执行资源上。这是可能的,因为 a( 有一些可提取的并行性,b( 一切都在处理器内部紧密完成,并且可以快速做出决定。

首先,这种并行性本质上是有限的。如果您编写一个综合程序,其中每个后续指令都依赖于前一条指令(例如,所谓的"指针追逐"序列(,则无论 CPU 内有多少个并行执行单元可用,都不会提取并行性。如果您添加更多 CPU,显然无济于事。

其次,请记住,关于并行运行什么的决定必须在运行时完成,而来宾代码已经在运行。如果你对哪些块可以独立运行是安全的考虑太久,那么浪费在思考上的时间将超过实际运行东西所节省的时间。在单个CPU内部,有机会,因为一切都彼此如此接近。多个 CPU 甚至 CPU 内核彼此之间的距离要远得多,它们通过慢速内存进行通信,因此就如何并行化手头的当前任务做出运行时编程决策会太慢。

将所描述的"运行时"情况与"脱机"情况进行比较,当时软件编译器的任务是获取串行程序并从中生成并行代码。相对而言,它应该在世界上一直这样做。知道吗,经过 30+ 年的研究,他们仍然很糟糕

最新更新