缺少cmpxchg16b指令的旧x64处理器有多普遍?


8

x64处理器的旧版本不支持用于执行原子128位内存交换的cmpxchg16b指令,但是似乎已经有好几年了,新版本的处理器才支持。我有多大可能遇到带有缺少此指令的旧处理器的64位计算机?


12
您最重要的客户肯定是其中一台关键生产服务器中的一台,这些服务器仅用于在平安夜运行的重要任务,但无处不在,而且绝对不在测试环境中……

7
我不认为应该将其迁移到超级用户。它只是确保知道答案的人越来越少看到这个问题。
Christopher Barber 2010年

Answers:


6

您正在研究的是Rev F之前的早期AMD 64位处理器(这是它们移至DDR2内存的时间)。我认为有些早期的D英特尔Noconas也不支持它,但是这种情况较为罕见。


4

我没有关于某些类型的CPU普及率的数据,因此我无法直接回答您的问题。但是,您可以CMPXCHG16B通过检查CPUID.01h.ECX.bit131(可用)还是0(不可用)来找出CPU是否支持。

另请注意,英特尔手册建议,要自动执行该说明,您需要将其与LOCK前缀结合使用。


是的,我知道如何检查cpuid结果。问题是如果不支持该怎么办。如果我永远不会在实践中看到这种情况,我宁愿不浪费时间处理丢失的指令。
Christopher Barber 2010年

@Christopher Barber-从486后期的处理器开始就支持CPUID,这也意味着每个支持64位的x86处理器都将支持CPUID。

2
@PhiS:我很确定Christopher在谈论缺少对cmpxchg16b的支持。如果丢失了怎么办
Bahbar 2010年

3

实际上,对CPU的支持可能还不够,因为某些Core 2用户在Windows 8.1启动时就发现了,特别是那些拥有Intel DP35DP主板的用户。我还不确定主板中的什么会阻止CMPXCHG16B工作。可能可以通过BIOS禁用功能检测位。总结一下Yuhong Bao的博客对此所说的话,早期的Core 2芯片(45nm Core 2的E0 / R0步进)存在处理器勘误,导致其功能通过CPUID误报。据我所知,可以通过BIOS /微代码更新解决此问题。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.