Parametry procesorów - teoretyczna wydajność procesora

Odpowiedz Nowy wątek
2018-12-28 21:01
0

Gdzie można znaleźć (w miarę wiarygodne) informacje na temat parametrów różnych modeli procesorów Intela? Szczególnie zależy mi na wskaźniku IPC, którego nie sposób znaleźć nawet na stronie producenta, chyba, że do reszty oślepłem: Xeon E3, i7 Skylake - ze zgadywanek dla obu (AVX2 ->256b rejestry wektorowe -> 4 x double) wychodzi mi IPC ~ 4 dla arytmetyki podwójnej precyzji, co niezbyt trzyma się kupy, bo dostaję z tego teoretyczną wydajność ~57GFlops, choć z tego, co kojarzę powinno być ok. 230GFlops.

Wynik z benchmarków niestety niezbyt mnie urządza, potrzebuję wydajności teoretycznej właśnie ;)

Znalazłem artykuł na WikiChip aczkolwiek nie wiem, na ile to źródło jest wiarygodne. Dla architektury Skylake wychodziłoby, że mam ponownie AVX2, czyli 256bit rejestry wektorowe, czyli 4 liczby DP w jednym rejestrze, do tego procesor superskalarny z 2 wektorowymi FPU pod spodem, co dawałoby 2 uops / takt po 4 liczby DP -> IPC = 8 i teoretycznie ok. 20,8GFlops/rdzeń przy 2.6GHz... Obstawiam, że nawet 2-3 generacje wyżej procesor konsumencki, w dodatku mobile może wyciągać z bólem 40% wydajności procesora serwerowego na 1 rdzeniu, mylę się?

Jest na sali ktoś, kto siedzi na codzień blisko sprzętu i mógłby podpowiedzieć, czy kombinuję we właściwym kierunku? :)


Prosząc o pomoc w wiadomości prywatnej odbierasz sobie szansę na otrzymanie pomocy od kogoś bardziej kompetentnego :)
edytowany 2x, ostatnio: superdurszlak, 2018-12-28 21:19

Pozostało 580 znaków

2018-12-28 22:15
Tig
1
superdurszlak napisał(a):

Obstawiam, że nawet 2-3 generacje wyżej procesor konsumencki, w dodatku mobile może wyciągać z bólem 40% wydajności procesora serwerowego na 1 rdzeniu, mylę się?

Powołując się na informacje wygooglane na szybko:
https://en.wikipedia.org/wiki/Instructions_per_cycle
, wskaźnik IPC to wskaźnik wynikający z praktyki, z wykonania kodu.
Teoretyczną wydajność oblicza się następująco:

To get a theoretical GFLOPS (Billions of FLOPS) rating for a given CPU, multiply the number in this chart by the number of cores and then by the stock clock (in GHz) of a particular CPU model. For example, a Coffee Lake i7-8700K theoretically handles 32 Single-Precision floats per cycle, has 6 cores and a 3.7 GHz base clock. This gives it 32 x 6 x 3.7 = 710.4 GFLOPS.

Odnośnie założenia o 40% wydajności, czy masz na myśli wydajność teoretyczną, czy praktyczną?
Chciałbym zauważyć, że procesor desktop, mobile, server jest prawie zawsze rżnięty z jednego i tego samego kawałka krzemu, a dopiero proces koszykowania (binning) powoduje, że procki z lepszymi wskaźnikami typu iloraz realne TDP do taktowania, max stabilne taktowanie, powodują zakwalifikowanie danego kawałka krzemu do danego koszyka.
Różnicy w wydajności teoretycznej nie powinno być więc wcale dla tego samego taktowania, różnica w wydajności praktycznej może być ogromna, ze względu np. na rozmiar cache L3, który w procesorach serwerowych może być ogromnych rozmiarów. To czy procek śpi czekając na dane przez 20% czy 80% obliczeń ma kolosalny wpływ na realną wydajność, tj. na IPC (wydajność praktyczną).

