在多核CPU上可以真正同时执行2条指令吗

艾哈迈德(Forhad Ahmed)

假设x86多核PC架构...

可以说有2个内核(能够执行2个单独的指令流),并且CPU和RAM之间的接口是内存总线。

这样的机器上真的可以同时执行2个不同内核上调度的2条指令(访问某些内存)吗?

我不是在谈论2条指令正在访问同一内存位置的情况。即使在这两条指令正在访问完全不同的内存位置的情况下(并且还假设这些位置的内存内容不在任何高速缓存中),我也会认为单个内存总线位于CPU和RAM之间(非常常见)会导致总线仲裁电路将这2条指令序列化:

CPU0               CPU1
mov eax,[1000]     mov ebx,[2000]

这是真的?如果是这样,如果要运行的软件是多线程的但具有大量内存访问权限,那么拥有多个内核有什么好处?这些指令最后不会全部序列化吗?

另外,如果这是真的,那么LOCKx86中用于使内存访问指令原子化的前缀的含义是什么?

奥杜

您需要检查一些x86体系结构的概念来回答这一问题:

  • 投机执行(乱序)
  • 加载存储缓冲区
  • MESI协议
  • 负载转发
  • 记忆障碍

基本上,我的猜测是您的指令将绝对并行执行,但内存中的结果将是线程中的一个或另一个,而选举将由MESI硬件决定。

为了扩展答案,当您有多个流和单个数据(http://en.wikipedia.org/wiki/MISD)时,您需要期望序列化。请注意,如果您访问不同的内存地址(尤其是在NUMA系统上),可以缓解这种情况。

皓龙和新i7具有NUMA硬件,但是操作系统需要激活它们,并且默认情况下不是。如果您拥有NUMA,则可以利用一根总线的优势将一个内核连接到一个内存区域。但是,核心必须是该区域的所有者,如果核心本身分配了其区域,则应该对其进行验证。

在所有其他硬件中,将进行序列化,但是如果存储地址不同,则由于存储缓冲区和L2中间缓存,它们将不会影响写入性能(在写入结束前无需等待)。L2内容稍后提交给RAM,L2由内核提交,因此可以进行序列化,但不会妨碍可继续向前的CPU指令。

编辑有关LOCK问题的信息:lock x86指令与刷新负载存储缓冲区有关,以便其他内核可以获得指令管线中当前值的可见性。这比RAM写入问题更接近CPU。LOCK允许内核不在某些变量内容的本地视图上工作,因为如果没有它,CPU会假定它只能考虑一个线程就可以进行任何优化,这意味着它通常会将所有内容保留在寄存器中,而不依赖于缓存。在您考虑时load fowarding它可以比它稍微领先一点,或者更精确地称为store to load forwarding

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有什么办法可以在PHP中执行真正的ping吗?(没有执行程序)

来自分类Dev

同一HTML元素上可以有多个指令吗?

来自分类Dev

单核CPU可以实现真正的并发吗?

来自分类Dev

imul指令可以执行多精度有符号乘法吗?

来自分类Dev

多核CPU上的Redis性能

来自分类Dev

一秒钟可以执行多少条指令?

来自分类Dev

logback isDebugEnabled()在多核CPU上运行缓慢吗?

来自分类Dev

可以在Java中执行第一条指令之前由调度程序挂起线程吗?

来自分类Dev

CPU核心可以在Spark群集上同时运行多个应用程序吗?

来自分类Dev

是否可以不执行一条指令就退出RUNNABLE状态?

来自分类Dev

Node Child Process Spawn是否在多核CPU上运行?

来自分类Dev

我可以获取Java Runtime.getRuntime()。exec的真正完整执行的命令吗?

来自分类Dev

是否可以保证先执行别人之前的一条指令/声明?

来自分类Dev

可以使用其他指令执行“ PUSH”指令的操作吗?

来自分类Dev

haproxy可以在服务上同时执行tcp和http检查吗?

来自分类Dev

同一进程的两个用户级线程可以同时在多核CPU上运行吗?

来自分类Dev

多核处理器可以同时运行多个进程吗?

来自分类Dev

多核CPU上的Redis性能

来自分类Dev

logback isDebugEnabled()在多核CPU上运行缓慢吗?

来自分类Dev

CPU核心可以在Spark群集上同时运行多个应用程序吗?

来自分类Dev

如何检测在CPU上执行了哪些指令?

来自分类Dev

在执行相同操作的同时,Linux上的CPU过热,而Windows上的CPU过热

来自分类Dev

可以同时执行cron作业吗?

来自分类Dev

如何使用批处理同时执行2条命令

来自分类Dev

如何理解“扭曲中的所有线程同时执行同一条指令”。在GPU中?

来自分类Dev

可以在API上执行功能吗?

来自分类Dev

2条更新语句几乎同时执行

来自分类Dev

在linux内核上,atomic_inc、atomic_dec等的原子操作可以保护多核环境下的变量吗?

来自分类Dev

多个服务可以同时并行执行工作吗

Related 相关文章

  1. 1

    有什么办法可以在PHP中执行真正的ping吗?(没有执行程序)

  2. 2

    同一HTML元素上可以有多个指令吗?

  3. 3

    单核CPU可以实现真正的并发吗?

  4. 4

    imul指令可以执行多精度有符号乘法吗?

  5. 5

    多核CPU上的Redis性能

  6. 6

    一秒钟可以执行多少条指令?

  7. 7

    logback isDebugEnabled()在多核CPU上运行缓慢吗?

  8. 8

    可以在Java中执行第一条指令之前由调度程序挂起线程吗?

  9. 9

    CPU核心可以在Spark群集上同时运行多个应用程序吗?

  10. 10

    是否可以不执行一条指令就退出RUNNABLE状态?

  11. 11

    Node Child Process Spawn是否在多核CPU上运行?

  12. 12

    我可以获取Java Runtime.getRuntime()。exec的真正完整执行的命令吗?

  13. 13

    是否可以保证先执行别人之前的一条指令/声明?

  14. 14

    可以使用其他指令执行“ PUSH”指令的操作吗?

  15. 15

    haproxy可以在服务上同时执行tcp和http检查吗?

  16. 16

    同一进程的两个用户级线程可以同时在多核CPU上运行吗?

  17. 17

    多核处理器可以同时运行多个进程吗?

  18. 18

    多核CPU上的Redis性能

  19. 19

    logback isDebugEnabled()在多核CPU上运行缓慢吗?

  20. 20

    CPU核心可以在Spark群集上同时运行多个应用程序吗?

  21. 21

    如何检测在CPU上执行了哪些指令?

  22. 22

    在执行相同操作的同时,Linux上的CPU过热,而Windows上的CPU过热

  23. 23

    可以同时执行cron作业吗?

  24. 24

    如何使用批处理同时执行2条命令

  25. 25

    如何理解“扭曲中的所有线程同时执行同一条指令”。在GPU中?

  26. 26

    可以在API上执行功能吗?

  27. 27

    2条更新语句几乎同时执行

  28. 28

    在linux内核上,atomic_inc、atomic_dec等的原子操作可以保护多核环境下的变量吗?

  29. 29

    多个服务可以同时并行执行工作吗

热门标签

归档