Jak obliczyć szybkość zegara w procesorach wielordzeniowych?

23

Czy można na przykład powiedzieć, że procesor z czterema rdzeniami, z których każdy działa w paśmie 3GHz, jest w rzeczywistości procesorem pracującym w paśmie 12 GHz?

Kiedyś wdałem się w spór „Mac vs. PC” (który, nawiasem mówiąc, NIE jest przedmiotem tego tematu ... który był jeszcze w gimnazjum), ze znajomym, który nalegał, aby komputery Mac były reklamowane jako maszyny 1 GHz, ponieważ były dwuprocesorowe G4 pracujące z częstotliwością 500 MHz.

W tamtym czasie wiedziałem, że jest to pranie brudu z powodów, które moim zdaniem są oczywiste dla większości ludzi, ale właśnie zobaczyłem komentarz na tej stronie internetowej dotyczący efektu „6 rdzeni x 0,2 GHz = 1,2 GHz” i to sprawiło, że znów pomyślałem o tym, czy jest na to prawdziwa odpowiedź.

Jest to więc mniej więcej filozoficzne / głębokie pytanie techniczne dotyczące semantyki obliczania prędkości zegara. Widzę dwie możliwości:

  1. Każdy rdzeń faktycznie wykonuje x obliczeń na sekundę, więc całkowita liczba obliczeń wynosi x (rdzenie).
  2. Szybkość zegara jest raczej liczbą cykli, przez które przechodzi procesor w ciągu sekundy, więc tak długo, jak wszystkie rdzenie pracują z tą samą prędkością, prędkość każdego cyklu zegara pozostaje taka sama bez względu na liczbę rdzeni . Innymi słowy, Hz = (rdzeń 1 Hz + rdzeń 2 Hz + ...) / rdzenie.
NReilingh
źródło
Wiele odpowiedzi tutaj dobrze wyjaśnia, dlaczego np. Czterordzeniowy procesor 2 GHz niekoniecznie jest równy jednordzeniowemu procesorowi 8 GHz. Trudno mi jednak rozgryźć, w jaki sposób należy uwzględnić prędkości procesorów wielordzeniowych, decydując o tym, czy system nadaje się do aplikacji, która wymienia określoną prędkość i liczbę rdzeni w swoich wymaganiach? (np .: Borderlands 2 wymaga dwurdzeniowego procesora 2,4 GHz. Czy powinniśmy oczekiwać równie dobrego czterordzeniowego lub szybszego jednordzeniowego?) Czy to (lub może być) odpowiedź tutaj, czy powinno to być osobne pytanie?
Iszi
@Iszi To powinno być kolejne pytanie, ale prawdopodobne jest, że Borderlands jest zoptymalizowany dla więcej niż jednego wątku, jeśli ma w swoich wymaganiach „dual core”. W takim przypadku procesor jednordzeniowy nie byłby zalecany, ale nie jest jasne, czy może skorzystać z> 2 rdzeni.
NReilingh,
Należy pamiętać, że szybkość zegara i liczba rdzeni nie decydują wyłącznie o „szybkości” procesora. Na przykład rozmiary i szybkość pamięci podręcznej będą miały wpływ na czas, jaki procesor spędza na oczekiwaniu na instrukcje i dane. Ponadto instrukcje na cykl (w pewnym sensie „sprawność”, choć odrębna i związana z wydajnością energetyczną) również będą miały wpływ na szybkość obliczeń. Różne procesory wykonają tę samą instrukcję w różnym czasie.
Bob

Odpowiedzi:

35

Głównym powodem, dla którego czterordzeniowy procesor 3GHz nigdy nie jest tak szybki jak pojedynczy rdzeń 12 GHz, jest sposób, w jaki działa zadanie uruchomione na tym procesorze, tj. Jedno- lub wielowątkowe. Prawo Amdahla jest ważne przy rozważaniu rodzajów wykonywanych zadań.

Jeśli masz zadanie z natury liniowe i musi być wykonane dokładnie krok po kroku, takie jak (rażąco prosty program)

10: a = a + 1
20: goto 10

