Pojawienie się ekonomicznych, wielordzeniowych procesorów klasy konsumenckiej rodzi pytanie dla wielu użytkowników: jak skutecznie obliczyć rzeczywistą prędkość systemu wielordzeniowego? Czy 4-rdzeniowy system 3 GHz to naprawdę 12 GHz? Czytaj dalej, gdy badamy.
Dzisiejsza sesja pytań i odpowiedzi jest dostępna dzięki uprzejmości SuperUser - części Stack Exchange, grupy witryn z pytaniami i odpowiedziami, prowadzonej przez społeczność.
Pytanie
Czytnik SuperUser NReilingh był ciekawy, jak obliczana jest prędkość procesora dla systemu wielordzeniowego:
Czy słuszne jest na przykład stwierdzenie, że procesor z czterema rdzeniami, każdy z częstotliwością 3 GHz, jest w rzeczywistości procesorem pracującym z częstotliwością 12 GHz?
Kiedyś wdałem się w spór „Mac kontra PC” (który, nawiasem mówiąc, NIE jest głównym tematem tego tematu… który był jeszcze w szkole średniej) ze znajomym, który upierał się, że komputery Mac były reklamowane tylko jako maszyny 1Ghz, ponieważ były podwójne -procesor G4, każdy z częstotliwością 500 MHz.
Wtedy wiedziałem, że to bzdura z powodów, które moim zdaniem są oczywiste dla większości ludzi, ale właśnie zobaczyłem na tej stronie komentarz dotyczący efektu „6 rdzeni x 0,2 GHz = 1,2 GHz” i to skłoniło mnie do ponownego zastanowienia się, czy istnieje prawdziwa odpowiedź na to.
Jest to więc mniej lub bardziej filozoficzne / głębokie techniczne pytanie dotyczące semantyki obliczania szybkości zegara. Widzę dwie możliwości:
- Każdy rdzeń faktycznie wykonuje x obliczeń na sekundę, więc całkowita liczba obliczeń wynosi x (rdzeni).
- Szybkość zegara jest raczej liczbą cykli, przez które przechodzi procesor w ciągu sekundy, więc jeśli wszystkie rdzenie działają z tą samą prędkością, szybkość każdego cyklu zegara pozostaje taka sama, niezależnie od liczby rdzeni . Innymi słowy, Hz = (rdzeń1 Hz + rdzeń2 Hz +…) / rdzenie.
Jaki jest zatem właściwy sposób określenia całkowitej szybkości zegara i, co ważniejsze, czy w systemie wielordzeniowym można w ogóle zastosować nomenklaturę szybkości pojedynczego rdzenia?
Odpowiedź
Dostawcy SuperUser Mokubai pomaga wyjaśnić rzeczy. On pisze:
Głównym powodem, dla którego czterordzeniowy procesor 3 GHz nigdy nie jest tak szybki jak jednordzeniowy 12 GHz, jest sposób działania zadania uruchomionego na tym procesorze, tj. Jednowątkowy lub wielowątkowy. Prawo Amdahla jest ważne przy rozważaniu typów wykonywanych zadań.
Jeśli masz zadanie, które jest z natury liniowe i musi być wykonane dokładnie krok po kroku, na przykład (rażąco prosty program)
10: a = a + 120: Co 10Wtedy zadanie zależy w dużym stopniu od wyniku poprzedniego przebiegu i nie może uruchamiać wielu kopii samego siebie bez uszkodzenia wartości
'za'ponieważ każda kopia uzyska wartość'za'w różnych momentach i inaczej zapisując. Ogranicza to zadanie do pojedynczego wątku, a zatem zadanie może być zawsze uruchamiane tylko na jednym rdzeniu w danym momencie, jeśli miałoby działać na wielu rdzeniach, nastąpiłoby uszkodzenie synchronizacji. To ogranicza go do 1/2 mocy procesora w systemie dwurdzeniowym lub 1/4 w systemie czterordzeniowym.Teraz podejmij zadanie, takie jak:
10: a = a + 120: b = b + 130: c = c + 140: d = d + 150: Co 10Wszystkie te linie są niezależne i można je podzielić na 4 oddzielne programy, takie jak pierwszy i uruchomić w tym samym czasie, z których każdy jest w stanie efektywnie wykorzystać pełną moc jednego z rdzeni bez żadnych problemów z synchronizacją. Prawo Amdahla wchodzi w to.
Więc jeśli masz aplikację jednowątkową wykonującą obliczenia brutalnej siły, pojedynczy procesor 12 GHz wygrałby bez wątpienia, jeśli możesz w jakiś sposób podzielić zadanie na oddzielne części i wielowątkowe, wtedy 4 rdzenie mogą zbliżyć się do, ale nie do końca, takie same wyniki, jak w prawie Amdahla.
Najważniejszą rzeczą, jaką daje system wieloprocesorowy, jest szybkość reakcji. Na ciężko pracującej maszynie z jednym rdzeniem system może wydawać się powolny, ponieważ przez większość czasu jedno zadanie może być używane, a inne zadania działają tylko w krótkich seriach pomiędzy większym zadaniem, co powoduje, że system wydaje się powolny lub szarpany . W systemie wielordzeniowym ciężkie zadanie otrzymuje jeden rdzeń, a wszystkie inne zadania są wykonywane na innych rdzeniach, wykonując swoje zadania szybko i wydajnie.
Argument „6 rdzeni x 0,2 GHz = 1,2 GHz” jest bzdurą 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ą pewnej formy synchronizacji. Hamulec ręczny to transkoder wideo, który bardzo dobrze radzi sobie ze wszystkimi dostępnymi procesorami, ale wymaga podstawowego procesu, aby pozostałe wątki były wypełnione danymi i zbierały dane, z którymi są gotowe.
- Każdy rdzeń faktycznie wykonuje x obliczeń na sekundę, więc całkowita liczba obliczeń wynosi x (rdzeni).
Każdy rdzeń jest w stanie wykonać x obliczeń na sekundę, zakładając, że obciążenie jest odpowiednio równoległe, w programie liniowym wszystko, co masz, to 1 rdzeń.
- Szybkość zegara jest raczej liczbą cykli, przez które przechodzi procesor w ciągu sekundy, więc jeśli wszystkie rdzenie działają z tą samą prędkością, szybkość każdego cyklu zegara pozostaje taka sama, niezależnie od liczby rdzeni . Innymi słowy, Hz = (rdzeń1 Hz + rdzeń2 Hz +…) / rdzenie.
Myślę, że błędem jest myślenie, że 4 x 3 GHz = 12 GHz, zakładając, że matematyka działa, ale porównujesz jabłka z pomarańczami, a sumy po prostu nie są prawidłowe, GHz nie może być po prostu dodany do każdej sytuacji. Zmieniłbym to na 4 x 3GHz = 4 x 3GHz.
Masz coś do dodania do wyjaśnienia? Dźwięk w komentarzach. Chcesz przeczytać więcej odpowiedzi od innych zaawansowanych technicznie użytkowników Stack Exchange? Sprawdź cały wątek dyskusji tutaj .