Jak obliczyć szybkość procesora w procesorach wielordzeniowych?
Pojawienie się ekonomicznych procesorów wielordzeniowych klasy konsumenckiej rodzi pytanie dla wielu użytkowników: jak skutecznie obliczyć rzeczywistą prędkość systemu wielordzeniowego? Czy 4-rdzeniowy system 3Ghz jest naprawdę 12GHz? Czytaj dalej, gdy badamy.
Dzisiejsza sesja pytań i odpowiedzi jest dostępna dzięki uprzejmości SuperUser - podsekcji Stack Exchange, grupy dyskusyjnej poświęconej tematyce społecznościowej.
Pytanie
Czytnik SuperUser NReilingh był ciekawy jak właściwie obliczana jest prędkość procesora dla systemu wielordzeniowego:
Czy słusznie jest na przykład powiedzieć, że procesor z czterema rdzeniami, każdy pracujący z częstotliwością 3GHz, faktycznie jest procesorem pracującym z częstotliwością 12 GHz?
Kiedyś wdałem się w argument "Mac kontra PC" (który zresztą NIE jest tematem tego tematu ... który był w gimnazjum) ze znajomym, który twierdził, że komputery Mac są reklamowane jako maszyny 1GHz, ponieważ były podwójne -Procesor G4s, każdy działający z częstotliwością 500 MHz.
W tym czasie wiedziałem, że jest to bzdura z powodów, które wydają mi się oczywiste dla większości ludzi, ale właśnie zobaczyłem komentarz na tej stronie internetowej na temat "6 rdzeni x 0,2 GHz = 1,2 GHz" i to pozwoliło mi ponownie zastanowić się, czy na to jest prawdziwa odpowiedź.
Jest to zatem bardziej lub mniej filozoficzne / głębokie zagadnienie techniczne dotyczące semantyki obliczania prędkości zegara. Widzę dwie możliwości:
- Każdy rdzeń faktycznie wykonuje x obliczeń na sekundę, więc całkowita liczba obliczeń wynosi x (rdzenie).
- Szybkość zegara to raczej liczba cykli, przez które przechodzi procesor w ciągu sekundy, więc dopóki wszystkie rdzenie pracują z tą samą prędkością, prędkość każdego cyklu zegara pozostaje taka sama, bez względu na to, ile rdzeni istnieje . Innymi słowy, Hz = (core1Hz + core2Hz + ...) / rdzenie.
Jaki jest więc właściwy sposób określenia całkowitej szybkości zegara, a co ważniejsze, możliwe jest nawet stosowanie natywnej jednootworowej nomenklatury w systemie wielordzeniowym?
Odpowiedź
Pomocnicy SuperUser Mokubai pomaga wyjaśnić sprawę. On pisze:
Głównym powodem, dla którego czterordzeniowy procesor 3GHz nigdy nie jest tak szybki, jak pojedynczy rdzeń 12 GHz, jest sposób działania zadania na tym procesorze, to jest w trybie jednowątkowym lub wielowątkowym. Prawo Amdahla jest ważne, biorąc pod uwagę rodzaje wykonywanych zadań.
Jeśli masz zadanie, które jest z natury liniowe i musi być wykonane dokładnie krok po kroku, takie jak (bardzo prosty program)
10: a = a + 1
20: goto 10
To zadanie zależy w dużej mierze od wyniku poprzedniego przejścia i nie może uruchomić wielu kopii samego siebie bez uszkodzenia wartości
'za'
ponieważ każda kopia otrzyma wartość'za'
o różnych porach i zapisuje to inaczej. Ogranicza to zadanie do pojedynczego wątku, a zatem zadanie może być uruchamiane tylko na jednym rdzeniu w danym momencie, jeśli ma działać na wielu rdzeniach, a następnie nastąpiłoby uszkodzenie synchronizacji. Ogranicza to do 1/2 mocy procesora systemu dwurdzeniowego lub 1/4 w systemie czterordzeniowym.Teraz wykonaj zadanie takie jak:
10: a = a + 1
20: b = b + 1
30: c = c + 1
40: d = d + 1
50: goto 10
Wszystkie te linie są niezależne i można je podzielić na 4 oddzielne programy, takie jak pierwsze i uruchomione w tym samym czasie, z których każdy jest w stanie efektywnie wykorzystać pełną moc jednego z rdzeni bez problemu z synchronizacją, to tutaj prawo Amdahla wchodzi w to.
Więc jeśli masz aplikację z pojedynczym gwintem wykonującą obliczenia brutalnej siły, pojedynczy procesor 12 GHz wygrałby ręce, gdybyś mógł w jakiś sposób podzielić zadanie na oddzielne części i wielowątkowe, wtedy 4 rdzenie mogłyby zbliżyć się, ale nie do końca, ten sam spektakl, jak w Prawie Amdahla.
Najważniejszą rzeczą, jaką daje system wieloprocesorowy, jest szybkość reakcji. Na maszynie z pojedynczym rdzeniem, która pracuje ciężko, system może wydawać się powolny, ponieważ przez większość czasu może być używany przez jedno zadanie, a inne zadania są uruchamiane tylko w krótkich seriach pomiędzy większymi zadaniami, w wyniku czego system wydaje się powolny lub juddery . W systemie wielordzeniowym ciężkie zadanie otrzymuje jeden rdzeń, a wszystkie pozostałe zadania grają na innych rdzeniach, wykonując swoje zadania szybko i sprawnie.
Argument "6 rdzeni x 0,2 GHz = 1,2 GHz" to śmieci w każdej sytuacji, z wyjątkiem sytuacji, gdy zadania są idealnie równoległe i niezależne. Istnieje duża liczba zadań, które są wysoce równoległe, ale nadal wymagają jakiejś formy synchronizacji. Hamulec ręczny to transkoder wideo, który bardzo dobrze wykorzystuje wszystkie dostępne procesory, ale wymaga procesu rdzeniowego, aby pozostałe nici były wypełnione danymi i zbierał dane, które zostały wykonane.
- Każdy rdzeń faktycznie wykonuje x obliczeń na sekundę, więc całkowita liczba obliczeń wynosi x (rdzenie).
Każdy rdzeń jest w stanie wykonać x obliczeń na sekundę, zakładając, że obciążenie pracą jest odpowiednie równolegle, w liniowym programie wszystko, co masz, to 1 rdzeń.
- Szybkość zegara to raczej liczba cykli, przez które przechodzi procesor w ciągu sekundy, więc dopóki wszystkie rdzenie pracują z tą samą prędkością, prędkość każdego cyklu zegara pozostaje taka sama, bez względu na to, ile rdzeni istnieje . Innymi słowy, Hz = (core1Hz + core2Hz + ...) / rdzenie.
Myślę, że błędem jest myślenie, że 4 x 3GHz = 12GHz, przy założeniu, że matematyka działa, ale porównujesz jabłka do pomarańczy, a sumy po prostu nie są prawidłowe, GHz nie można po prostu dodać do każdej sytuacji. Zmieniłbym go na 4 x 3GHz = 4 x 3GHz.
Czy masz coś do dodania do wyjaśnienia? Dźwięk w komentarzach. Chcesz przeczytać więcej odpowiedzi od innych użytkowników Stack Exchange, którzy znają się na technologii? Sprawdź cały wątek dyskusji tutaj.