Наскільки поширені старі процесори 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. Що робити, якщо цього немає
Bahbar

3

Підтримки в процесорі насправді може бути недостатньо, оскільки деякі користувачі Core 2 з'ясували при запуску Windows 8.1 , особливо тих, у кого материнська плата Intel DP35DP. Я ще не впевнений, що на материнській платі може завадити роботі CMPXCHG16B. Можливо, біти виявлення функцій можуть бути відключені BIOS. Підсумовуючи те, що в цьому блозі пише Yuhong Bao, у ранніх мікросхемах Core 2 (E0 / R0 в 45nm Core 2) з'явилася помилка процесора, яка спричинила неправильний звіт про їх функції через CPUID. Наскільки я міг сказати, можна було обійти це за допомогою оновлення BIOS / мікрокоду.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.