0

我试图了解错误共享和缓存对齐以及它对多核系统性能的影响。这是我的案例,我试图在非常高的层次上理解。

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 大小。每个线程相互独立,不写入/读取其他线程的数据结构。线程始终持有其时间片开始的锁。

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

4

1 回答 1

0

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

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

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

于 2017-04-20T21:20:38.107 回答