Wydajność procesora

0

Ostatnio natknąłem się na wikipedi na taką ciekawostek i od kilku dni mnie nortuje. Od czego do zależy ?

"Wydajność procesora nie zawsze idzie w parze z jego taktowaniem, np. procesor PA-RISC 8600 przy taktowaniu 552 MHz jest blisko dwukrotnie wydajniejszy w obliczeniach zmiennoprzecinkowych od procesora Pentium III 800 MHz."

3

W wielkim skrócie: zależy od tego ile rzeczy można wykonać w jednym takcie. Jeżeli jeden procesor wykonuje jakąś operację w jednym takcie a drugi w dwóch, to ten pierwszy będzie bardziej wydajny przy takiej samej częstotliwość.

Tak samo wygląda to przy GPU. Częstotliwości są tam mniejsze niż w CPU, ale wydajność dla obliczeń zmiennoprzecinkowych pojedynczej precyzji dużo większa. Tam akurat osiąga się to przez zrównoleglenie, ale sprowadza się do tego samego: więcej operacji w jednym takcie.

1

Zależy też jak zdefiniujesz 'wydajność'. Przykładowo GPU jest nastawione na wysoką przepustowość (t.j. wrzucasz rownolegle masę obliczeń i dostajesz szybko odpowiedź) a CPU na niski czas wykonania pojedyńczych instrukcji.

10
Wicekq napisał(a):

Ostatnio natknąłem się na wikipedi na taką ciekawostek i od kilku dni mnie nortuje. Od czego do zależy ?

"Wydajność procesora nie zawsze idzie w parze z jego taktowaniem, np. procesor PA-RISC 8600 przy taktowaniu 552 MHz jest blisko dwukrotnie wydajniejszy w obliczeniach zmiennoprzecinkowych od procesora Pentium III 800 MHz."

Oj panie, temat jest tak złożony, że nie da się tego dobrze i krótko opisać.

Generalnie jak porównasz np procesor Atom pierwszej generacji oraz Intel Core i7 najnowszej generacji dając im takie samo taktowanie to zauważysz, że Core i7 działa wielokrotnie szybciej, nawet jeśli obliczenia są jednowątkowe i nie wykorzystują więcej pamięci podręcznej niż ta w Atomie.

W zasadzie od czasów Pentium (pierwszego) wszystkie procesory x86 Intela potrafią czasami wykonać więcej niż jedną instrukcję na takt. Najnowsze generacje procków potrafią zdekodować 4 instrukcje w cyklu (do tego mają pamięć podręczną na zdekodowane instrukcje) do tak zwanych mikrooperacji, potrafią wykonać chyba do 8 mikrooperacji na takt (na jednym rdzeniu), mają wielopoziomowe przewidywanie skoków (źle przewidziany skok oznacza konieczność zresetowania całego potoku wykonawczego, co może trwać nawet dziesiątki taktów) oraz dostępu do pamięci z wyprzedzeniem (dostęp do pamięci RAM to czasem setki taktów, warto je robić z wyprzedzeniem, dzięki czemu CPU się nie nudzi), robią wykonywanie spekulatywne (co chyba omija problem źle przewidzianych skoków dla prostych rozgałęzień), mają bufor dla zapisu do pamięci (tzn to jest coś w stylu asynchronicznego zapisu do RAMu, ale są dodatkowe układy, które gwarantują spójność pamięci poprzez komunikację między różnymi poziomami pamięci podręcznych), itp itd

Jeśli chodzi o obliczenia zmiennoprzecinkowe to tutaj jest nieco inaczej, bo np skoki czy dostęp do pamięci nie zaliczają sie do operacji zmiennoprzecinkowych. Za to bardzo często operacje zmiennoprzecinkowe są robione na małych wektorach danych, np 4 x 32-bitowy float, co w sprzyjających warunkach daje 4x kopa wydajnościowego. Najnowsze rozszerzenia AVX od Intela pozwalają chyba na wektory 16 x 32-bit float (albo coś w ten deseń, efektywnie mamy więc procesor 512-bitowy, pod pewnym względem). Obliczenia na wektorach też mogą być superskalarne, czyli np procesor może mieć możliwość wykonywania operacji na więcej niż jednym wektorze naraz.