Następnie 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, 'a'ponieważ każda kopia otrzymywałaby wartość 'a'w innym czasie i zapisywała ją w inny sposób. Ogranicza to zadanie do jednego wątku, a zatem zadanie może być uruchomione tylko na jednym rdzeniu w danym momencie, jeśli miałoby działać na wielu rdzeniach, nastąpiłoby uszkodzenie synchronizacji. Ogranicza to do 1/2 mocy procesora w systemie dwurdzeniowym lub 1/4 w systemie czterordzeniowym.

Teraz podejmij takie zadanie 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 pierwszy, i działają w tym samym czasie, każdy z nich jest w stanie efektywnie wykorzystać pełną moc jednego z rdzeni bez żadnego problemu z synchronizacją, tutaj prawo Amdahla wchodzi w to.

Więc jeśli masz aplikację z pojedynczym wątkiem, która wykonuje obliczenia z użyciem siły, pojedynczy procesor 12 GHz wygrałby bez wysiłku, jeśli możesz w jakiś sposób podzielić zadanie na osobne części i wielowątkowe, wówczas 4 rdzenie mogą zbliżyć się, ale nie do końca, taki sam występ, zgodnie z prawem Amdahla.

Najważniejsze, co daje system z wieloma procesorami, to szybkość reakcji. Na maszynie z jednym rdzeniem, która ciężko pracuje, system może wydawać się powolny, ponieważ większość czasu może być wykorzystana przez jedno zadanie, a inne zadania działają tylko w krótkich seriach pomiędzy większym zadaniem, co powoduje, że system wydaje się powolny lub niesprawiedliwy . W systemie wielordzeniowym ciężkie zadanie otrzymuje jeden rdzeń, a wszystkie pozostałe zadania działają na innych rdzeniach, wykonując swoje zadania szybko i wydajnie.

Argument „6 rdzeni x 0,2 GHz = 1,2 Ghz” jest śmieciem 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ą one pewnego rodzaju synchronizacji. Hamulec ręczny to transkoder wideo, który jest bardzo dobry w użyciu wszystkich dostępnych procesorów, ale wymaga podstawowego procesu, aby utrzymać pozostałe wątki wypełnione danymi i zebrać dane, z którymi są zrobione.

  1. Każdy rdzeń faktycznie wykonuje x obliczeń na sekundę, więc całkowita liczba obliczeń wynosi x (rdzenie).

Każdy rdzeń może wykonywać x obliczeń na sekundę, przy założeniu, że obciążenie jest odpowiednie równolegle, w programie liniowym masz tylko 1 rdzeń.

  1. Szybkość zegara jest raczej liczbą cykli, przez które przechodzi procesor w ciągu sekundy, więc tak długo, jak wszystkie rdzenie pracują z tą samą prędkością, prędkość każdego cyklu zegara pozostaje taka sama bez względu na liczbę rdzeni . Innymi słowy, Hz = (rdzeń 1 Hz + rdzeń 2 Hz + ...) / rdzenie.

Myślę, że błędem jest sądzić, że 4 x 3GHz = 12GHz, pod warunkiem, że matematyka działa, ale porównujesz jabłka do pomarańczy, a sumy są po prostu nieprawidłowe, GHz nie można po prostu zsumować w każdej sytuacji. Zmieniłbym to na 4 x 3GHz = 4 x 3GHz.

