Jak powszechne są stare procesory x64 bez instrukcji cmpxchg16b?

8

Instrukcja cmpxchg16b przeprowadzania atomowej 128-bitowej wymiany pamięci nie jest obsługiwana w starszych wersjach procesora x64, ale wygląda na to, że jest obsługiwana przez nowsze wersje procesora od kilku lat. Jak prawdopodobne jest, że napotkam maszynę 64-bitową ze starym procesorem bez tej instrukcji?

Christopher Barber
źródło
12
Twój najważniejszy klient z pewnością ma jednego z tych na jednym z krytycznych serwerów produkcyjnych, który jest używany tylko do ważnych zadań wykonywanych w Wigilię Bożego Narodzenia, ale nigdzie indziej i absolutnie nie w środowisku testowym ...
7
Nie sądzę, że pytanie to powinno zostać przeniesione do superużytkownika. To po prostu zapewnia, że ​​mniej osób, które znają odpowiedź, kiedykolwiek zobaczy to pytanie.
Christopher Barber

Odpowiedzi:

6

Patrzysz na wczesne 64-bitowe procesory AMD, przed wersją F (czyli wtedy, gdy przenieśli się do pamięci DDR2). Są też pewne wczesne kroki Intel Noconas, które nie wspierały go, tak myślę, ale są one rzadsze.

Yuhong Bao
źródło
4

Nie mam danych dotyczących występowania niektórych rodzajów procesorów, więc nie mogę bezpośrednio odpowiedzieć na twoje pytanie. Możesz jednak dowiedzieć się, czy procesor obsługuje CMPXCHG16B, sprawdzając, czy CPUID.01h.ECX.bit13jest 1(dostępny) czy 0(niedostępny).

Należy również pamiętać, że podręczniki Intela sugerują, że aby tę instrukcję wykonać atomowo, należy połączyć ją z LOCKprefiksem.


źródło
Tak, wiem, jak sprawdzić wynik cpuid. Problem polega na tym, co zrobić, jeśli nie jest obsługiwane. Wolałbym nie marnować czasu na obejście brakującej instrukcji, jeśli nigdy nie zobaczę tej sprawy w praktyce.
Christopher Barber
@Christopher Barber - CPUID jest obsługiwany od późnych procesorów 486, co oznacza również, że każdy 64-bitowy procesor x86 będzie obsługiwał CPUID.
2
@PhiS: Jestem pewien, że Christopher mówił o braku wsparcia dla cmpxchg16b. Co zrobić, jeśli tego brakuje
Bahbar
3

Obsługa procesora może nie być wystarczająca, ponieważ niektórzy użytkownicy Core 2 dowiedzieli się o uruchomieniu systemu Windows 8.1 , szczególnie ci, którzy mają płytę główną Intel DP35DP. Nie jestem jeszcze pewien, co na płycie głównej może uniemożliwić działanie CMPXCHG16B. Prawdopodobnie bity wykrywania funkcji mogą zostać wyłączone przez BIOS. Podsumowując, co mówi na ten temat blog Yuhong Bao, we wczesnych układach Core 2 wystąpiła błąd procesora (stopniowanie E0 / R0 45 nm Core 2), co spowodowało, że ich funkcje zostały nieprawidłowo zgłoszone przez CPUID. O ile mi wiadomo, można było obejść ten problem za pomocą aktualizacji BIOS / mikrokodu.

Syczeć
źródło
2
Zobacz yuhongbao.blogspot.ca/2015/06/…
Yuhong Bao