首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解多核SMP系统

理解多核SMP系统
EN

Stack Overflow用户
提问于 2012-05-13 20:59:53
回答 1查看 669关注 0票数 4

我试图了解多核系统是如何工作的,以及如何为具有多核的系统编写高效的程序。我知道这是个很难的话题,但我对最快的解决方案很感兴趣。

首先,我试图了解线程是如何工作的。很明显,在大多数情况下多线程可以显着地提高性能。根据页面,这就是多线程的工作方式:

但是为什么在N线程之间切换比只一个一个地运行N线程要快呢?线程如何在只有一个CPU的系统上工作?

接下来,点或多核编程是什么?我假设重点是在内核之间拆分线程,并在它们之间拆分任务?但是,如何在4CPU的系统上平分8个线程呢?

我是否必须使用(cpu_affinity)将threads/processes拆分为处理器亲和力?我可以使用系统上的pthread_create和4个CPU创建4个线程来在每个CPU上运行每个线程吗?

超线程化是如何起作用的,它到底有什么帮助?如何将CPU缓存编程用于多核系统?

为什么像MySQL这样的大型老项目很难充分利用多CPU系统的优势呢?

我对这个问题的理论感兴趣,也对Linux系统的实际解决方案/示例/项目/书籍/文章感兴趣(使用C)。

我知道这是一个越来越重要的话题,我希望我不仅仅是一个感兴趣的人。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-13 21:06:07

切换N个线程和一个接一个运行N个线程之间的区别是,当线程暂时不能取得进一步的进展时会发生什么。如果您切换了N个线程,而其中一个线程暂时无法向前推进,假设它正在等待从磁盘读取数据,则另一个线程可以向前推进。如果您完全按顺序运行它们,那么当线程等待磁盘I/O完成时,CPU将被浪费。

超线程通过允许您更充分地利用CPU核心执行资源而有所帮助。例如,如果线程没有做任何浮点运算,那么该核心的浮点单元就会被浪费掉。使用超线程,另一个线程可以使用这些执行单元.

在一个典型的现代核心上,操作需要很多时钟周期,许多操作一次正在进行中。这意味着核心通常有许多额外的执行资源,在任何特定的时刻都无法使用。超线程允许使用更高比例的执行资源(桶移位器、加法器、逻辑单元、分支单元等)。通常,超线程可以提高10%到15%的性能.好处并不大,因为线程还会窃取彼此的执行资源,污染对方使用缓存,等等。

CPU缓存是自动使用的,您通常不需要做任何特殊的事情来使用它。也许最常见的例外是处理错误共享或缓存ping-ponging。

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

https://stackoverflow.com/questions/10575208

复制
相关文章

相似问题

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