相关疑难解决方法(0)

多CPU,多核和超线程

有人可以向我推荐一些文档来说明多CPU,多核和超线程之间的区别吗?我总是对这些差异以及不同场景中每个架构的优缺点感到困惑.

编辑:这是我在网上学习并从别人的评论中学习后的当前理解; 有人可以评论评论吗?

  1. 我认为超线程是其中最劣质的技术,但价格便宜.其主要思想是重复寄存器以节省上下文切换时间;
  2. 多处理器优于超线程,但由于不同的CPU位于不同的芯片上,不同CPU之间的通信延迟比多核更长,并且使用多个芯片,与多核相比,费用更高,功耗更高;
  3. 多核将所有CPU集成在一个芯片上,因此与多处理器相比,不同CPU之间的通信延迟大大降低.由于它使用一个芯片来容纳所有CPU,因此它消耗的功率更低,并且比多处理器系统便宜.

乔治,提前谢谢

multicore smp hyperthreading

77
推荐指数
1
解决办法
3万
查看次数

多个线程和CPU缓存

我正在使用多个线程在C中实现图像过滤操作,并使其尽可能优化.我有一个问题:如果一个内存被thread-0访问,并且如果同一个内存被thread-1访问,它是否会从缓存中获取它?这个问题源于这两个线程可能运行到CPU的两个不同核心的可能性.所以另一种方法是:所有内核是否共享相同的公共缓存?

假设我有如下的内存布局

int输出[100];

假设有2个CPU核心,因此我产生两个线程同时工作.一种方案可以是将内存分成两个块,0-49和50-99,并让每个线程在每个块上工作.另一种方法是让线程0在偶数索引上工作,比如0 2 4等等.而另一个线程工作在奇数索引上,比如1 3 5 ......这个后来的技术更容易实现(特别是对于3D)数据)但我不确定我是否可以通过这种方式有效地使用缓存.

c multithreading caching

18
推荐指数
2
解决办法
1万
查看次数

什么时候CPU可以忽略LOCK前缀并使用缓存一致性?

我原本认为缓存一致性协议(如MESI)可以提供伪原子性,但仅限于单个内存加载/存储指令.如果我正在执行获取,修改,写入指令组合,单独的MESI将无法在第一条指令到最后一条指令中强制执行原子性.

但是,英特尔参考手册第3a卷第8节说:

8.1.4 LOCK操作对内部处理器高速缓存的影响

对于P6和更新的处理器系列,如果在LOCK操作期间被锁定的存储器区域被高速缓存在执行LOCK操作作为回写存储器并且完全包含在高速缓存行中的处理器中,则处理器可能不会断言总线上的LOCK#信号.相反,它将在内部修改内存位置并允许其缓存一致性机制,以确保以原子方式执行操作.此操作称为"缓存锁定".缓存一致性机制自动防止缓存相同内存区域的两个或多个处理器同时修改该区域中的数据.

http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-3a-part-1-manual.pdf

这似乎与我的理解相矛盾,暗示LOCK指令不需要使用,因为可以使用缓存一致性?

cpu concurrency x86 multithreading caching

6
推荐指数
1
解决办法
998
查看次数

操作系统如何使用多个CPU内核

有很多文章讨论多核神话。为了真正受益于多个内核,需要编写并行算法。他们中许多人提到阿姆达尔定律。

为了简单起见,假设我们有一台带有4核商品CPU的台式计算机。并假设目标是提高我们的应用程序性能以及整体系统性能。

我想知道如何使用CPU内核来执行任务。

  • 是否将单个进程的线程分配给所有内核
  • 或者将来自不同进程的线程安排在不同的内核上运行。

如果是后者,那为什么还要讨论神话呢?即使所有进程都是单线程的,多任务OS也不总是受益于多核CPU吗?来自同一进程的线程是否更有可能在多个内核上同时调度?

  • 有哪些重要因素?CPU缓存可能吗?可能与某些应用程序相关?为什么?
  • 您为什么要使用并行库/算法?毕竟,CPU资源在所有正在运行的进程之间共享,并且总是有足够的资源。

是否有一个“主动过程”概念?即,最受调度程序关注的过程。如果是这样,那么此过程通常会引起多少关注?

performance multithreading operating-system multicore

-3
推荐指数
1
解决办法
2046
查看次数