Насколько распространены старые процессоры x64 без инструкции cmpxchg16b?

7695
Christopher Barber

Инструкция cmpxchg16b для выполнения атомарных 128-битных обменов памяти не поддерживается на старых версиях процессора x64, но кажется, что она поддерживается новыми версиями процессора уже несколько лет. Насколько вероятно, что я столкнусь с 64-битной машиной со старым процессором, в котором отсутствует эта инструкция?

8
Ваш самый важный клиент, безусловно, имеет один из тех, кто работает на одном из важнейших производственных серверов, который используется только для важных задач, выполняемых в канун Рождества, но нигде больше и абсолютно не в тестовой среде ... 13 лет назад 12
Я не думаю, что вопрос должен был быть перенесен в суперпользователя. Это просто гарантирует, что меньше людей, которые знают ответ, когда-либо увидят этот вопрос. Christopher Barber 13 лет назад 7

3 ответа на вопрос

5
Yuhong Bao

Вы смотрите на ранние 64-битные процессоры AMD, до Rev F (то есть когда они перешли на память DDR2). Я думаю, что есть некоторые ранние степпинги D Intel Noconas, которые не поддерживают его, но они встречаются реже.

3

У меня нет данных о распространенности некоторых типов процессоров, поэтому я не могу напрямую ответить на ваш вопрос. Однако вы можете узнать, поддерживает ли ЦП CMPXCHG16B, проверив, CPUID.01h.ECX.bit13есть 1(доступно) или 0(не доступно).

Также обратите внимание, что в руководствах Intel предлагается, чтобы эта инструкция выполнялась атомарно, вам необходимо объединить ее с LOCKпрефиксом.

Да, я знаю, как проверить результат cpuid. Вопрос в том, что делать, если это не поддерживается. Я бы предпочел не тратить время на обход пропавшей инструкции, если я никогда не увижу этот случай на практике. Christopher Barber 13 лет назад 0
@Christopher Barber - CPUID поддерживается с конца 486 процессоров, что также подразумевает, что каждый 64-битный процессор x86 будет поддерживать CPUID. 13 лет назад 0
@PhiS: я почти уверен, что Кристофер говорил об отсутствии поддержки cmpxchg16b. Что делать, если _that_ отсутствует Bahbar 13 лет назад 2
3
Fizz

Support in the CPU may not actually be enough as some Core 2 users found out on the launch of Windows 8.1, particularly those having an Intel DP35DP motherboard. I'm not yet sure what in the motherboard could prevent CMPXCHG16B from working. Probably the feature detection bits can be disabled by BIOS. To summarize what Yuhong Bao's blog says on this, there was a processor errata in early Core 2 chips (E0/R0 steppings of the 45nm Core 2) that caused their features to be misreported via CPUID. It was possible to work around this via BIOS/microcode update, as far as I can tell.

См. Http://yuhongbao.blogspot.ca/2015/06/why-your-core-2-processor-appear-to-not.html Yuhong Bao 7 лет назад 1

Похожие вопросы