Pojawienie się ekonomicznych, wielordzeniowych procesorów dla konsumentów stawia 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 przychodzi do nas dzięki uprzejmości SuperUser - poddziału Stack Exchange, grupy dyskusyjnej poświęconej tematyce społecznościowej.
Czytnik SuperUser NReilingh był ciekawy jak właściwie obliczana jest prędkość procesora dla systemu wielordzeniowego:
Czy słuszne jest na przykład stwierdzenie, że procesor z czterema rdzeniami, każdy pracujący z częstotliwością 3GHz, jest w rzeczywistości 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ł z powrotem w gimnazjum) ze znajomym, który twierdził, że komputery Mac były 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 więc bardziej lub mniej filozoficzne / głębokie zagadnienie techniczne dotyczące semantyki obliczania prędkości zegara. Widzę dwie możliwości:
- Każdy rdzeń wykonuje x obliczeń na sekundę, więc całkowita liczba obliczeń to 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 prędkości taktowania, a co ważniejsze, czy możliwe jest użycie natywnej jednootworowej nomenklatury w systemie wielordzeniowym?
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, tj. Jedno-gwintowy lub wielowątkowy. Prawo Amdahla jest ważne, biorąc pod uwagę rodzaje zadań, które wykonujesz.
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
Zadanie to zależy w dużej mierze od wyniku poprzedniego przejścia i nie może uruchomić wielu kopii bez utraty 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 miałoby 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ą, w tym przypadku 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ł jakoś podzielić zadanie na oddzielne części i wielowątkowe, wtedy 4 rdzenie mogłyby zbliżyć się, ale nie całkiem osiągnąć, ten sam spektakl, jak w Prawie Amdahla.
Najważniejszą rzeczą, jaką daje system wieloprocesorowy, jest szybkość reakcji. Na maszynie z pojedynczym rdzeniem, która działa 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, co powoduje, że system wydaje się powolny lub juddery . W systemie wielordzeniowym ciężkie zadanie dostaje jeden rdzeń, a wszystkie inne 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 wiele zadań, które są bardzo równoległe, ale nadal wymagają jakiejś formy synchronizacji. Hamulec ręczny to transkoder wideo, który jest bardzo dobry w używaniu wszystkich dostępnych procesorów, ale wymaga procesu rdzeniowego, aby pozostałe wątki były wypełnione danymi i zbierały dane, które zostały wykonane.
- Każdy rdzeń wykonuje x obliczeń na sekundę, więc całkowita liczba obliczeń to 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 = 12 GHz, przy założeniu, że matematyka działa, ale porównujesz jabłka do pomarańczy, a sumy są po prostu niewłaściwe, 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.