gpt4 book ai didi

linux - 在 x86-64 上并发访问非共享缓存中同一缓存行中的元素

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:10:16 26 4
gpt4 key购买 nike

假设我有以下代码:

int x[200];

void thread1() {
for(int i = 0; i < 100; i++)
x[i*2] = 1;
}

void thread2() {
for(int i = 0; i < 100; i++)
x[i*2 + 1] = 1;
}

假设页面在 Linux 中配置了默认写入缓存策略,那么代码在 x86-64 内存模型中是否正确(根据我的理解)?此类代码对性能有何影响(据我了解 - 无)?

附言。至于性能 - 我最感兴趣的是 Sandy Bridge。

编辑:正如预期的那样 - 我想从不同的线程写入对齐的位置。我希望完成后的上层代码和屏障在 x 中包含 {1,1,1, ...} 而不是 {0,1,0, 1,...{1,0,1,0,...}

最佳答案

如果我理解正确的话,写操作最终会通过监听请求传播。 Sandy Bridge 在内核之间使用 Quick Path,因此窥探不会影响 FSB,但会使用更快的互连。由于它不是基于写入时缓存失效,因此它应该“相当”快,尽管我无法找到冲突解决的开销是多少(但可能低于 L3 写入)。

Source

编辑:根据Intel® 64 and IA-32 Architectures Optimization Reference Manual clean hit 有 43 个周期的影响,dirty hit 有 60 个周期的影响(相比之下,L1 的正常开销为 4 个周期,L2 为 12 个周期,L3 为 26-31 个周期)。

关于linux - 在 x86-64 上并发访问非共享缓存中同一缓存行中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7283733/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com