gpt4 book ai didi

c++ - 的 CMPXCHG16B 和 MSVC 实现不是默认的?

转载 作者:行者123 更新时间:2023-12-03 10:05:34 30 4
gpt4 key购买 nike

似乎要使用 CMPXCHG16B,必须定义 _STD_ATOMIC_ALWAYS_USE_CMPXCHG16B = 1
以便使用这些说明。
为什么这是默认设置?除非我阅读整个 atomic.h header ,否则我永远不会发现这一点。
STL 中还有哪些其他全局定义?是否有一份 list 可供审查,以便人们能够可靠地了解这些实现细节?

最佳答案

_STD_ATOMIC_ALWAYS_USE_CMPXCHG16B最近在 Visual Studio 2019 中引入(PR)
Visual Studio 2019 仍然支持较旧的操作系统,例如 Windows Vista 和 Windows 7。这些操作系统可以在没有此指令的旧 AMD Opteron CPU 上运行。
即使 _STD_ATOMIC_ALWAYS_USE_CMPXCHG16B = 0 ,有使用 CMPXCHG16B 的运行时检测如果可用。但在这种情况下,指令没有内联,而且还有一个分支,所以效率不如定义 _STD_ATOMIC_ALWAYS_USE_CMPXCHG16B = 1 .
另请注意 CMPXCHG16B用于 atomic_ref ,但不适用于 atomic由于 ABI 兼容性。 (可以引入 atomic_ref ,因为没有 C++20 之前的 atomic_ref 与 ABI 兼容)。
vNext版本(下一个主要的,ABI 破坏版本),atomic应该使用 CMPXCHG16B以及。也有希望放弃旧的 CPU/OS 支持,并使用 CMPXCHG16B将成为无条件的。 (见 https://github.com/microsoft/STL/issues/1151)。

I would have never found out about this unless I read the whole atomic.h header either.


What other global defines in the STL are there? Is there a list to review so one can reliably be aware of these implementation details?


恐怕没有完整的 list ,尽管有些已记录在案。 _STD_ATOMIC_ALWAYS_USE_CMPXCHG16B的借口特别是整个 atomic_ref未记录,并且作为 C++20 功能,它在 Visual Studio 2019 中具有实验状态。

关于c++ - <atomic> 的 CMPXCHG16B 和 MSVC 实现不是默认的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65154052/

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