多处理器系统上的错误共享和缓存对齐



我试图理解错误的共享和缓存对齐及其对性能对多核系统的影响。

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个线程提供服务。。每个线程彼此独立,不编写/读取其他线程的数据结构。线程始终保持锁定时间切片。

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

我可以想到可能发生虚假共享的两个不太可能的情况。

假设您的线程1在核心1上运行。一段时间后,它迁移到核心2并恢复执行。当在Core 2上运行时,它可以尝试访问已在Core 1中缓存的缓存线。因此,情况类似于跨核心1和2的缓存线。

每个线程数据结构已从共享内存分配。如果您不小心地将它们与缓存线保持一致,则可以将一个数据结构的最后一个元素和下一个数据结构的最后一个元素分配在同一缓存线上。

最新更新