![]() |
1
13
对内存中的数据进行了一个非常简单的空间更改:
在我的双核机器上运行时间更快。 这将证实它打算测试的怀疑——在两个单独的线程中,您正在改变同一缓存线上的值,因此存在缓存争用。药草萨特 'machine architecture - what your programming language never told you' talk 如果你有时间的话值得一看,如果你还不知道的话,他会在1:20左右开始演示错误的分享。 计算出缓存线的大小,并创建每个线程的数据,使其与之对齐。 将线程的所有数据plock到一个结构中,并将其对齐,这样做更简单:
具有
或者,您可以使用双倍的缓存线大小,并使用malloc—额外的填充可以确保可变内存在单独的行上,因为malloc是16(IIRC)而不是64字节对齐的。 (我将迭代次数减少了10倍,而不是拥有一台愚蠢的快速机器) |
![]() |
2
1
我不知道这是否相关-但我看到了一个非常相似的行为(两个线程的速度比一个线程慢很多)。我基本上改变了:
到A
并且“固定”了它(现在2个线程的速度几乎是原来的两倍——例如19秒而不是35秒)。
我不知道问题可能是什么——锁定或缓存内部的一致性
|
![]() |
MaPo · Linux,设置锁定ICMP_过滤器选项 4 月前 |
![]() |
user2138149 · 双栈网络服务器无法按预期处理ipv4请求 4 月前 |
![]() |
Marco · PyCharm Linux系统文件上os.stat异常 5 月前 |