gpt4 book ai didi

c++ - 我什么时候应该使用_mm_sfence _mm_lfence和_mm_mfence

转载 作者:IT老高 更新时间:2023-10-28 23:01:47 30 4
gpt4 key购买 nike

我阅读了《英特尔优化指南,英特尔架构指南》。

但是,我仍然不知道何时应该使用

_mm_sfence()
_mm_lfence()
_mm_mfence()

谁能解释在编写多线程代码时应何时使用它们?

最佳答案

警告:我不是这方面的专家。我仍在尝试自己学习。但是,由于过去两天没有人答复,因此关于内存隔离栅指令的专家似乎并不多。所以这是我的理解...

英特尔是weakly-ordered内存系统。这意味着您的程序可以执行

array[idx+1] = something
idx++

但是对idx的更改在更改为数组之前可能是全局可见的(例如,对于在其他处理器上运行的线程/进程)。在这两个语句之间放置 标记可以确保将写入发送到FSB的顺序。

同时,另一个处理器运行
newestthing = array[idx]

可能已经为阵列缓存了内存并具有陈旧的拷贝,但是由于缓存未命中而获取了更新的idx。
解决方案是预先使用 lfence 来确保负载同步。

This articlethis article可能会提供更好的信息

关于c++ - 我什么时候应该使用_mm_sfence _mm_lfence和_mm_mfence,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4537753/

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