因此,我开始讨论多核CPU是否允许并行执行独立的进程。
据我所知,每个内核允许执行不同的线程,但它们都必须属于一个进程。还是我错了?
我的理由是,虽然每个核心都有单独的寄存器和L1/L2缓存(取决于硬件),但它们都必须共享其他东西,如L3缓存或TLB (我对cpu架构了解不多,所以请随时纠正我)。
我试着寻找答案,但没有找到任何结果(也许这个问题太愚蠢了,哈哈)。
非常感谢。
发布于 2016-02-26 02:46:09
可以将多个进程的多个线程调度为在单个内核上运行。当然,在给定的时间,只有一个线程在内核上运行。在内核上运行的进程队列由调度器管理。一个好的调度器将为内核提供CPU受限进程和I/O受限进程的良好混合,以便机器中的所有组件都具有良好的负载平衡。
因此,多核CPU不仅允许并行执行进程,还允许并发执行进程。另一方面,单核CPU只能允许并行执行。在单核机器中没有并发性。
一个内核的所有资源都会被分配给当前在其上运行的线程/进程(虽然不是在超线程中)。如果我没记错的话,同时拥有多个进程的第一个资源是主内存或RAM。所有进程都使用RAM的某一部分,即使它们不在内核上运行。为了将进程加载到内核,通过将寄存器、地址空间和堆栈设置为进程所处的相同状态,从RAM加载进程控制块(PCB),当进程从内核卸载以给另一个进程时间时。
每个进程的时间量因few ms to a few hundred ms而异。与之相比,L1/L2高速缓存访问是几ns,而主存储器访问是几百ns。下面的图片应该很有趣:

发布于 2016-02-26 06:59:42
两个进程或线程可以在不同的核心上真正并发运行,前提是它们不会在电子级别的共享资源上竞争。
在英特尔芯片中,最明显的问题就是L3缓存和内存。如果你有两个或更多的英特尔芯片,它们通过QPI相互通信。虽然这允许CPU集群在SMP配置中操作,每个CPU都有自己的内存控制器,但如果线程想要从另一个芯片的内存中获取数据,这就变成了另一回事。
在AMD芯片中,每个核心都有一个内存控制器,而Hypertransport负责合成SMP配置。令人欣喜的是,这使得所有的内核几乎相同,甚至在多芯片系统中也是如此(这是芯片内部和外部的Hypertransport )。
Intel和AMD在创建体系结构方面都做得非常出色,这些体系结构可以最大限度地减少多核、对称多处理系统中发生的内存争用,而无需我们过多地考虑如何编写软件。如果你想最大限度地利用你的硬件,你可以考虑到底层的NUMA硬件架构进行编程,并且你可以(这真的很难)减少一些正在进行的争用。
其他可能会阻止真正的并发执行的事情是,如果有一个专门的子系统服务于多个核心。例如,UltraSPARC T1在8个内核之间共享一个浮点单元。显然,他们不能同时使用它!
FPGA通常被认为是用于FFT等可并行计算的好东西。然而,它们的内部内存有限,如果计算开始需要存储更多数据,则必须使用外部RAM。这立即限制了可实现的并行度,因为FPGA的不同部分开始竞争对外部RAM的访问。在这种情况下,FPGA是否是正确的选择是值得怀疑的;没有高级板载缓存的500 the访问RAM (仍然非常慢)的FPGA将不会像具有高级缓存和多内存控制器子系统的设计良好的CPU那样快。
https://stackoverflow.com/questions/35635572
复制相似问题