【问题标题】:False Sharing and cache alignment on multiprocessor system多处理器系统上的错误共享和缓存对齐
【发布时间】:2017-04-20 15:43:38
【问题描述】:

我正在尝试了解虚假共享和缓存对齐以及它对多核系统性能的影响。这是我的案例,我正在尝试从高层次上理解。

Threads : 2 
CPUS/Cores : 4
Locks : 1 per each Thread T1, T2
Data Structures : Each thread has 32k Size Structure which has several nested arrays and structures.
Language : C 

我有 2 个线程和 4 个内核/CPU,可以在任何给定时间为 2 个线程提供服务。现在我的线程不断处理写入和读取它们各自的数据结构,这些数据结构相当大,接近 32K 大小.每个线程相互独立,不写入/读取其他线程的数据结构。线程始终持有其时间片开始的锁。

鉴于我的上述情况,是否存在虚假共享的可能性或任何可能阻碍性能的负面影响。我认为不会有任何错误共享,因为每个线程都在自己的数据结构上工作,并在线程时间片的一开始就锁定。

【问题讨论】:

    标签: multithreading caching cpu cpu-architecture false-sharing


    【解决方案1】:

    我可以想到两种不太可能发生错误共享的情况。

    假设您的线程 1 在核心 1 上运行。一段时间后,它迁移到核心 2 并继续执行。在核心 2 上运行时,它可能会尝试访问已经缓存在核心 1 中的缓存行。所以情况类似于缓存行在核心 1 和 2 之间共享。

    已从共享内存中分配了每个线程的数据结构。如果您不小心填充它们以与缓存行对齐,则一个数据结构的最后一个元素和下一个数据结构的第一个元素可能会分配在同一缓存行中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-30
      • 1970-01-01
      • 1970-01-01
      • 2015-03-15
      • 2012-05-30
      • 2015-04-07
      • 1970-01-01
      相关资源
      最近更新 更多