Pozostało 580 znaków

2018-12-28 23:29
0
Tig napisał(a):

Powołując się na informacje wygooglane na szybko:
https://en.wikipedia.org/wiki/Instructions_per_cycle

Dzięki, jak szukałem haseł w stylu "Intel Skylake IPC" Google złośliwie ukrył przede mną Wikipedię. Poważnie.

Ale ok, mea culpa, użyłem sformułowania IPC na określenie wskaźnika teoretycznego, a nie praktycznego.

, wskaźnik IPC to wskaźnik wynikający z praktyki, z wykonania kodu.
Teoretyczną wydajność oblicza się następująco:

To get a theoretical GFLOPS (Billions of FLOPS) rating for a given CPU, multiply the number in this chart by the number of cores and then by the stock clock (in GHz) of a particular CPU model. For example, a Coffee Lake i7-8700K theoretically handles 32 Single-Precision floats per cycle, has 6 cores and a 3.7 GHz base clock. This gives it 32 x 6 x 3.7 = 710.4 GFLOPS.

I wszystko kręci się wokół tego, ile instrukcji zmiennoprzecinkowych procesor jest w stanie teoretycznie przemielić w jednym takcie. Problem mam ze znalezieniem wiarygodnego źródła tej informacji, nie z przemnożeniem trzech liczb. Nie kłamię.

Obstawiam, że odpowiedzią może być fpus_per_core * doubles_per_vector_register, ale nie mam całkowitej pewności i chciałbym się upewnić. Dla laptopowego Skylake i7 dawałoby to 2 FPU * 4 DP/rejestr, czyli teoretycznie 8 operacji zmiennoprzecinkowych podwójnej precyzji w cyklu, co z kolei daje ~20GFlops na jednym rdzeniu. Miałoby to sens, gdyby Xeon rzeczywiście miał większe rejestry wektorowe (a najprawdopodobniej nie ma) lub więcej potoków przetwarzania operacji wektorowych (czego nie wiem) - alternatywą jest błędna metodologia wyznaczania liczby operacji na cykl, dlatego chcę się upewnić. Oczywiście pomijam latencję, iloczyn skalarny raczej nie jest operacją zdolną rozwalić przetwarzanie potokowe.

Odnośnie założenia o 40% wydajności, czy masz na myśli wydajność teoretyczną, czy praktyczną?

Teoretyczną. Praktyczna z benchmarków i tak mnie w tym przypadku nie urządza.

Chciałbym zauważyć, że procesor desktop, mobile, server jest prawie zawsze rżnięty z jednego i tego samego kawałka krzemu, a dopiero proces koszykowania (binning) powoduje, że procki z lepszymi wskaźnikami typu iloraz realne TDP do taktowania, max stabilne taktowanie, powodują zakwalifikowanie danego kawałka krzemu do danego koszyka.

Wspaniale, tylko w tej chwili nie ma dla mnie znaczenia, czy różnice w poszczególnych modelach jednej serii wprowadzane są celowo, czy może jeden model to w rzeczywistości udane procesory z serii X, a drugi to wybrakowane procesory z serii X, w których nie działa pewien ficzer. Dla mnie istotna jest finalna specyfikacja danego modelu.

Różnicy w wydajności teoretycznej nie powinno być więc wcale dla tego samego taktowania

Pod warunkiem, że dane dwa modele faktycznie wywodzą się z jednej architektury, jednej serii i miałyby tyle samo potoków, tej samej szerokości rejestry wektorowe itp. itd. Choć i tak nie ma gwarancji, bo skoro czasem coś się rypnie i procesor ma 2 sprawne rdzenie zamiast 4 albo musi pracować na obniżonej częstotliwości, to równie dobrze może mieć 2 sprawne potoki przetwarzania zamiast 4 itd.

