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


8

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


12
У вашего самого важного клиента, безусловно, есть один из тех, которые находятся на одном из его критически важных производственных серверов, которые используются только для важных задач, выполняемых в канун Рождества, но нигде больше и абсолютно не в тестовой среде ...

7
Я не думаю, что вопрос должен был быть перенесен в суперпользователя. Это просто гарантирует, что меньше людей, которые знают ответ, когда-либо увидят этот вопрос.
Кристофер Барбер

Ответы:


6

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


4

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

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


Да, я знаю, как проверить результат cpuid. Вопрос в том, что делать, если это не поддерживается. Я бы предпочел не тратить время на обход пропавшей инструкции, если я никогда не увижу этот случай на практике.
Кристофер Барбер

@Christopher Barber - CPUID поддерживается с конца 486 процессоров, что также подразумевает, что каждый 64-битный процессор x86 будет поддерживать CPUID.

2
@PhiS: я почти уверен, что Кристофер говорил об отсутствии поддержки cmpxchg16b. Что делать, если этого не хватает
Бахбар

3

Поддержки в ЦП на самом деле может быть недостаточно, поскольку некоторые пользователи Core 2 узнали об этом при запуске Windows 8.1 , особенно те, которые имели материнскую плату Intel DP35DP. Я пока не уверен, что в материнской плате может помешать работе CMPXCHG16B. Возможно, биты обнаружения функции могут быть отключены BIOS. Чтобы подвести итог тому, что говорится в блоге Юхонга Бао, об ошибках процессора в ранних чипах Core 2 (степпинга E0 / R0 45-нм Core 2), из-за которых их характеристики были искажены через CPUID. Насколько я могу судить, можно было обойти это через обновление BIOS / микрокода.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.