2

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

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

我 99% 确定这是不可能的,但我很好奇,阻碍人们实现这一目标的障碍是什么?

谢谢。

4

1 回答 1

1

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

将机器指令流视为串行程序。每条指令都会访问资源(寄存器、内存),有时还会更改它们。未来的指令“假定”它们之前的指令已经完成了共享数据的更改。一条指令在其所有输入都可用之前无法执行。但是,如果未来的指令不依赖于当前正在处理的任何数据,它可能会更早开始。

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

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

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

将所描述的“运行时”情况与“离线”情况进行比较,即软件编译器的任务是获取串行程序并从中生成并行代码。相对而言,世界上所有的时间都可以做到这一点。并且知道什么,经过 30 多年的研究,他们仍然对此感到厌烦。

于 2018-01-22T15:48:21.800 回答