różnica w wydajności praktycznej może być ogromna, ze względu np. na rozmiar cache L3, który w procesorach serwerowych może być ogromnych rozmiarów. To czy procek śpi czekając na dane przez 20% czy 80% obliczeń ma kolosalny wpływ na realną wydajność, tj. na IPC (wydajność praktyczną).

Od paru miesięcy wałkuję optymalizowanie dostępu do pamięci, żeby podbić wydajność praktyczną tego i tamtego. Wprawdzie nie komercyjnie, ale i tak możemy dość odważnie założyć, że kwestia wpływu rozmiaru cache, wielodrożności, mechanizmów zwalniania cache, prefetchingu, miss rate w L1/LL cache i całej reszty zagadnień przynajmniej raz musiała obić mi się o uszy, a w dodatku nie jest odpowiedzią na mój problem.

Problem mam ze znalezieniem wiarygodnego źródła parametrów procesora ciut bardziej... szczegółowych niż te, o których każdy huczy w celach marketingowych. Potrzebuję ich po to, by wiedzieć, ile operacji zmiennoprzecinkowych procesor teoretycznie jest w stanie rozpocząć w jednym takcie, tak, by móc z tego wyznaczyć teoretyczną wydajność tego czy siamtego procesora. Czemu akurat tak - bo muszę do czegoś odnieść uzyskiwaną wydajność praktyczną. Czemu nie mogę do benchmarku - raz, bo nie ja decyduję, dwa, że i tak nie miałbym jak zrobić porządnego przy tym, co mam i w sensownym czasie.


Prosząc o pomoc w wiadomości prywatnej odbierasz sobie szansę na otrzymanie pomocy od kogoś bardziej kompetentnego :)

Pozostało 580 znaków

2018-12-29 17:15
1

Wydajność, którą obliczali przy mnie inżynierowie Intela na konfie w locie liczona była mniej więcej tak:
https://saiclearning.wordpres[...]ce-of-a-cpu-based-hpc-system/

Nie wiem czy komuś chce się zagłębiać w bardziej dokładne obliczenia.
Praktycznie i tak dużo zależy od konkretnego sprzętu (wielkość cache na rdzeń, wydajność magistrali, rodzaj RAM, FMA).
Jak chcesz kupić coś mocniejszego to raczej celuj w AVX-512.

Jeśli chcesz kupić Xeona do domu to pamiętaj, że one są słabsze niż i7/i9 w zadaniach jedno- i niewielo-rdzeniowych (np. gry).


Szacuje się, że w Polsce brakuje 50 tys. programistów

Pozostało 580 znaków

2018-12-30 22:31
Tig
0
vpiotr napisał(a):

Wydajność, którą obliczali przy mnie inżynierowie Intela na konfie w locie liczona była mniej więcej tak:
https://saiclearning.wordpres[...]ce-of-a-cpu-based-hpc-system/

Ten wzór to w zasadzie to samo co było już podawane, a @superdurszlak ma (jak rozumiem z wyjaśnień) problem ze znalezieniem wyczerpującej, wiarygodnej dokumentacji odnośnie tego, ile dokładnie tych instrukcji na cykl jest w dowolnie wybranym modelu procesora (w linku ww. będzie to składnik wzoru pt. instruction per cycle).

Praktycznie i tak dużo zależy od

Tak jak @superdurszlak pisał, nie interesuje go praktyczna wydajność, a teoretyczna.

Wracając do tematu, proponuję aby @superdurszlak poszukał informacji na forum anglojęzycznym ze względu na światowy zasięg (może Intel albo jakaś strona poważna o sprzęcie). Myślę, że wtedy warto zastanowić się nad sformułowaniem pytania, bo opis oryginalny jest mało precyzyjny, nieco chaotyczny.

edytowany 1x, ostatnio: Tig, 2018-12-30 22:32

Pozostało 580 znaków

2018-12-30 22:55
0
Tig napisał(a):

