古いx64プロセッサーには、cmpxchg16b命令が不足していますか?


8

アトミック128ビットメモリ交換を行うためのcmpxchg16b命令は、古いバージョンのx64プロセッサではサポートされていませんが、これは数年前から新しいバージョンのプロセッサでサポートされているようです。この命令のない古いプロセッサを搭載した64ビットマシンに遭遇する可能性はどのくらいありますか?


12
あなたの最も重要な顧客は確かに、クリスマスイブで実行される重要なタスクにのみ使用される重要な本番サーバーの1つにあり、他の場所にはなく、テスト環境には絶対にありません...

7
これはスーパーユーザーに移行されるべきだったのではないかと思います。回答を知っている人がこの質問を見ることはほとんどありません。
Christopher Barber

回答:


6

あなたはRev Fより前の初期のAMD 64ビットプロセッサ(DDR2メモリに移行したとき)を見ています。それをサポートしなかったいくつかの初期段階のD Intel Noconasもあると思いますが、これらはまれです。


4

特定の種類のCPUの普及率に関するデータがないので、直接お答えすることはできません。ただし、が(利用可能)か(利用不可)CMPXCHG16Bかを確認することで、CPUがサポートしているかどうかを確認できます。CPUID.01h.ECX.bit1310

また、Intelのマニュアルでは、この命令をアトミックに実行するには、それをLOCKプレフィックスと組み合わせる必要があることを示唆しています。


はい、cpuidの結果を確認する方法を知っています。問題は、サポートされていない場合の対処です。私は実際にそのケースを見ることがないのであれば、欠けている命令を回避するために時間を無駄にしたくありません。
Christopher Barber

@Christopher Barber-CPUIDは486プロセッサ以降サポートされています。これは、すべての64ビット対応x86プロセッサがCPUIDをサポートすることも意味します。

2
@PhiS:クリストファーがcmpxchg16bのサポートの欠如について話していたと確信しています。それが欠けている場合の
対処方法

3

一部のCore 2ユーザー、特にIntel DP35DPマザーボードを搭載しているユーザーがWindows 8.1の発売を知ったため、CPUでのサポートは実際には十分ではない可能性があります。マザーボードの何がCMPXCHG16Bの動作を妨げるのかはまだわかりません。機能検出ビットは、BIOSによって無効にされている可能性があります。Yuhong Baoのブログがこれについて述べていることを要約すると、初期のCore 2チップ(45nm Core 2のE0 / R0ステッピング)にプロセッサエラッタがあり、CPUIDを介して機能が誤って報告されていました。私が知る限り、BIOS /マイクロコードの更新を介してこれを回避することが可能でした。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.