Szybkość procesora, a cykliczność

0

Naszła mnie ostatnio taka ciekawość. Zastanawiam się(chociaż może to nie jest najlepsze pytanie w przypadku początkującego ale trudno) nad różnicą między szybkością procesora, a jego cyklicznością. Czy jeżeli procesor działa z prędkością 1,85 Ghz to to oznacza, że jest on w stanie jednego cyklu wykonać prawie 2 mld operacji na sekunde czy o co dokładnie tutaj chodzi?

3

Herc to odwrotność sekundy, dokładnie jeden przez sekunda. Szybkość komputerów mierzy się w ilości operacji (dodawań?) zmiennoprzecinkowych na sekundę. A jak komputery nie umiały w zmiennoprzecinkowe to mierzyło się w ilości operacji stałoprzecinkowych czyli operacji (dodawań?) na liczbach całkowitych

Linki:
https://pl.m.wikipedia.org/wiki/Herc
https://pl.m.wikipedia.org/wiki/FLOPS
https://pl.m.wikipedia.org/wiki/Million_instructions_per_second

3

Myślę, że strona Intela może być pomocna w zrozumieniu:
https://www.intel.com/content/www/us/en/gaming/resources/cpu-clock-speed.html
Są instrukcje które wykonują się w kilka cykli. W jednym cyklu też może wykonać się kilka instrukcji.
Ale ogólnie chodzi o szybkość użytych w CPU tranzystorów.
Zobacz sobie np. jak zbudowana jest jakaś bramka logiczna na tranzystorach, potem podstawową jednostkę arytmetyczną. Potem wyobraź sobie miliony takich tranzystorów w CPU i zobaczysz, że szybkość działania całego CPU czyli tranzystorów w środku zależy od możliwości jak szybko można je przełączać.
Tranzystor to taki przełącznik.
Wyobraź sobie że jest człowiek który przełącznikiem włącza światło a ktoś z daleka to odczytuje. Jak można przełączyć go raz na sekundę (1Hz) albo 2 razy na sekundę (2Hz) to osoba która obserwuje to światło będzie miała 2 razy szybciej przesłaną informacje.

2

Tzn najważniejsze odróżnij zegar czyli to co wyraża się w hz od ilości operacji którą da się wykonać w jednym takcie zegara (IPC). Z każdą nową generacją ipc rośnie szybciej niż hz i sumarycznie daje to ten wzrost wydajności o jakim piszą producenci.

3

image

Nie można zapominać o tym jak jest wykonywana instrukcja assemblera, jest ona napisana w microassemblerze gdzie musimy najpierw pobrać instrukcję asm z pamięci, zdekodować, wykonać, w zależności od operacji może być różna ilość tych mikroinstrukcji.

Jako, że w procesorach jest implementowany 5 stage pipeline to co każdy cykl wykonuje się następna instrukcja, mimo że instrukcje mogą kosztować więcej cykli to summarycznie wychodzi, że się większość wykona w jednym cyklu procesora.

Teraz jeśli mamy instrukcje warunkowe to procesor nie wie, którą następną instrukcję wykonać bo ta od której zależy jeszcze się nie wykonała i wtedy wkracza do gry branch prediction.
Jeśli dobrze przewidzi wykonanie kodu to wykona się wszystko szybko, jeśli źle to tracimy performance.

Przykład takiego problemu można zaobserwować jeśli przeprowadzimy jakąś prostą operację na tablicy np. porównywanie, to kod posortowanej tablicy wykona się szybciej, bo będzie prościej przewidzieć sekwencje wykonywanych instrukcji niż przy losowej zawartości tablicy.

A dalej mamy po prostu w dokumentacji danego procesora opisane ile cykli, taktów procesora potrzeba żeby wykonać daną instrukcję.

Jeśli odpalisz kod instrukcji gdzie wykonanie danej instrukcji zajmuje 1 tick procesora i nie ma niczego co by mogło wywłaszczyć wykonywanie kodu jak system operacyjny, przerwania, wtedy po prostu procesor zacznie wykonywać coś innego prócz naszego kodu.
To jeśli masz 3GHz taktowania to jeśli wykonasz 3 mld takich operacji to powinna minąć sekunda.

Pewnie jeszcze jakieś rzeczy by się znalazły.

1
hutsaloviaheslav1098 napisał(a):

Naszła mnie ostatnio taka ciekawość. Zastanawiam się(chociaż może to nie jest najlepsze pytanie w przypadku początkującego ale trudno) nad różnicą między szybkością procesora, a jego cyklicznością. Czy jeżeli procesor działa z prędkością 1,85 Ghz to to oznacza, że jest on w stanie jednego cyklu wykonać prawie 2 mld operacji na sekunde czy o co dokładnie tutaj chodzi?

Trochę trudno bez pojeć podstawowych. Te dziedziny w ogóle nie posiadającą słowa "cykliczność" w sensie jaki używasz.

Gigahertze oznaczają zegar z jakim pracuje procesor, jak @KamilAdam zaczął. To elementarz nauki / elektroniki, i jak nie zrozumiale, to sorry.
Na Intelach chyba żaden rozkaz nie kosztuje jednego cyklu, a więcej, a skomplikowane do kilkunastu cykl, a nawet kilkudziesięciu.
Ale na plus jest zrównoleglenie, kilka rozkazów jednocześnie, jeden już się kończy, drugi jest w połowie, i już pobieramy z pamięci programu następny