Wracając do tematu, proponuję aby @superdurszlak poszukał informacji na forum anglojęzycznym ze względu na światowy zasięg (może Intel albo jakaś strona poważna o sprzęcie). Myślę, że wtedy warto zastanowić się nad sformułowaniem pytania, bo opis oryginalny jest mało precyzyjny, nieco chaotyczny.

Od poszukiwań w źródłach anglojęzycznych zacząłem, jednak tej informacji nie znalazłem nawet w dokumentacji sprzętu u producenta. A przejrzałem zarówno specyfikację, jak i datasheets dla 6tej generacji. Jedyne, co na ten temat mam z anglojęzycznych źródeł, to wpis na WikiChip, którą linkowałem w pytaniu. Na Tom's Hardware też są raczej opisy benchmarków i ew. definicja IPC bez danych. Pomyślałem, że może ktoś z 4p się w takich rzeczach babra i wie, skąd wyciągnąć te informacje.

Anyway, problem z dokopaniem się do tej informacji występuje nie od dziś i być może nikt mi głowy nie urwie, jeśli przy tej ilości niewiadomych nie wywróżę poprawnie z tego, co mam.


Prosząc o pomoc w wiadomości prywatnej odbierasz sobie szansę na otrzymanie pomocy od kogoś bardziej kompetentnego :)
edytowany 1x, ostatnio: superdurszlak, 2018-12-30 23:00

Pozostało 580 znaków

2019-01-01 20:28
Smutny Kret
0
superdurszlak napisał(a):

Gdzie można znaleźć (w miarę wiarygodne) informacje na temat parametrów różnych modeli procesorów Intela? Szczególnie zależy mi na wskaźniku IPC, którego nie sposób znaleźć nawet na stronie producenta, chyba, że do reszty oślepłem: Xeon E3, i7 Skylake - ze zgadywanek dla obu (AVX2 ->256b rejestry wektorowe -> 4 x double) wychodzi mi IPC ~ 4 dla arytmetyki podwójnej precyzji, co niezbyt trzyma się kupy, bo dostaję z tego teoretyczną wydajność ~57GFlops, choć z tego, co kojarzę powinno być ok. 230GFlops.

Fantastyka.

Nawet 10GFlops nie wyciągnie żaden pecet.

co łatwo uzasadnić: przepustowość ramu to jakieś 16GB/s w porywach, co daje raptem 4GFlops, bo float ma 4 bajty.

i żadna kosmiczna liczba rejestrów, ani rdzeni, nic tu nie pomoże, niestety.

Pozostało 580 znaków

2019-01-01 20:43
1
Smutny Kret napisał(a):

Fantastyka.

Nawet 10GFlops nie wyciągnie żaden pecet.

Odpal LINPACK / LAPACK, to się zdziwisz :)

co łatwo uzasadnić: przepustowość ramu to jakieś 16GB/s w porywach, co daje raptem 4GFlops, bo float ma 4 bajty.

i żadna kosmiczna liczba rejestrów, ani rdzeni, nic tu nie pomoże, niestety.

Po pierwsze, pamięć wielokanałowa może wyciągnąć znacznie więcej. 16GB/s to chyba na jeden kanał.

Po drugie, dużo zależy od tego, ile danych i które dane zmieścisz w cache procesora. To samo dotyczy rejestrów.

Po trzecie, równie dużo zależy od tego, ile operacji będziesz w stanie wykonać za jednym zamachem, pobierając/zapisując daną tylko raz w RAM.

Po czwarte, każdy rdzeń ma swoją pamięć cache, więc wykorzystując 4 rdzenie i odpowiednio dzieląc zadanie możesz wykorzystać 4x więcej L1 cache, która jest najszybsza (i najmniejsza), niż z jednym rdzeniem.