Niektóre instrukcje zajmują dużo więcej niż jeden takt. Są to np liczenia sinusów, dzielenie, pierwiastkowanie, etc Zależnie od implementacji taka instrukcja może zabierać więcej taktów albo mniej. Generalnie jak się ma większy budżet tranzystorów to można zaszaleć z szybszym algorytmem, mając mniejszy budżet trzeba wymyślić coś sprytnego, ale jednocześnie lekkiego. Budżet tranzystorów determinuje także obecność wszystkich trików, które opisałem powyżej. Im więcej tranzystorów, tym układ droższy w produkcji i wydzielający więcej ciepła (choć z tym to nie do końca prawda, bo ciepło jest wprost proporcjonalne do mocy, a ta od kwadratu napięcia i wprost od taktowania; maksymalne stabilne taktowanie zależy od napięcia i chłodzenia, więc małe zmiany taktowania mogą skutkować dużymi zmianami w poborze prądu; można zrobić sprytniejszy układ i go niżej taktować, dostając lepszą wydajność i mniejszy pobór prądu).

Warto poczytać to: http://agner.org/optimize/

0

To zależy (przynajmniej) od dwóch rzeczy:
1.Mikrooptymalizacji, które wykonuje procesor (przewidywanie branchy i cała masa innych).
2.Oraz tego, co już wspomniał @Endrju: każda operacja zajmuje określoną liczbę taktów procesora i (może) różni(ć) się w zależności od architektury oraz samego CPU, stąd bywa tak, że procesory o słabszym taktowaniu są wydajniejsze od tych z taktowaniem (czasami znacznie) wyższym.

2

Bardzo dobrym przykładem, że wydajność niekoniecznie idzie w parze z taktowaniem był Pentium IV. Jego poprzednik, czyli Pentium III w przypadku porównania wydajności zegar w zegar był w większości przypadków wydajniejszy.

0

Lekcje na dziś:

  • superskalarność
  • wielopotokowość
  • out-of-order execcution
  • branch prediction
    (o takich oczywistych sprawach jak cache nawet nie mówie)
0

na chłopski rozum: co z tego ,że procesor potrafi wykonać więcej cyklów w jedną sekundę(taktowanie) jeśli w jednym cyklu popełnia więcej błędów(tzn obliczenia są wykonywane gorszym sposobem) od procesora nowszej generacji który ma lepszy "algorytm obliczania". Jednym słowem liczy się jakoś obliczeń(tzn lepszy i bardziej zoptymalizowany algorytm ich robienia) a nie ilość operacji wykonanych w jedną sekundę.

1

@robcio WTF? Jakich znów błędów? Jaki algorytm obliczania? o_O Ty w ogóle rozumiesz jak działa procesor?

2

Bardzo duży wpływ ma na pewno struktura i wielkości cache L1/L2/L3/L4 oraz na ile "inteligentne" są algorytmy zarządzające tym wszystkim (prefetching). Dostęp do cache L1 to typowo ok. 1 ns, dostęp do RAM 50 ns. Cache to niestety również jeden z najdroższych elementów procesora. Niedawno robiłem testy na swoim Core i7 - zoptymalizowałem algorytm pod maksymalnie efektywne wykorzystanie cache L1 i... okazało się, że wcale zawrotnego przyspieszenia nie ma, bo i7 naprawdę nieźle radzi sobie z prefetchingiem. Nie jestem tego pewien, ale ten procesor zachowuje się tak, jakby sam wykrywał wszystkie wskaźniki, które są w obiekcie (podejrzewam że analizuje całą bieżącą linię załadowaną do cache) i jeszcze zanim w ogóle program dojdzie do miejsca ich dereferencji, wskazywane adresy już są ładowane do L1. Po wyjściu poza zakres L1, ba, nawet poza L3 program spowalniał, ale raptem 2-3x (a spodziewałem się raczej 10-20x).

BTW: Haswell ma mieć 128 MB cache L4. Ciekawe jakiego to będzie dawać kopa programom, które do tej pory nie mieściły się w L3 (6-12 MB). Podejrzewam, że dla wielu programów wtedy wszystkie dane programu i cały używany kod zmieszczą się w L4.

0