Mokubai
źródło
Niezły post .. Nie można zagłosować więcej niż 1+ :-(
Gopalakrishnan Subramani
Ale prawo Amdahla jest problemem programistycznym, spowodowanym blokowaniem, a nie problemem sprzętowym. Jeśli nie musisz synchronizować, każdy rdzeń może wykonać instrukcje tak szybko, jak to możliwe. Można zaprojektować program równoległy (prosty), który byłby idealnie podzielony między rdzenie. Czy producenci sprzętu nie reklamowaliby tej surowej wartości?
Justin Meiners
Aby to wyjaśnić, rozumiem, dlaczego to odpowiada na pytanie, dlaczego 4 rdzenie przy 3 Ghz nie są tak szybkie, w praktyce jak 12 Ghz, ale nie jest to część sposobu obliczania prędkości zegara dla multicores.
Justin Meiners
@JustinMeiners prędkość zegara na rdzeń to po prostu prędkość zegara na rdzeniu. Nie ma żadnej magicznej kalkulacji, która zrównałaby jeden rdzeń z wielordzeniem. Wiele rdzeni oznacza po prostu, że możesz wykonywać więcej osobnych zadań jednocześnie. Obowiązuje prawo Amdahls ze względu na oprogramowanie, wymagana synchronizacja i blokowanie zapobiegnie „perfekcyjności” zadania sprzętowego tak samo jak oprogramowania. Współużytkowane pamięci podręczne i pamięć powodują rywalizację i blokady.
Mokubai
@Mokubai Aby wyjaśnić, kiedy producent podaje częstotliwość taktowania, każdy rdzeń działa z tą prędkością, prawda?
Justin Meiners
6

Inni przedstawili dobry argument z technicznego punktu widzenia. Zamiast tego zrobię kilka prostych analogii, które, mam nadzieję, wyjaśnią, dlaczego 4 * 3GHz nie jest równoważne 1 * 12GHz.

Na przykład jedna kobieta może wyprodukować jedno dziecko w ciągu dziewięciu miesięcy. Czy dziewięć kobiet będzie w stanie wyprodukować jedno dziecko w ciągu jednego miesiąca? Nie, ponieważ ciąża nie może być zrównoleglona (cóż, przynajmniej na tym poziomie technologicznym).

Oto kolejna: w niedawno odwiedzonej elektrowni wodnej jeden z generatorów był modernizowany. Musieli przetransportować stojan generatora statkiem. Jedna szósta stojana mogła być transportowana ciężarówką, ale musieli przewieźć cały stojan; więc musieli użyć jednego statku, a nie sześciu ciężarówek.

Innym przypadkiem może być precyzyjny harmonogram wydarzeń. Czasami procesory komputerowe są używane jako precyzyjne liczniki czasu (chociaż praktyka nie jest już zalecana, ze względu na zmienny zegar na większości procesorów. Zamiast tego należy użyć precyzyjnego timera zdarzeń). Jeśli założymy, że mamy procesor ze stosunkowo stabilnym zegarem 12 GHz, możemy go użyć do pomiaru czasu w znacznie wyższej rozdzielczości niż na procesorze z zegarem 3GHz. Bez względu na liczbę rdzeni 3GHz nie będziemy w stanie osiągnąć rozdzielczości rdzenia 12GHz. To tak, jakby mieć 4 zegary z 7-segmentowymi wyświetlaczami, gdzie każdy zegar wyświetla tylko prawidłowy czas w godzinach. Bez względu na to, jak poprawnie pokazują godziny, nie można ich używać do mierzenia przedziałów czasu w zakresie jednosekundowym.

AndrejaKo
źródło
Przydatna odpowiedź dla mniej technicznych. Poza tym lubię analogie :)
aff
3

Nie jestem ekspertem w tej dziedzinie, ale mam dyplom inżynierii komputerowej. W teorii (to jest bardzo koncepcyjny odpowiedź) czteroprocesorowym 3 GHz każdy procesor może być równoważne z jednym procesorem 12GHz jeśli, na przykład, cztery zestawy obliczeń potrzebnych do wykonania jednej wyniku końcowego. To się nazywa przetwarzanie równoległe.

Aby uprościć logikę, powiedzmy, że mówimy o procesorze dwurdzeniowym. Jeśli zestaw obliczeń byłby, powiedz:

a = b + 1;

c = d + 1;

następnie te dwa obliczenia mogłyby zostać wykonane na osobnych rdzeniach, a procesor xGHz byłby równoważny jednordzeniowemu procesorowi 2 * xGHz. Wynika to z faktu, że dwa obliczenia, choć wykonane z prędkością x, byłyby przetwarzane w tym samym czasie. Podczas gdy procesor z jednym rdzeniem mógłby to zrobić z prędkością 2 * x, ale jedna po drugiej. Jeśli dwa procesory wykonałyby ten kod w tym samym czasie, zakończyłyby się w tym samym czasie. Jeśli jednak kod byłby:

a = b + 1;

c = a + 1;

wówczas procesor dwurdzeniowy zająłby dwa razy więcej niż procesor jednordzeniowy, ponieważ w drugiej instrukcji wartość a jest zależna od pierwszej instrukcji, a zatem nie może być wykonywana równolegle. W ten sposób niektóre programy mogą korzystać z procesorów wielowątkowych.

