首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多核处理器真的并行执行吗?

多核处理器真的并行执行吗?
EN

Stack Overflow用户
提问于 2022-06-29 19:48:33
回答 2查看 83关注 0票数 -3

我正在处理线程和相关的主题,如:进程,上下文切换.我知道,在一个拥有一个多核处理器的系统上,多个进程的实际工作是不真实的。我们只是对这样的工作产生了幻觉,因为过程上下文的转换。

但是,在一个进程中运行在多核处理器上的线程又如何呢?他们真的同时工作,还是也只是这种工作的幻觉?有两个硬件核的处理器一次可以工作在两个线程上吗?如果不是,在多核处理器中有什么意义?

EN

回答 2

Stack Overflow用户

发布于 2022-06-30 02:33:25

有两个硬件核的处理器一次可以工作在两个线程上吗?

是的,..。

...But,想象一下你在维多利亚时代,雇了一群职员来做复杂的计算。他们需要的所有数据都在一本书里,他们应该把所有的结果写回同一本书。

书就像电脑的内存,书记员就像单独的CPU。由于任何时候只有一位职员可以使用这本书,所以似乎没有必要拥有一本以上的书.

..。除非你给每个职员一本记事本。他们可以走到书前,复制一些数字,然后从自己的记事本上工作一段时间,然后回来把记事本中的部分结果复制到书中。这样,其他职员就可以在任何一个职员在读书的时候做一些有用的工作。

记事本就像计算机的一级缓存(与单个CPU相关联的高速内存的https://en.wikipedia.org/wiki/Cache_(computing%29)—relatively小区域),这些缓存包含已经读取或需要写回主内存的数据副本。计算机硬件根据需要自动在内存和缓存之间复制数据,因此程序不一定需要知道缓存甚至存在。(见一致性)

但是,程序员应该意识到:如果您可以构造您的程序,以便不同线程花费大部分时间读取和写入私有变量,并且相对较少地访问与其他线程共享的变量,那么大多数私有变量访问将不会比L1缓存更深入,并且线程将能够真正并行运行。另一方面,如果线程都试图同时使用相同的变量,或者如果线程都试图迭代大量数据(太大,无法适应缓存中的所有数据),那么它们并行工作的能力就会小得多。

另请参阅:

层次结构

票数 1
EN

Stack Overflow用户

发布于 2022-06-29 21:51:08

多个核心实际上并行执行工作(至少在所有主流的现代CPU体系结构上是这样)。进程有一个或多个线程。操作系统调度器将活动任务(通常是线程)调度到可用的核心。当有比可用核心更多的活动任务时,操作系统使用抢占,因此在每个核心上并发执行任务。

在实践中,软件应用程序可以执行同步,这可能会导致某些内核在给定时间内处于不活动状态。硬件操作也可能导致这种情况(例如。等待检索内存数据,执行原子操作)。

此外,在现代处理器上,物理核通常被分割成多个硬件线程,每个线程可以执行不同的任务。这被称为SMT (又名超线程)。在最近的x86处理器上,同一核的两个硬件线程可以同时并行执行两个任务。任务可以共享物理核心的部分,如执行单元,因此对于某些任务(通常不是完全使用处理器核的任务),使用2个硬件线程可以比1更快。

有两个硬件线程不能真正并行运行,但在低粒度的情况下并发运行仍然有利于性能。事实上,这种情况在很长一段时间内(在过去十年)都是如此。例如,当任务被延迟绑定时(例如。等待从RAM中检索数据),可以安排另一个任务来完成一些工作,从而提高了总体效率。这是SMT的最初目标。对于同一核心上的抢占任务也是如此(尽管粒度需要大得多):一个进程可以执行网络操作并被抢占,因此另一个进程可以在再次被抢占之前完成一些工作,因为从网络接收数据。

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

https://stackoverflow.com/questions/72807062

复制
相关文章

相似问题

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