1

同一进程(程序)的线程是否曾经分布在多个内核上?

在多核/处理器系统中,每个内核是否都可以访问整个 RAM,或者 RAM 是否在多个内核之间进行逻辑划分?

两个内核不可能处理不同的线程,每个线程都需要“锁定”对 RAM 地址的访问以保证原子性。在单个内核上,每条汇编代码指令都是原子的,因为原子性的量子是内核时钟周期。在多核上,这是不能假设的,因为虽然第一个核没有前进到下一条汇编指令,但另一个核可能已经弄乱了第一个核最初加载到寄存器中以进行处理的 RAM 中的值。

直觉上我知道这一定会导致多核系统出现问题,但我没有任何可靠的东西可以继续我的研究。谢天谢地,所有帮助都收到了。

4

2 回答 2

2

同一进程(程序)的线程是否曾经分布在多个内核上?

是和不是。检查您的操作系统的文档。

在多核/处理器系统中,每个内核是否都可以访问整个 RAM,或者 RAM 是否在多个内核之间进行逻辑划分?

所有内核都可以访问所有 RAM - 在合理范围内 - 并受操作系统设置的条件限制。在某些架构中,单个 CPU 是系统某些方面的“看门人”。请检查您的操作系统和系统架构的文档。

两个内核不可能处理不同的线程,每个线程都需要“锁定”对 RAM 地址的访问以保证原子性。在单个内核上,每条汇编代码指令都是原子的,因为原子性的量子是内核时钟周期。在多核上,这是不能假设的,因为虽然第一个核没有前进到下一条汇编指令,但另一个核可能已经弄乱了第一个核最初加载到寄存器中以进行处理的 RAM 中的值。

当然。请检查您的操作系统的文档 - 以及用户应用程序的锁定原语。

直觉上我知道这一定会导致多核系统出现问题,但我没有任何可靠的东西可以继续我的研究。谢天谢地,所有帮助都收到了。

有一些关于 Linux 操作系统的书籍和文档,对于像您这样对这些原则感兴趣的人来说可能是不错的读物(如何从Linux 内存屏障开始)。我个人推荐“Solaris Internals”一书作为对多处理器操作系统的一个很好的描述。

于 2013-07-04T11:34:46.750 回答
0

我还要说一点 RTFM,因为你的问题很广泛,需要大量的教育性阅读材料。尤其是关于微处理器和并发性。(可以任意顺序阅读,甚至可以纠缠)

因此,您必须按以下顺序阅读:

  • cpu 执行管道
  • cpu缓存/分层内存
  • NUMA
  • 多线程编程

我们走吧。

中央处理器

这是一篇关于无序现代处理器的非常好的文章:

http://www.gamedev.net/page/resources/_/technical/general-programming/a-journey-through-the-cpu-pipeline-r3115
这很好,评论将为您提供进一步的学习链接。

考虑到您的问题以及如何制定它,了解更多关于 CPU 中真正发生的事情是非常重要的。

缓存

还有一些关于缓存如何工作的精彩文章,这将是上述文章(讨论管道)的完美补充:
===> http://lwn.net/Articles/250967/ <===
This previous link是链接

作为旁白,但会以更快的阅读方式说同样的话:
http ://www.hardwaresecrets.com/article/How-The-Memory-Cache-Works/481/1 http://web.cs.mun。 ca/~paul/cs3725/material/web/notes/node3.html

非常全面:
http ://en.wikipedia.org/wiki/CPU_cache

或者这个“初学者”语气,更容易阅读:
http ://arstechnica.com/gadgets/2002/07/caching/

NUMA

现在,关于您的“RAM 在内核之间划分”?问题,它确实可以在NUMA 系统中发生:http :
//msdn.microsoft.com/en-us/library/windows/desktop/aa363804
(v= vs.85).aspx NUMA 存在于 opteron 和核心 i7 处理器中,虽然仅在服务器配置上激活。但是这项技术是存在的(并且已经存在了很长时间)。

编程

然后这个是关于记忆障碍的:http :
//mechanical-sympathy.blogspot.jp/2011/07/memory-barriersfences.html

以下是关于同一进程的多个线程是否将在不同的 CPU 上运行的问题:
http
://www2.cs.ucy.ac.cy/carch/xi/papers/MigrationCAN.pdf 快速答案是“当然可以”,而且他们也会不时移动(迁移)。

关于无锁(你可能听说过),关于性能多线程编程的一个很好的观点的个人建议,它通过说来减轻无锁:

不保证无锁算法比使用锁的算法更快

这应该更多地进入人们的脑海:http:
//msdn.microsoft.com/en-us/library/windows/desktop/ee418650 (v=vs.85).aspx

然后我推荐这个(我自己的文章):
http
://www.gamedev.net/page/resources/_/technical/general-programming/multithreading-r3048 从某种意义上说,它的教育程度较低,对于已经警告过的程序员来说,它更多的是没有建立它的教学流程。但也许是一个很好的回顾。它也是我强烈建议您仔细阅读的优质链接。
值得注意的是 Alexandrescu 的无锁数据结构:http:
//erdani.com/publications/cuj-2004-10.pdf

好书!

于 2014-03-20T02:23:16.197 回答