首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >c++ std::异步:在4个核心上比8个核心更快

c++ std::异步:在4个核心上比8个核心更快
EN

Stack Overflow用户
提问于 2017-12-27 08:59:53
回答 1查看 359关注 0票数 2

我有16000份工作要做。

每项工作都是独立的。没有共享内存,没有进程间通信,没有锁或互斥锁。

我在16点06分。英特尔核心c++11 i7-8550UCPU@ 1.80GHz×8

我使用std::异步在内核之间拆分作业。

如果我把作业分成8个(每个核2000),计算时间是145。如果我将作业分成4个(每个核4000个),计算时间是60。

在两种情况下,减少后的输出是相同的。

如果我在计算过程中监视CPU (仅使用htop),事情就会如期而至(在第一种情况下使用8核,在第二种情况下仅使用4核)。

我很困惑为什么4个核的处理速度会比8快得多。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-27 09:16:44

i7-8550U有4个核心和8个线程。

有什么关系?引用如何-对极客

超线程是英特尔第一次尝试将并行计算引入到消费PC上.早在2002年,它就开始在桌面CPU上使用奔腾4 HT。Pentium 4当天的功能只有一个CPU核心,所以它一次只能执行一个任务--即使它能够足够快地切换到多任务处理的程度。超线程试图弥补这一点。 一个具有超线程的物理CPU内核显示为操作系统的两个逻辑CPU。CPU仍然是一个CPU,所以它有点欺骗。当操作系统为每个内核提供两个CPU时,实际的CPU硬件对于每个核心只有一组执行资源。CPU假装它有比它更多的核心,并且它使用自己的逻辑来加速程序的执行。换句话说,操作系统被诱使看到每个实际CPU核心有两个CPU。 超线程允许两个逻辑CPU核心共享物理执行资源.这可以在一定程度上加快速度--如果一个虚拟CPU被搁置并等待,另一个虚拟CPU可以借用它的执行资源。超线程可以帮助加快您的系统,但它远远不如拥有实际的额外核心。

通过把工作分成多个核心而不是可用的--你付出了很大的代价。

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

https://stackoverflow.com/questions/47989178

复制
相关文章

相似问题

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