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.
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ń.
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?
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