Parametry procesorów - teoretyczna wydajność procesora

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? :)

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ą).

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.

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).

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.

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.

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.

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.

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

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

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