如果我在多线程程序中使用线程本地存储,是否会减少缓存未命中?
编辑: 由于每个线程都有自己的内存池,因此最后访问的内存更可能仍在CPU缓存中吗?
答案 0 :(得分:3)
缓存缺少比更少?
TLS只是确保不同线程对不同数据进行操作的众多方法之一(显而易见的是将每个线程的数据放在自己的堆栈上)。
如果您的线程没有写入相同的数据(因为这会使所有其他内核的相应缓存行无效),您将获得更好的缓存行为,但是您使用哪种方法来确保线程对不同的数据进行操作在这方面是无关紧要的。
(但是还有其他与TLS相关的开销。这不是魔术,它不是灵丹妙药。大多数时候,这是错误的解决方案)
答案 1 :(得分:0)
不,因为缓存在线程池大小方面没有真正组织,所以它们独立于您正在考虑的选择。