FLOPS na cykl dla sandy-bridge i haswell SSE2 / AVX/AVX2

Jestem zdezorientowany, ile flopów na cykl na rdzeń można zrobić z Sandy-Bridge i Haswell. Jak rozumiem to z SSE powinno być 4 flops na cykl na rdzeń dla SSE i 8 flops na cykl na rdzeń dla AVX/AVX2.

To wydaje się być zweryfikowane tutaj, Jak osiągnąć teoretyczne maksimum 4 flopów na cykl? , a tu, [[5]}Specyfikacja procesora Sandy-Bridge .

Jednak poniższy link wydaje się wskazywać, że Sandy-bridge może wykonać 16 flopów na cykl na rdzeń i Haswell 32 flops na cykl na rdzeń http://www.extremetech.com/computing/136219-intels-haswell-is-an-unprecedented-threat-to-nvidia-amd.

Czy ktoś może mi to wyjaśnić?

Edytuj: Teraz rozumiem, dlaczego byłem zdezorientowany. Myślałem, że termin FLOP odnosi się tylko do pojedynczego zmiennoprzecinkowego (SP). Teraz widzę, że test na Jak osiągnąć teoretyczne maksimum 4 flopów na cykl? są w rzeczywistości na podwójnej zmiennoprzecinkowej (DP), więc osiągają 4 DP FLOPs / cykl dla SSE i 8 DP FLOPs / cykl dla AVX. Ciekawie byłoby przerobić te testy na SP.

Author: Community, 2013-03-27

2 answers

Oto liczby flopów dla kilku ostatnich mikroarchitektur procesora i Wyjaśnienie, jak je osiągnąć:

Intel Core 2 i Nehalem:

  • 4 DP FLOPs / cykl: 2-szerokie SSE2 dodawanie + 2-szerokie SSE2 mnożenie
  • 8 SP FLOPs / cykl: 4-szerokie dodawanie SSE + 4-szerokie mnożenie SSE

Intel Sandy Bridge/Ivy Bridge:

  • 8 DP FLOPs / cykl: 4-szerokie dodawanie AVX + 4-szerokie mnożenie AVX
  • 16 SP FLOPs / cykl: 8-wide AVX addition + 8-szerokie mnożenie AVX

Intel Haswell/Broadwell/Skylake/Kaby Lake:

  • 16 DP FLOPs / cykl: dwie 4-szerokie instrukcje FMA (fused multiply-add)
  • 32 SP FLOPs / cykl: dwie 8-szerokie instrukcje FMA (fused multiply-add)

AMD K10:

  • 4 DP FLOPs / cykl: 2-szerokie SSE2 dodawanie + 2-szerokie SSE2 mnożenie
  • 8 SP FLOPs / cykl: 4-szerokie dodawanie SSE + 4-szerokie mnożenie SSE

AMD Bulldozer / Piledriver/Steamroller / Excavator, na moduł (dwa rdzenie):

  • 8 DP FLOPs / cykl: 4-szeroka FMA
  • 16 klapek SP / cykl: 8-szeroka FMA

AMD Ryzen

  • 8 DP FLOPs / cykl: 4-szeroka FMA
  • 16 klapek SP / cykl: 8-szeroka FMA

Intel Atom (Bonnell / 45nm, Saltwell/32nm, Silvermont / 22nm):

  • 1.5 DP FLOPs / cykl: dodawanie skalarne SSE2 + mnożenie skalarne SSE2 co drugi cykl
  • 6 SP FLOPs / cykl: 4-szerokie dodawanie SSE + 4-szerokie mnożenie SSE co drugi Cykl

AMD Bobcat:

  • 1.5 DP FLOPs / cykl: dodawanie skalarne SSE2 + mnożenie skalarne SSE2 co drugi cykl
  • 4 SP FLOPs / cykl: 4-wide SSE dodawanie co drugi cykl + 4-wide SSE mnożenie co drugi cykl

AMD Jaguar:

  • 3 klapki DP / cykl: 4-szerokie dodawanie AVX co drugi cykl + 4-szerokie mnożenie AVX w czterech cyklach
  • 8 SP FLOPs / cykl: 8-wide AVX dodawanie co drugi cykl + 8-wide AVX mnożenie co inny cykl

ARM Cortex-A9:

  • 1.5 DP FLOPs / cykl: dodawanie skalarne + mnożenie skalarne co drugi cykl
  • 4 SP FLOPs / cykl: 4 - wide Neon dodawanie co drugi cykl + 4-wide Neon mnożenie co drugi cykl

ARM Cortex-A15:

  • 2 DP FLOPs / cykl: scalar FMA lub Skalar multiply-add
  • 8 SP FLOPs / cykl: 4-wide NEONv2 FMA lub 4-wide NEON multiply-add

Qualcomm Krait:

  • 2 DP FLOPs / cykl: scalar FMA lub Skalar multiply-add
  • 8 SP FLOPs / cykl: 4-wide NEONv2 FMA lub 4-wide NEON multiply-add

IBM PowerPC A2 (Blue Gene / Q), na rdzeń:

  • 8 DP FLOPs / cykl: 4-szeroka QPX FMA w każdym cyklu
  • elementy SP są rozszerzane na DP i przetwarzane na tych samych jednostkach

IBM PowerPC A2 (Blue Gene / Q), na wątek:

  • 4 DP FLOPs / cykl: 4-szeroka QPX FMA co drugi cykl
  • elementy SP są rozszerzane na DP i przetwarzane na tym samym jednostki

Intel Xeon Phi (Knights Corner), na rdzeń:

  • 16 DP FLOPs / cykl: 8-szeroka FMA w każdym cyklu
  • 32 Klapki SP / cykl: 16-szeroka FMA w każdym cyklu

Intel Xeon Phi (Knights Corner), na wątek:

  • 8 DP FLOPs / cykl: 8-szeroka FMA co drugi cykl
  • 16 SP FLOPs / cykl: 16-szeroka FMA co drugi cykl

Intel Xeon Phi (Knights Landing), na rdzeń:

  • 32 DP FLOPs / cykl: dwa 8-szerokie FMA w każdym cyklu
  • 64 SP FLOPs / cykl: dwa 16-szerokie FMA w każdym cyklu

Powodem, dla którego dla IBM Blue Gene/Q i Intel Xeon Phi (Knights Corner) istnieją punkty odniesienia dla wątków i rdzeni, jest to, że rdzenie te mają wyższy wskaźnik emisji instrukcji podczas uruchamiania więcej niż jednego wątku na rdzeń.

 100
Author: Marat Dukhan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-06 09:12:56

Przepustowość dla Haswella jest niższa dla dodawania niż dla mnożenia i FMA. Istnieją dwie jednostki mnożenia / FMA, ale tylko jedna jednostka dodawania f.p. Jeśli twój kod zawiera głównie dodatki, musisz zastąpić je instrukcjami FMA mnożnikiem 1.0, aby uzyskać maksymalną przepustowość.

Opóźnienie instrukcji FMA na Haswella wynosi 5, a przepustowość 2 na zegar. Oznacza to, że musisz zachować 10 operacji równoległych, aby uzyskać maksymalną przepustowość. Jeśli, na przykład, chcesz dodać bardzo długą listę numerów f. p. , musisz podzielić ją na dziesięć części i użyć dziesięciu rejestrów akumulatorów.

To rzeczywiście możliwe, ale kto zrobiłby taką dziwną optymalizację dla jednego konkretnego procesora?

 18
Author: A Fog,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-24 13:35:59