Инструкция cmpxchg16b для выполнения атомарного 128-битного обмена памятью не поддерживается на старых версиях процессора x64, но кажется, что это поддерживается новыми версиями процессора уже несколько лет. Насколько вероятно, что я столкнусь с 64-битной машиной со старым процессором, в котором отсутствует эта инструкция?
8
Ответы:
Вы смотрите на ранние 64-битные процессоры AMD, до Rev F (то есть когда они перешли на память DDR2). Я думаю, что некоторые ранние степпинги D Intel Noconas тоже не поддерживали его, но они встречаются реже.
источник
У меня нет данных о распространенности некоторых типов процессоров, поэтому я не могу напрямую ответить на ваш вопрос. Однако вы можете узнать, поддерживает ли ЦП
CMPXCHG16B
, проверив,CPUID.01h.ECX.bit13
есть1
(доступно) или0
(недоступно).Также обратите внимание, что в руководствах Intel предлагается, чтобы эта инструкция выполнялась атомарно, вам необходимо объединить ее с
LOCK
префиксом.источник
Поддержки в ЦП на самом деле может быть недостаточно, поскольку некоторые пользователи Core 2 узнали об этом при запуске Windows 8.1 , особенно те, которые имели материнскую плату Intel DP35DP.
Я пока не уверен, что в материнской плате может помешать работе CMPXCHG16B. Возможно, биты обнаружения функции могут быть отключены BIOS.Чтобы подвести итог тому, что говорится в блоге Юхонга Бао, об ошибках процессора в ранних чипах Core 2 (степпинга E0 / R0 45-нм Core 2), из-за которых их характеристики были искажены через CPUID. Насколько я могу судить, можно было обойти это через обновление BIOS / микрокода.источник