Teoretycznie jednordzeniowy procesor 12 GHz zawsze może działać tak szybko (lub szybciej) niż czterordzeniowy procesor 3GHz, ale nie odwrotnie.

blastawaythewall
źródło
Zauważ, że te obliczenia będą szybsze tylko wtedy, gdy zostaną odczytane na raz, a nawet wtedy będzie niewielki narzut. Ale tak, chociaż możliwe jest stworzenie procesora z jednym rdzeniem, który może wykonać tyle obliczeń, po prostu nie jest to możliwe ze względu na ciepło i inne rzeczy.
Phoshi,
Ta odpowiedź jest myląca z dwóch powodów. Po pierwsze, współczesne rdzenie robią więcej niż jedną rzecz na raz. Po drugie, odpowiedź zakłada, że ​​prędkość rdzenia jest taka sama jak szybkość wykonywania pracy. Jednordzeniowy procesor 12 GHz nie będzie działał tak szybko, jak czterordzeniowy procesor 3GHz, jeśli procesor jednordzeniowy potrzebuje znacznie więcej cykli zegara, aby wykonać tę samą pracę. (Co by było, ponieważ procesor 12GHz potrzebowałby znacznie dłuższych potoków.)
David Schwartz
2

To skomplikowane pytanie, na które należy odpowiedzieć, ale krótka odpowiedź brzmi: nie

W rzeczywistych aplikacjach cztery procesory 3Ghz nie będą tak szybkie jak pojedynczy procesor 12 GHz z powodu nieefektywności. Mogą być bardzo blisko, ale NIE będą równe jednemu procesorowi pod względem mocy przetwarzania.

Powodem tego jest niewielka nieefektywność w przypadku programów, które mogą działać na więcej niż jednym procesorze. Zakładając, że dany program może działać równolegle, nadal będziemy mieli problemy z różnymi rdzeniami konkurującymi ze sobą o inne zasoby, takie jak pamięć RAM, a nawet problemy z pamięcią podręczną i synchronizacją wątków. Ponadto zawsze są części programów, których nie można zrównoleglać i które same muszą działać na jednym rdzeniu.

Spójrz na ten artykuł: http://en.wikipedia.org/wiki/Amdahl%27s_law

Faken
źródło
Masz rację i źle. Cztery procesory 3 GHz najprawdopodobniej SZYBCIEJ niż pojedynczy procesor 12 GHz w aplikacjach „rzeczywistych”. Obecnie coraz więcej programów korzysta z wielowątkowości, podany przez ciebie link odnosi się do teoretycznej aplikacji z jednym wątkiem. Pojedynczy procesor o częstotliwości 12 GHz ma tylko jeden wątek, więc utraciłoby to wielowątkowe korzyści oferowane przez program „świata rzeczywistego”. Przemysł nie dąży do wprowadzenia wolniejszych rdzeni zamiast mniejszej liczby szybszych rdzeni tylko dlatego, że zalety technologii wielordzeniowej znacznie przewyższają zalety szybkiej technologii jednordzeniowej.
ubiquibacon
3
@typoknig: To nie do końca prawda. Jednordzeniowy procesor 6GHz uruchamiałby wielowątkową aplikację z mniej więcej taką samą prędkością, jak dwurdzeniowy procesor 3GHz, zakładając, że aplikacja w pełni wykorzystuje każdy wątek (czego najprawdopodobniej nie robi, jeśli jest „prawdziwym” aplikacja światowa ”, ale to osobny argument). Nie widzimy procesorów 12 GHz, ponieważ przy obecnej technologii jest to zbyt trudne, a nie dlatego, że jest wolniejsze.
Sasha Chedygov
4
@typoknig: Zaprogramowałem kilka programów z wielowątkowością i uwierzcie mi, gdybym miał pojedynczy procesor 12 GHz, skorzystałbym z niego zamiast tego. Programowanie jednowątkowe jest 10 razy łatwiejsze i znacznie wydajniejsze niż programowanie wielowątkowe. Prawdziwym powodem, dla którego branża przenosi procesory wielordzeniowe, nie jest to, że są one szybsze, ale dlatego, że nie możemy przyspieszyć działania poszczególnych procesorów! Zostało to zarysowane za pomocą technologii netburst Intela w p4 dni. Ocenili przynajmniej procesory 10 Ghz, to znaczy dopóki fizyka kwantowa nie uderzyła ich w twarz i nie powiedziała „noob!”.
Faken
2
@typokning: F22 używa szeregu procesorów powerPC, aby osiągnąć 10 miliardów instrukcji na sekundę, zupełnie inaczej niż 10 Ghz! To tak, jakby powiedzieć, że twój Radion HD5970 działa na 4600 Ghz. Jest zdolny do 4.6 TFLOPS, ale tylko dlatego, że jest bardzo równoległy.
Faken
1
@typoknig: Wyraźnie nie rozumiesz różnicy między częstotliwością procesora a IPS (instrukcje na sekundę), nie są one takie same. Przeczytaj: en.wikipedia.org/wiki/Instructions_per_second
Faken
2