BTW: Haswell ma mieć 128 MB cache L4. Ciekawe jakiego to będzie dawać kopa programom, które do tej pory nie mieściły się w L3 (6-12 MB). Podejrzewam, że dla wielu programów wtedy wszystkie dane programu i cały używany kod zmieszczą się w L4.

Takie Haswelle już są dla laptopów. L4 daje zauważalnego kopa w zasadzie tylko gdy jest używana integra, w zadaniach niegraficznych zysk jest niewielki (< 10%).
http://www.anandtech.com/show/6993/intel-iris-pro-5200-graphics-review-core-i74950hq-tested/3
http://www.anandtech.com/show/6993/intel-iris-pro-5200-graphics-review-core-i74950hq-tested/18
L4 jest typu eDRAM, w przeciwieństwie do L1, L2 i L3 które są typu SRAM.

0

mam pytania jak już jestem w temacie. Czy procesor może się zużyć po jakimś czasie? Załóżmy, że ktoś korzystał z procesora intensywnie przez 40 lat to czy mogłoby się zdarzyć ,że zacząłby on robić błędy w obliczeniach. Wiadomo np ,że podkręcanie procesora zmniejsza jego żywotność. Czyli, że im mniejsze taktowanie i tym lepiej zbudowany procek tym jest on w stanie więcej wytrzymać bo się mniej zużywa? Słyszałem, że AMD zbudowało procesor który jest taktowany domyślnie zegarem 5GHz i się oni tym chwalą. Jest to powód do dumy? Mi się wydaje, że nie.

1

Z tego co czytałem, to ludzie którzy kręcą procki obserwują zmniejszoną żywotność, objawiającą się tym, że z czasem muszą zmniejszać takty i/ lub zwiększać napięcie, aby utrzymać stabilność. Niemniej procki, które nie są żyłowane potrafią żyć bardzo długo, np dziesiątki lat.

A prawdopodobieństwo, że będziesz dostawał masę cichych błędów jest znikome. Zwykle błędy w obliczeniach skutkują natychmiastowym zwisem systemu i/ lub restartem.

2

Procesor, a w zasadzie każdy układ zbudowany na warstwach różnie domieszkowanego krzemu (czy innego materiału) "zużywa" się. Zużywanie się oznacza, że domieszki determinujące typ przewodnictwa danej warstwy (p czy n) wędrują, dyfundują. Im wyższa temperatura tym szybciej zachodzi ten proces. Jego efektem jest pogorszenie parametrów tranzystora/diody/tyrystora, czyli spadkiem wzmocnienia, niższym napięciem przebicia itp. Niestety wiedza wkuta w męczarniach kilkanaście lat temu dość szybko wyparowała i nie pamiętam więcej szczegółów.

0

Wydaje mi się, że jeszcze nie ma dokładnych badań na temat trwałości elektroniki na przestrzeni kilkuset lat…, ale urządzenie wyprodukowane kilkadziesiąt lat temu i użytkowane rozsądnie (czyli nie 24h/d i bez podkręcania), a przechowywane w warunkach trochę lepszych niż zakurzona piwnica, powinno spokojnie jeszcze działać (z wyjątkiem baterii).

Jeśli mówimy o przedziale 20-40 lat to procesor jest raczej „wieczny”. Bardziej bym się martwił o urządzenia mechaniczne: dysk twardy i wszelkie wiatraczki (jeśli były intensywnie użytkowane, bo leżeć mogą długo).

Problemem były też wadliwe kondensatory z początku lat 2000, ale z tych to co miało paść już zdążyło paść.

Dzisiejszy sprzęt z normami RoHS będzie raczej znacznie mniej trwały.

W skrócie: nic nie jest odporne na koniec świata, ale po latach większość urządzeń staje się przestarzała, bezużyteczna, niepraktyczna, albo po prostu mało wartościowa, że tylko fanatyk-kolekcjoner będzie się martwił że coś się już zepsuło.

0

Słyszałem o jakiś niby wadliwych seriach pentiuma co to robiły błędy w obliczeniach już nie pamiętam jaki to dokłądnie byl procek. . Może ktoś przybliżyć temat

0

http://en.wikipedia.org/wiki/Pentium_FDIV_bug
Po wykryciu błędu Intel zaoferował każdemu chętnemu wymianę procka na pozbawiony błędu.
edit: za późno :P

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