Prosząc o pomoc w wiadomości prywatnej odbierasz sobie szansę na otrzymanie pomocy od kogoś bardziej kompetentnego :)
Smutny Kret komentuje praktyczną wydajność, podczas gdy temat dotyczy teoretycznej. Ja bym odpowiedział tak: pytanie dotyczy wydajności teoretycznej, a więc takiej, w której zakładamy, że występujące w praktyce oczekiwanie na załadowanie danych z RAM/cache nie występuje wcale. - Tig 2019-01-01 22:44
Smutny Kret przy okazji prawi kompletne farmazony twierdząc, że praktyczna wydajność rzędu 10GFlops jest nieosiągalna, bo na więcej nie pozwoli RAM. Równie dobrze można by powiedzieć, że żaden superkomputer nie przekroczy ~1,25 GFlops, jeśli serwery będą połączone siecią 80Gbit/s i żadna liczba rdzeni nie pomoże. - superdurszlak 2019-01-01 23:04

Pozostało 580 znaków

2019-01-02 02:17
Smutny Kret
0

Te hipotetyczne osiągi wyliczasz tak:

4 GHz x 8 floatów (na rejestr 256bits) x 4 (cztery operacje są robione naraz) i x 8 rdzeni =
4 x 8 x 4 x 8 = 32 x 32 = 1024GFlops

Pozostało 580 znaków

2019-01-02 09:37
0

To chyba nie do konca to o co pytasz, ale fajna stronka do szybkiego porownania konkretnych CPU: https://cpu.userbenchmark.com[...]l-Core2-Quad-Q6600/3502vs1980

Pozostało 580 znaków

2019-01-02 13:38
0
Smutny Kret napisał(a):

Fantastyka.

Nawet 10GFlops nie wyciągnie żaden pecet.

co łatwo uzasadnić: przepustowość ramu to jakieś 16GB/s w porywach, co daje raptem 4GFlops, bo float ma 4 bajty.

i żadna kosmiczna liczba rejestrów, ani rdzeni, nic tu nie pomoże, niestety.

Gdyby przepustowość ALU czy FPU miała być zawsze ograniczana przepustowością RAMu to nie tylko dla CPU wskaźniki by spadły. Dla przykładu Nvidia Quadro GV100 ma przepustowość RAM 868.4 GB/s a podaną przez producenta wydajność w liczbach pojedynczej precyzji 16671 GFLOPS (przy włączonym turbo). Według twoich równań FLOPSów powinno być 868.4 / 4 (ilość bajtów w SP float) = 217 GFLOPS czyli wynik prawie 80x mniejszy niż podawany przez producenta.

Algorytmy wektorowe projektuje się tak, by miały wysoki wskaźnik FLOP/byte (inaczej - miały wysoką Arithmetic Intensity), obojętnie czy na CPU, GPU, DSP, FPGA, itd byte tutaj oznacza bajt przesłany z lub do głównego RAMu. Cache procesora (znowu - obojętne czy CPU, GPU, czy czegoś innego) jest zawsze wielokrotnie szybsze niż główny RAM (inaczej miałoby niewiele sensu, no może oprócz niedużego obniżenia poboru prądu).

Inną sprawą jest to, że CPU wcale nie ładuje pamięci w 4 bajtowych kawałkach. Minimum to jedna linia pamięci podręcznej (cache line) co dzisiaj typowo wynosi 64 bajty. Ponadto każde oczekiwanie na RAM to wiele straconych taktów, a nawet spekulatywne wykonywanie nie sprawi, że losowy dostęp do pamięci osiągnie maksymalną wydajność - ograniczeniem tutaj jest limit na ilość jednoczesnych odwołań do pamięci. Stąd maksymalną przepustowość uzyskuje się głównie, gdy zdecydowana większość dostępu do pamięci jest liniowa (tzn wczytujemy lub zapisujemy strumieniowo w miarę duże bloki pamięci). Utrzymywanie maksymalnie liniowego dostępu do głównego RAMu jest więc równie ważne co redukowanie dostępu do tego RAMu w ogóle (poprzez zwiększanie hit ratio dla cache procesora).


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit, 2019-01-02 13:38

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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

Robot: CCBot