Czy operacje atomowe stają się wolniejsze w miarę dodawania kolejnych procesorów?

X86 i inne architektury zapewniają specjalne instrukcje atomowe (lock, cmpxchg, itp.), które pozwalają na pisanie struktur danych typu "lock free". Ale w miarę dodawania coraz większej liczby rdzeni, wydaje się, że praca, którą te instrukcje będą musiały wykonać za kulisami, wzrośnie (przynajmniej w celu zachowania spójności pamięci podręcznej?). Jeśli atomic add trwa ~100 cykli dzisiaj na systemie dwurdzeniowym, może to potrwać znacznie dłużej na 80 + maszyn rdzeniowych przyszłości? Jeśli piszesz kod do ostatniego, czy lepszym pomysłem może być użycie zamków, nawet jeśli są dziś wolniejsze?

Author: Joseph Garvin, 2009-10-18

4 answers

Masz rację, że ograniczenia topologiczne w ten czy inny sposób zwiększą opóźnienie komunikacji między rdzeniami, gdy liczba zacznie przekraczać kilkadziesiąt. Naprawdę Nie wiem, jakie są intencje firm x86 do radzenia sobie z tego rodzaju skalowaniem.

Ale blokady są zaimplementowane w zakresie operacji atomowych. Więc tak naprawdę nie wygrasz, próbując się na nie przełączyć, chyba że są one zaimplementowane w sposób bardziej skalowalny niż to, co próbowano by z Twoim własnoręcznie zwijane operacje atomowe. Myślę, że ogólnie rzecz biorąc, dla pojedynczych twierdzeń typu token, atomowe prymitywy zawsze będą najszybszą drogą, niezależnie od tego, ile rdzeni masz.

Jak Cray odkrył dawno temu, nie ma tu darmowego lunchu. Projektowanie oprogramowania na wysokim poziomie, w którym starasz się wykorzystywać potencjalnie kontrowersyjne zasoby w tak rzadki sposób, jak to możliwe, zawsze doprowadzi do największej wypłaty w aplikacjach masowo równoległych. Oznacza to wykonanie jak największej ilości pracy w wyniku przejęcia zamka, ale tak szybko, jak to możliwe. W ekstremalnych sytuacjach może to oznaczać wstępne obliczenie pracy przy założeniu pomyślnie zdobytego zamka, próbę złapania go i po prostu ukończenie tak szybko, jak to możliwe po sukcesie, w przeciwnym razie odrzucenie pracy i ponowne próba niepowodzenia.

 13
Author: Paul Hsieh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-18 20:48:14

Na pytanie postawione w tytule, krótka odpowiedź brzmi "tak", długa odpowiedź brzmi " to skomplikowane."

Jeśli chodzi o lepsze zamki, to nie. Wewnętrzna blokada musi przepchnąć przynajmniej tyle samo (jeśli nie więcej) ruchu przez autobus. Pomyśl o tym w ten sposób, Jeśli procesor ma tylko jedną operację atomową, Atomic compare and swap, możesz go użyć do implementacji blokad i przyrostów atomowych. Cóż, na poziomie protokołu magistrali jest tylko kilka prymitywów, które są używane. Zamki nie są wolniejsze od operacji atomowych, ponieważ robią coś innego, są wolniejsze, ponieważ robią więcej tego samego (z punktu widzenia spójności). Więc gdy operacje atomowe zwalniają, zamki mają tendencję do spowolnienia porównywalnego.

Powiedziawszy to, jest wiele, wiele prac na ten temat, a poszczególne przypadki są skomplikowane. Nie martwiłbym się, jak Twój kod będzie skalowany na 80 rdzeniowych procesorach, które mają nieprzewidywalną charakterystykę wydajności (ponieważ my Nie wiem, jak zostaną zaprojektowane). Albo będą zachowywać się jak nasze obecne procesory, a Twój kod będzie działał dobrze, albo nie i cokolwiek się teraz domyślisz, okaże się błędne. W większości przypadków okaże się, że kod nie był wrażliwy na wydajność i tak, więc nie ma to znaczenia, ale jeśli tak, to właściwą rzeczą do zrobienia będzie naprawienie go w przyszłości, kiedy zrozumiesz charakterystykę architektoniczną i wydajność swoich procesorów docelowych.

 7
Author: Louis Gerbarg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-18 20:15:53

Nie sądzę, że problemem jest to, że operacje atomowe będą trwać dłużej; prawdziwym problemem może być to, że operacja atomowa może blokować operacje magistrali na innych procesorach (nawet jeśli wykonują one operacje nieatomowe).

Jeśli chcesz napisać kod, aby trwał, staraj się unikać blokowania w pierwszej kolejności.

 4
Author: Martin v. Löwis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-18 20:23:43

Na marginesie tego pytania, warto wspomnieć, że przyszłość, do której się odnosisz, jest już obecna technologia w GPU. nowoczesny procesor GPU quadro ma aż 256 rdzeni i może wykonywać operacje atomowe na pamięci globalnej (wyświetlaczowej).
Nie jestem pewien, jak to osiągnąć, ale faktem jest, że to już się dzieje.

 1
Author: shoosh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-18 22:49:20