首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个操作系统进程可以在多核CPU上并行运行吗?

多个操作系统进程可以在多核CPU上并行运行吗?
EN

Stack Overflow用户
提问于 2016-02-26 02:39:28
回答 2查看 2.1K关注 0票数 2

因此,我开始讨论多核CPU是否允许并行执行独立的进程。

据我所知,每个内核允许执行不同的线程,但它们都必须属于一个进程。还是我错了?

我的理由是,虽然每个核心都有单独的寄存器和L1/L2缓存(取决于硬件),但它们都必须共享其他东西,如L3缓存或TLB (我对cpu架构了解不多,所以请随时纠正我)。

我试着寻找答案,但没有找到任何结果(也许这个问题太愚蠢了,哈哈)。

非常感谢。

EN

回答 2

Stack Overflow用户

发布于 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。下面的图片应该很有趣:

票数 1
EN

Stack Overflow用户

发布于 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那样快。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35635572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档