Wydaje się, że nie możemy powiedzieć, że 4 rdzenie przy 3 GHz można powiedzieć jako 12 GHz.

Różne ograniczenia, takie jak pamięć współużytkowana, rywalizacja z pamięcią podręczną i inne zasoby są wspólne dla wszystkich rdzeni, więc uruchomienie fragmentu kodu równolegle na tych rdzeniach nie będzie tak wydajne, jak uruchomienie go na procesorach 12 GHz (chociaż trudno jest zbudować taki procesor ).

Przeczytałem też gdzieś, że jeśli podwoimy tranzystory wbudowane w układ (CMP), przyspieszenie, które uzyskamy, to tylko 40%. Jest to także znacząca wskazówka dla tego tematu.

Harmeet Singh
źródło
1

Jeśli chodzi o wykonywane cykle zegarowe, tak, procesor wielordzeniowy wykonuje pełne x * corescykle pracy na sekundę. Zazwyczaj prędkości zegara są wyszczególnione dla poszczególnych rdzeni dla łatwiejszego porównania (w przeciwnym razie jak można łatwo porównać dwurdzeniowy układ 4GHz pracujący z częstotliwością 2GHz / rdzeń w porównaniu z czterordzeniowym układem 4GHz pracujący z częstotliwością 1GHz / rdzeń?).

Niestety problem komplikuje się, gdy próbujesz porównać różne procesory w rzeczywistych aplikacjach.

Po pierwsze, większość procesorów wielordzeniowych ma pewne zasoby współdzielone między rdzeniami (np. Pamięć podręczna procesora). Muszą dzielić dostęp do tej pamięci podręcznej, więc nie można mieć obu rdzeni do przechowywania lub odczytu danych z pełną prędkością. Jest to często łagodzone w procesorach wielordzeniowych poprzez posiadanie wielu współużytkowanych pamięci podręcznych (np. Większość czterordzeniowych układów ma 2 pamięci podręczne, z których każda jest współdzielona przez parę rdzeni), w celu lepszego podziału szans na wąskie gardło we wspólnym zasobie.

Po drugie, być może mniej znane w świecie nietechnicznym, porównywanie prędkości zegara może czasem przypominać porównywanie jabłek i pomarańczy. Różne procesory wykonują różną ilość pracy w jednym cyklu zegara, więc powiedzenie, że masz 1 GHz w porównaniu z 1,2 GHz, brzmi świetnie, ale układ 1 GHz może faktycznie wykonać więcej pracy w danym przedziale czasu. Pentium 4 odwiodło ten punkt do domu, prowadząc do megahercowego mitu (którego nie znałem, dopóki nie napisałem tego nazwiska).

Jimmy
źródło
Częstotliwości zegara nie są wymienione „na podstawie rdzenia”. Prędkości nigdy nie są „na” niczym. Jeśli samochód jedzie 50 mil na godzinę, prędkość wynosi 50 mil na godzinę. Jeśli dwa samochody jadą 50 mil na godzinę, prędkość nadal wynosi 50 mil na godzinę. Idea „prędkości na samochód” jest pozbawiona znaczenia i niespójna.
David Schwartz
1

Dwa samochody jadące z prędkością 50 mil na godzinę nie sumują się do 100 mil na godzinę. To naprawdę jest takie proste. Szybkość zegara procesora nie jest miarą szybkości, z jaką praca jest wykonywana, lecz miarą szybkości zegara.

David Schwartz
źródło