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