今天我脑子里传来的东西。例如,团队4个内核是否可以模拟单个核心cpu,其中4个核心的Ghz是其四倍?
我的意思是,假设我有一个3Ghz四核CPU。在此仿真中,仿真CPU将是单核CPU,但具有稳定的12Ghz功率。
我99%肯定这是不可能的,但我很好奇,阻止一个人做这种事情的障碍是什么?
感谢。
答案 0 :(得分:0)
主要障碍与自动并行化编译器相同:很难将为串行执行编写的程序转换为执行相同操作的并行程序。人类花了很多时间做这件事,机器也没有多大帮助。
将机器指令流视为串行程序。每条指令访问资源(寄存器,内存),有时会更改它们。未来的指令“假设”它们之前的那些已完成更改共享数据。在所有输入都可用之前,不能执行指令。 但是,如果将来的指令不依赖于当前正在处理的任何数据,则可以提前启动。
现代无序CPU扫描串行指令流,寻找与数据无关的指令,并将它们调度到处理器内的多个执行资源上。这是可能的,因为a)有一些可提取的并行性和b)一切都在处理器内紧密完成,并且可以快速做出决定。
首先,这种并行性本质上是有限的。如果你编写一个合成程序,其中每个后续指令将依赖于前一个指令(例如,所谓的“指针追逐”序列),无论CPU内部有多少并行执行单元,都不会提取并行性。如果添加更多CPU,显然无济于事。
其次,请记住,在运行时,必须在运行时做出并行运行的决定,而访客代码已在运行。如果你认为哪些块可以独立运行是安全的,那么浪费时间的思维将超过实际运行的东西所节省的时间。在单CPU内部,有可能因为一切都彼此如此接近。多个CPU甚至CPU内核相互之间的距离相当远,它们通过慢速内存进行通信,因此对如何并行化当前任务的运行时程序性决策来说太慢了。
当软件编译器负责接受串行程序并从中生成并行代码时,将描述的“运行时”情况与“离线”情况进行比较。相对而言,世界上所有的时间都会这样做。并且知道,经过30多年的研究,他们仍然在那里吮吸。