W benchmarkach rzeczywiście się podaje ilość instr konkretnego typu / sekundę, ale to znów nie jest identyczne z realnym zyciem.

GodOfCode. napisał(a):

Jeśli odpalisz kod instrukcji gdzie wykonanie danej instrukcji zajmuje 1 tick procesora i nie ma niczego co by mogło wywłaszczyć wykonywanie kodu jak system operacyjny, przerwania, wtedy po prostu procesor zacznie wykonywać coś innego prócz naszego kodu.
To jeśli masz 3GHz taktowania to jeśli wykonasz 3 mld takich operacji to powinna minąć sekunda.

"Jeśli", ale raczej nie ma takich
Zresztą, nawet zaprzestano podawać dokładnych timingów instrukcji / nie ma sensu. To miało jakiś sens dla piszących w asemblerze wysublimowanie programy na niezrównoleglajacy CPU

i nie ma niczego co by mogło wywłaszczyć wykonywanie kodu jak system operacyjny, przerwania, wtedy po prostu procesor zacznie wykonywać coś innego prócz naszego kodu.

Na poziomie doktoratu w/s procesora trudno mówić o wywłaszczaniu. To się przejawia na wyższych poziomach, wątku / procesu, oprogramowania użytkowego. Pytanie nie sięga do tego, zresztą zgubilibyś sie w stoniu kompliakcji

0

Pytam o to dlatego że studiuje obecnie historie informatyki i uczę się o takim komputerze jak komputer z3(tutaj źródło: https://eduinf.waw.pl/inf/hist/004_zuse1/0006.php), który pracuje z prędkością 5,33 Hz i stąd to pytanie w odniesieniu do współczesnych procesorów. Współczesne proce działają z szybkością Ghz , a 1 Ghz to 1 mld hz, a więc chciałem zapytać czy skoro np. proc działa z szybkością 2 GHz to czy w ciągu sekundy jest faktycznie wykonać 2 mld operacji czy to się da przeliczyć 1 do 1(czyli np. 2 Ghz = 2 mld operacji w trakcie jednego cyklu) i jak to przełożyć np. na taki komputer przekaźnikowy jak np. ten z3, który działa nie z prędkością GHz tylko Hz. Czy gdy działa z tą oszałamiającą prędkością 5Hz to w ciągu sekundy ile jest w stanie przemielić takich instrukcji. No bo chyba nie 5 mld?

1

No to już ci wyjaśnili ludzie wyżej, w zależności od instrukcji da sie ich nawet więcej niż 5mld ale i mniej, to nie jest stałe i zależy od złożoności samej instrukcji.

0

Jak powiem że prędkość proca(np. 2Ghz) to jest bardziej szybkość z jaką procesor wykonuje instrukcje podczas 1 pełnego cyklu(oczywiście jest ona zależna od instrukcji wykonywanych w danym momencie), a nie koniecznie ilość instrukcji wykonywanych podczas jednego takiego obiegu(cyklu) proca. Dobrze kombinuje czy daleko jest to od realnych faktów?

3

częstotliwość to zegar i nie jest to prędkość obliczeń, obliczenia wykonują się w takt zegara ale czasem to bedzie 0.1 danego "obliczenia" a czasem 2.

1

Czas na NetBurst v2. To może być game changer.

1
hutsaloviaheslav1098 napisał(a):

Pytam o to dlatego że studiuje obecnie historie informatyki i uczę się o takim ...

ehhhhh napisał(a):

częstotliwość to zegar i nie jest to prędkość obliczeń, obliczenia wykonują się w takt zegara ale czasem to bedzie 0.1 danego "obliczenia" a czasem 2.

@hutsaloviaheslav1098:

Będzie ci skrajnie ciężko / niemożliwe nawet z historią informatyki bez podstaw w zakresie elementarza.
Tak jak nie da sie historycznie mówić o Oppenheimerze bez minimum podstaw z czym on właściwie pracował. Rozszczepił sobie jądra ?

3

Nie patrząc na konkretną architekturę procesora, bo budową mogą się różnić i nie wszystkie architektury są jawne, to ogólnie można przeprowadzić teoretycznie dowolną ilość operacji ograniczenie jest tylko w propagacji sygnału przez bramki.

Można nawet bulkiem pobrać 10 instrukcji i je równolegle rozwiązać, ale to jest znacznie trudniejsze do zaprojektowania niż zwykła maszyna stanów, ale wszystko by się równolegle odbyło.
Dużo takich operacji równoległych jest na wektorowych operacjach, a jeszcze bardziej popularne na graficznych procesorach gdzie nie potrzebujesz pętli, żeby wykonać operacji na wszystkich pixelach, z automatu każda operacja jest uruchamiana na wszystkich więc trzeba warunki policzyć dla jakich pixeli jaki efekt ma być.

Ludzki mózg działa bardzo powoli, ale za to przez ten czas wszystko jest zrównoleglone i ma czas się wykonać jest to analogiczna sytuacja.

I ogólnie jeśli propagacja sygnału w głębokość jest problemem to można też zrobić układ bardziej rozłożony na szerokość, chodź nie zawsze można tak bo wynik dalszy jest zależny od wcześniejszego, wykonanie wielu operacji np. dodania może właśnie się odbyć na szerokość całkowicie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1