【发布时间】:2019-12-18 15:44:38
【问题描述】:
首先,我在这里只找到了one question about std::hardware_destructive_interference_size and std::hardware_constructive_interference_size,这并不能回答以下问题:为什么有两个不同的值。两者都应该与缓存线大小相同。那么什么样的缓存架构可以强制要求有两个不同的值呢?
【问题讨论】:
-
"两者都应该与 cacheline-size 相同。" 应该吗?你能解释为什么它们应该是一样的吗?以一种不使用特定实现细节的方式?
-
表示仅共享单个高速缓存行的数据结构的最大大小的大小应与两个数据结构之间的最小差异相同,以防止错误共享。
-
就是我提到的那篇文章。但它并没有说明为什么这些尺寸不同。
-
据我了解,尺寸不需要不同。单独的定义仅涵盖它们可能不同的情况,即也涵盖异国情调的硬件。 (我必须承认我不会太努力地考虑硬件。我太忙了,无法让我的软件运行,希望没有 U.B.,甚至可能有性能);-)
-
这取决于最大可实现的对齐方式。如果它小于 L1 缓存行大小,则编译器无法确保变量存储在缓存行的开头。
标签: c++ multithreading std cpu-cache