我正在尝试了解虚假共享和缓存对齐及其对多核系统性能的影响。这是我的情况,我试图在非常高的层次上理解。
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大小的数据结构。每个线程彼此独立,不写/读其他线程的数据结构。线程始终保持其时间片的锁定开始。
鉴于我的上述情况,是否存在任何可能妨碍性能的错误共享或任何负面影响的可能性。我假设不存在任何错误共享,因为每个线程都在自己的数据结构上工作,并在线程时间片的最开始处锁定。
答案 0 :(得分:0)
我可以想到两种不太可能发生错误共享的情况。
假设您的线程1在核心1上运行。过一会儿,它会迁移到核心2并继续执行。在核心2上运行时,它可能会尝试访问已在核心1中缓存的缓存行。因此情况类似于在核心1和2上共享的缓存行。
每个线程数据结构已从共享内存中分配。如果您不小心将它们填充以与高速缓存行对齐,则可以在同一高速缓存行中分配一个数据结构的最后一个元素和下一个数据结构的第一个元素。