【发布时间】:2016-03-18 16:52:15
【问题描述】:
多个线程在 CPU 的多个内核上并行运行。它们可以同时访问主存吗?
【问题讨论】:
-
也许吧。取决于地址、访问宽度、内存架构,通常情况下,如果没有硬件锁定的帮助,就不能依赖它。
标签: multithreading shared-memory cpu-architecture hardware-acceleration
多个线程在 CPU 的多个内核上并行运行。它们可以同时访问主存吗?
【问题讨论】:
标签: multithreading shared-memory cpu-architecture hardware-acceleration
主内存和共享的最后一级缓存读取带宽是多个内核竞争的共享资源,但是是的,读取相同内存字节的多个读取器通常比从不同页面读取的多个读取器更快地完成。 (混合写入时不正确。)
如果共享内存区域足够小,以至于它在每个核心的私有缓存中都很热,那么每个核心都可以以非常高的速度从中读取。写作会减慢其他读者的速度,尤其是。其他作者(参见Are cache-line-ping-pong and false sharing the same?)。
如果不使用任何类型的锁定,其他阅读器不会减慢很多,而是依靠lockless algorithms 来避免由于竞争条件导致的错误。这就是为什么与仅使用锁定或生产者-消费者标志相比,无锁编程有时值得(大)挑战以使其正确。
【讨论】:
memcpy()-ed 输出消息,所以我认为除非 memcpy() 以某种方式序列化,否则不会有太多指针追逐.