AVX -512 - AVX-512
AVX-512 jsou 512bitová rozšíření 256bitových pokročilých vektorových rozšíření SIMD instrukce pro architekturu instrukční sady x86 (ISA) navržené společností Intel v červenci 2013 a implementované v procesorech Intel Xeon Phi x200 (Knights Landing) a Skylake-X ; to zahrnuje řadu Core-X (kromě Core i5-7640X a Core i7-7740X), stejně jako novou řadu Xeon Scalable Processor Family a Xeon D-2100 Embedded.
AVX-512 není první 512bitovou instrukční sadou SIMD, kterou Intel představil v procesorech: dřívější 512bitové instrukce SIMD používané v první generaci koprocesorů Xeon Phi , odvozených z projektu Intel Larrabee , jsou podobné, ale nejsou binárně kompatibilní a pouze částečně kompatibilní se zdrojem.
AVX-512 se skládá z několika rozšíření, která mohou být implementována nezávisle. Tato politika je odklonem od historického požadavku implementace celého bloku instrukcí. Všechny implementace AVX-512 vyžadují pouze základní rozšíření AVX-512F (AVX-512 Foundation).
Instrukční sada
Instrukční sada AVX-512 se skládá z několika samostatných sad, z nichž každá má svůj vlastní jedinečný bit funkce CPUID; jsou však obvykle seskupeny podle generace procesoru, která je implementuje.
- F, CD, ER, PF
- Představeno s Xeon Phi x200 (Knights Landing) a Xeon Gold/Platinum ( Skylake SP „Purley“), přičemž poslední dva (ER a PF) jsou specifické pro Knights Landing.
- AVX-512 Foundation (F) -rozšiřuje většinu 32bitových a 64bitových instrukcí AVX o kódovací schéma EVEX na podporu 512bitových registrů, operačních masek, vysílání parametrů a vestavěného zaokrouhlování a řízení výjimek, implementuje Knights Landing a Skylake Xeon
- Pokyny k detekci konfliktů AVX-512 (CD) -efektivní detekce konfliktů umožňující vektorizaci více smyček , implementované Knights Landing a Skylake X
- AVX-512 Exponenciální a reciproční pokyny (ER) -exponenciální a reciproční operace navržené tak, aby pomohly implementovat transcendentální operace, implementované Knights Landing
- AVX-512 Prefetch Instructions (PF) -nové možnosti předběžného načtení, implementované Knights Landing
- VL, DQ, BW
- Představeno se Skylake X a Cannon Lake .
- Rozšíření vektorové délky AVX-512 (VL) -rozšiřuje většinu operací AVX-512 také na registry XMM (128bitové) a YMM (256bitové)
- AVX-512 Doubleword and Quadword Instructions (DQ)-přidává nové 32bitové a 64bitové instrukce AVX-512
- AVX-512 Byte and Word Instructions (BW) -rozšiřuje AVX-512 tak, aby pokryl 8bitové a 16bitové celočíselné operace
- IFMA, VBMI
- Představeno s Cannon Lake .
- AVX-512 Integer Fused Multiply Add (IFMA) -fúzované násobení celých čísel pomocí 52bitové přesnosti.
- Pokyny k manipulaci s vektorovými bajty AVX-512 (VBMI) přidávají pokyny pro vektorovou permutaci bajtů, které nebyly v AVX-512BW přítomny.
- 4VNNIW, 4FMAPS
- Představeno s Knights Mill .
- AVX -512 Pokyny pro vektorovou neuronovou síť Variabilní přesnost slova (4VNNIW) - vektorové instrukce pro hluboké učení, vylepšené slovo, variabilní přesnost.
- AVX -512 Fused Multiply Accumulation Packed Single Precision (4FMAPS) - vektorové instrukce pro hluboké učení, plovoucí desetinnou čárkou, jedinou přesnost.
- VPOPCNTDQ
- Vektorové instrukce pro počet obyvatel . Představeno s Knights Mill a Ice Lake .
- VNNI, VBMI2, BITALG
- Představeno s Ice Lake.
- AVX -512 Vector Neural Network Instructions (VNNI) - vektorové instrukce pro hluboké učení.
- AVX -512 Vector Byte Manipulation Instructions 2 (VBMI2) - byte/word load, store and concatenation with shift.
- AVX -512 Bit Algorithms (BITALG) - instrukce pro manipulaci s bity /slovy s bity rozšiřující VPOPCNTDQ.
- VP2INTERSECT
- Představeno s Tiger Lake.
- Křižovatka vektorových párů AVX-512 s párem registrů masky (VP2INTERSECT) .
- GFNI, VPCLMULQDQ, VAES
- Představeno s Ice Lake.
- Nejedná se o funkce AVX-512 samy o sobě. Spolu s AVX-512 umožňují verze kódovaných EVEX instrukcí GFNI, PCLMULQDQ a AES.
Kódování a funkce
VEX předpona používaná AVX a AVX2, zatímco pružná, neměl dostatek místa pro funkce Intel chce přidat do AVX-512. To je přimělo definovat novou předponu s názvem EVEX .
Ve srovnání s VEX přináší EVEX následující výhody:
- Rozšířené kódování registrů umožňující 32 512bitových registrů.
- Přidává 8 nových registrů opmask pro maskování většiny pokynů AVX-512.
- Přidá nový skalární režim paměti, který automaticky provádí vysílání.
- Přidává prostor pro explicitní ovládání zaokrouhlování v každé instrukci.
- Přidá nový režim adresování paměti s komprimovaným výtlakem .
Rozšířené registry, bit šířky SIMD a registry opmask AVX-512 jsou povinné a všechny vyžadují podporu operačního systému.
Režimy SIMD
Instrukce AVX-512 jsou navrženy tak, aby se mísily se 128/256bitovými instrukcemi AVX/AVX2 bez penalizace za výkon. Rozšíření AVX-512VL však umožňují použití instrukcí AVX-512 na 128/256bitových registrech XMM/YMM, takže většina instrukcí SSE a AVX/AVX2 má nové verze AVX-512 kódované předponou EVEX, které umožňují přístup k novým funkcím jako je opmask a další registry. Na rozdíl od AVX-256, nové instrukce nemají nové mnemotechnické pomůcky, ale sdílejí jmenný prostor s AVX, takže rozdíl mezi VEX a EVEX kódovanými verzemi instrukce je ve zdrojovém kódu nejednoznačný. Protože AVX-512F funguje pouze na 32 a 64bitových hodnotách, pokyny SSE a AVX/AVX2, které fungují na bajtech nebo slovech, jsou k dispozici pouze s příponou AVX-512BW (podpora Byte & Word).
název | Rozšiřující sady | Registry | Typy |
---|---|---|---|
Starší SSE | SSE-SSE4.2 | xmm0-xmm15 | jediné plováky. Ze SSE2: bajty, slova, dvojslova, čtyřslovna a dvojité plováky. |
AVX-128 (VEX) | AVX, AVX2 | xmm0-xmm15 | bajty, slova, dvojslova, čtyřslovna, jednoduché plováky a dvojité plováky. |
AVX-256 (VEX) | AVX, AVX2 | ymm0-ymm15 | jednoduchý a dvojitý plovák. Z AVX2: bajty, slova, dvojslova, čtyřslovna |
AVX-128 (EVEX) | AVX-512VL | xmm0-xmm31 (k1-k7) | doublewords, quadwords, single float a double float. S AVX512BW: bajty a slova |
AVX-256 (EVEX) | AVX-512VL | ymm0-ymm31 (k1-k7) | doublewords, quadwords, single float a double float. S AVX512BW: bajty a slova |
AVX-512 (EVEX) | AVX-512F | zmm0-zmm31 (k1-k7) | doublewords, quadwords, single float a double float. S AVX512BW: bajty a slova |
Rozšířené registry
511 256 | 255 128 | 127 0 |
ZMM0 | YMM0 | XMM0 |
ZMM1 | YMM1 | XMM1 |
ZMM2 | YMM2 | XMM2 |
ZMM3 | YMM3 | XMM3 |
ZMM4 | YMM4 | XMM4 |
ZMM5 | YMM5 | XMM5 |
ZMM6 | YMM6 | XMM6 |
ZMM7 | YMM7 | XMM7 |
ZMM8 | YMM8 | XMM8 |
ZMM9 | YMM9 | XMM9 |
ZMM10 | YMM10 | XMM10 |
ZMM11 | YMM11 | XMM11 |
ZMM12 | YMM12 | XMM12 |
ZMM13 | YMM13 | XMM13 |
ZMM14 | YMM14 | XMM14 |
ZMM15 | YMM15 | XMM15 |
ZMM16 | YMM16 | XMM16 |
ZMM17 | YMM17 | XMM17 |
ZMM18 | YMM18 | XMM18 |
ZMM19 | YMM19 | XMM19 |
ZMM20 | YMM20 | XMM20 |
ZMM21 | YMM21 | XMM21 |
ZMM22 | YMM22 | XMM22 |
ZMM23 | YMM23 | XMM23 |
ZMM24 | YMM24 | XMM24 |
ZMM25 | YMM25 | XMM25 |
ZMM26 | YMM26 | XMM26 |
ZMM27 | YMM27 | XMM27 |
ZMM28 | YMM28 | XMM28 |
ZMM29 | YMM29 | XMM29 |
ZMM30 | YMM30 | XMM30 |
ZMM31 | YMM31 | XMM31 |
Šířka souboru registru SIMD se zvětší z 256 bitů na 512 bitů a rozšíří se z 16 na celkem 32 registrů ZMM0-ZMM31. Tyto registry lze adresovat jako 256bitové registry YMM z rozšíření AVX a 128bitové registry XMM z rozšíření Streaming SIMD Extensions a starší instrukce AVX a SSE lze rozšířit tak, aby fungovaly na dalších 16 registrech XMM16-XMM31 a YMM16-YMM31 při použití EVEX zakódovaná forma.
Registruje masku
Většina instrukcí AVX-512 může indikovat jeden z 8 registrů opmask (k0 – k7). U instrukcí, které používají registr masky jako opmask, je registr 'k0' speciální: napevno zakódovaná konstanta používaná k označení nemaskovaných operací. U ostatních operací, jako jsou ty, které zapisují do registru opmask nebo provádějí aritmetické nebo logické operace, je 'k0' fungující, platný registr. Ve většině instrukcí se opmask používá k ovládání, které hodnoty jsou zapsány do cíle. Příznak ovládá chování opmask, které může být buď „nula“, což vynuluje vše, co maska nevybere, nebo „sloučit“, což ponechá vše, co nebylo vybráno, nedotčené. Chování sloučení je totožné s pokyny pro míchání.
Registry opmask jsou obvykle 16 bitů široké, ale s rozšířením AVX-512BW mohou mít až 64 bitů. Kolik bitů se ve skutečnosti použije, však závisí na vektorovém typu maskovaných pokynů. U 32bitových jednoduchých nebo dvojitých slov se 16 bitů používá k maskování 16 prvků v 512bitovém registru. Pro dvojitá plovoucí a čtyřčlenná slova se používá nejvýše 8 bitů masky.
Registr opmask je důvodem, proč bylo do AVX-512 přidáno několik bitových instrukcí, které přirozeně nemají žádnou šířku prvku. Například bitové AND, NEBO nebo 128bitové shuffle nyní existují ve dvouslovných i čtyřslovných variantách, přičemž jediným rozdílem je konečné maskování.
Nové pokyny pro maskování
Registry opmask mají nové mini rozšíření pokynů působících přímo na nich. Na rozdíl od ostatních instrukcí AVX-512 jsou všechny tyto instrukce kódovány VEX. Počáteční pokyny k maskování jsou všechny 16bitové (Word) verze. S AVX-512DQ byly přidány 8bitové (bajtové) verze, aby lépe odpovídaly potřebám maskování 8 64bitových hodnot, a s AVX-512BW byly přidány 32bitové (dvojité) a 64bitové (čtyřjádrové) verze, aby mohly maskovat až 64 8bitových hodnot. Pokyny KORTEST a KTEST lze použít k nastavení příznaků x86 na základě registrů masky, takže je lze použít společně s instrukcemi x86 větví a podmíněných instrukcí.
Návod | Sada rozšíření | Popis |
---|---|---|
KAND
|
F | Bitově logické A masky |
KANDN
|
F | Bitově logické A NE masky |
KMOV
|
F | Přesun z a do registrů masek nebo registrů pro obecné účely |
KUNPCK
|
F | Rozbalte pro registry masek |
KNOT
|
F | NENÍ masková registrace |
KOR
|
F | Bitově logické NEBO masky |
KORTEST
|
F | NEBO masky a nastavit vlajky |
KSHIFTL
|
F | Posuňte registry levé masky |
KSHIFTR
|
F | Posuňte registry pravé masky |
KXNOR
|
F | Bitově logické masky XNOR |
KXOR
|
F | Bitově logické masky XOR |
KADD
|
ČB/DQ | Přidejte dvě masky |
KTEST
|
ČB/DQ | Bitové srovnání a nastavení příznaků |
Nové pokyny v základu AVX-512
Mnoho instrukcí AVX-512 je jednoduše verzí EVEX starých instrukcí SSE nebo AVX. Existuje však několik nových pokynů a starých pokynů, které byly nahrazeny novými verzemi AVX-512. Níže jsou uvedeny nové nebo zásadně přepracované pokyny. Tyto základní pokyny také zahrnují rozšíření z AVX-512VL a AVX-512BW, protože tato rozšíření pouze přidávají nové verze těchto pokynů namísto nových pokynů.
Smíchejte pomocí masky
Z SSE4 neexistují žádné verze pokynů pro míchání s předponou EVEX ; místo toho má AVX-512 novou sadu směšovacích instrukcí pomocí registrů masky jako voličů. Spolu s níže uvedenými obecnými pokyny k maskování je lze použít k implementaci generických ternárních operací nebo cmov, podobně jako VPCMOV XOP .
Protože míchání je nedílnou součástí kódování EVEX, lze tyto instrukce také považovat za základní instrukce pro přesun. Pomocí režimu nulování lze také použít jako maskovací instrukce.
Návod | Sada rozšíření | Popis |
---|---|---|
VBLENDMPD
|
F | Smíchejte vektory float64 pomocí ovládání opmask |
VBLENDMPS
|
F | Smíchejte vektory float32 pomocí ovládání opmask |
VPBLENDMD
|
F | Smíchejte vektory int32 pomocí ovládání opmask |
VPBLENDMQ
|
F | Smíchejte vektory int64 pomocí ovládání opmask |
VPBLENDMB
|
ČB | Smíchejte vektory s celočíselnými bajty pomocí ovládání opmask |
VPBLENDMW
|
ČB | Smíchejte celočíselné vektory slova pomocí ovládání opmask |
Porovnat do masky
AVX-512F má čtyři nové pokyny pro porovnání. Stejně jako jejich protějšky XOP používají bezprostřední pole k výběru mezi 8 různými srovnáními. Na rozdíl od jejich inspirace XOP však ukládají výsledek do registru masky a zpočátku podporují pouze srovnání dvojitých a čtyř hesel. Rozšíření AVX-512BW poskytuje verze v bajtech a slovech. Všimněte si, že pro pokyny mohou být zadány dva registry masky, jeden pro zápis a jeden pro deklaraci pravidelného maskování.
Bezprostřední | Srovnání | Popis |
---|---|---|
0 | EQ | Rovnat se |
1 | LT | Méně než |
2 | LE | Méně nebo rovno |
3 | NEPRAVDIVÉ | Nastaveno na nulu |
4 | NEQ | Není rovno |
5 | NLT | Větší nebo rovno |
6 | NLE | Větší než |
7 | SKUTEČNÝ | Nastaveno na jednu |
Návod | Sada rozšíření | Popis |
---|---|---|
VPCMPD
|
F | Porovnejte podepsaná/nepodepsaná dvojslova s maskou |
VPCMPQ
|
F | Porovnejte podepsaná/nepodepsaná čtyř hesla do masky |
VPCMPB
|
ČB | Porovnejte podepsané/nepodepsané bajty s maskou |
VPCMPW
|
ČB | Porovnejte podepsaná/nepodepsaná slova do masky |
Logická sada masky
Posledním způsobem, jak nastavit masky, je použití logické sady masek. Tyto pokyny provádějí buď AND nebo NAND, a poté nastaví cílovou masku na základě nulových nebo nenulových hodnot výsledků. Všimněte si toho, že stejně jako srovnávací instrukce, tyto berou dva registry opmaskiny, jeden jako cíl a jeden běžnou masku.
Návod | Sada rozšíření | Popis |
---|---|---|
VPTESTMD , VPTESTMQ
|
F | Logické AND a nastavení masky pro 32 nebo 64 bitová celá čísla. |
VPTESTNMD , VPTESTNMQ
|
F | Logický NAND a nastavená maska pro 32 nebo 64 bitová celá čísla. |
VPTESTMB , VPTESTMW
|
ČB | Logické AND a nastavení masky pro 8 nebo 16bitová celá čísla. |
VPTESTNMB , VPTESTNMW
|
ČB | Logický NAND a nastavená maska pro 8 nebo 16bitová celá čísla. |
Komprimujte a rozbalte
Pokyny pro kompresi a rozbalení odpovídají operacím APL se stejným názvem. Používají opmask trochu jiným způsobem než ostatní instrukce AVX-512. Komprimovat ukládá pouze hodnoty označené v masce, ale ukládá je zkomprimované přeskočením a nevyhrazením místa pro neoznačené hodnoty. Rozbalit funguje opačným způsobem, a to tak, že načte tolik hodnot, kolik je uvedeno v masce, a poté je roztáhne do vybraných pozic.
Návod | Popis |
---|---|
VCOMPRESSPD ,
|
Ukládejte řídce zabalené hodnoty s plovoucí desetinnou čárkou s dvojitou/jednoduchou přesností do husté paměti |
VPCOMPRESSD ,
|
Ukládejte řídce zabalené dvojslovné/čtyřslovné celočíselné hodnoty do husté paměti/registru |
VEXPANDPD ,
|
Načtěte řídce zabalené hodnoty s dvojitou/jednoduchou plovoucí desetinnou čárkou z husté paměti |
VPEXPANDD ,
|
Načíst řídce zabalené dvojslovné/čtyřslovné celočíselné hodnoty z husté paměti/registru |
Obměňovat
Byla přidána nová sada instrukcí pro permutaci pro úplné dvě vstupní permutace. Všichni berou tři argumenty, dva zdrojové registry a jeden index; výsledek je vydán buď přepsáním prvního zdrojového registru, nebo indexového registru. AVX-512BW rozšiřuje pokyny tak, aby zahrnovaly také 16bitové (slovo) verze, a rozšíření AVX-512_VBMI definuje bajtové verze pokynů.
Návod | Sada rozšíření | Popis |
---|---|---|
VPERMB
|
VBMI | Povolit prvky zabalených bajtů. |
VPERMW
|
ČB | Povolte prvky sbaleného slova. |
VPERMT2B
|
VBMI | První zdroj přepisuje plnou bajtovou permutaci. |
VPERMT2W
|
ČB | Úplné přepsání slova přepsáním prvního zdroje. |
VPERMI2PD , VPERMI2PS
|
F | Plná jednoduchá/dvojitá permutace s plovoucí desetinnou čárkou přepisující index. |
VPERMI2D , VPERMI2Q
|
F | Úplná dvojslovná/čtyřslovná permutace přepisující index. |
VPERMI2B
|
VBMI | Celá bajtová permutace přepisující index. |
VPERMI2W
|
ČB | Plná změna slova přepsáním rejstříku. |
VPERMT2PS , VPERMT2PD
|
F | Úplná jednoduchá/dvojitá permutace s přepsáním prvního zdroje. |
VPERMT2D , VPERMT2Q
|
F | Úplné přepsání prvního zdroje dvojitým nebo čtyřslovným heslem. |
VSHUFF32x4 , VSHUFF64x2 ,
|
F | Zamíchejte čtyři zabalené 128bitové řádky. |
VPMULTISHIFTQB
|
VBMI | Vyberte zabalené nezarovnané bajty ze zdrojů čtyř hesel. |
Bitová ternární logika
Dvě nové přidané instrukce mohou logicky implementovat všechny možné bitové operace mezi třemi vstupy. Jako vstup berou tři registry a 8bitové bezprostřední pole. Každý bit na výstupu je generován vyhledáním tří odpovídajících bitů na vstupech, aby se vybrala jedna z 8 pozic v 8bitovém okamžitém. Protože je možné použít pouze 8 kombinací pomocí tří bitů, umožňuje to provedení všech možných 3 vstupních bitových operací. Toto jsou jediné bitové vektorové instrukce v AVX-512F; Do AVX-512DQ byly přidány verze EVEX dvou zdrojových bitových vektorových pokynů SSE a AVX AND, ANDN, OR a XOR.
Rozdíl ve verzích doubleword a quadword je pouze v použití opmask.
Návod | Popis |
---|---|
VPTERNLOGD , VPTERNLOGQ
|
Bitová ternární logika |
A0 | A1 | A2 | Double AND (0x80) | Double NEBO (0xFE) | Bitová směs (0xCA) |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 1 | 1 |
0 | 1 | 0 | 0 | 1 | 0 |
0 | 1 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 0 | 1 | 0 |
1 | 0 | 1 | 0 | 1 | 0 |
1 | 1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 1 | 1 |
Konverze
Byla přidána řada pokynů pro převod nebo přesun; tyto doplňují sadu pokynů k převodu, které jsou k dispozici ze SSE2.
Návod | Sada rozšíření | Popis |
---|---|---|
|
F | Dolů převést čtyřúhelník nebo dvojslovo na dvojslovo, slovo nebo bajt; nenasycené, nasycené nebo nasycené bez znaménka. Rubová část značky/nula rozšíří pokyny ze SSE4.1 . |
VPMOVWB , VPMOVSWB ,VPMOVUSWB
|
ČB | Dolů převést slovo na bajt; nenasycené, nasycené nebo nasycené bez znaménka. |
VCVTPS2UDQ , VCVTPD2UDQ ,
|
F | Převeďte se zkrácením nebo bez zkrácení, zabalené s jednoduchou nebo dvojitou přesností s plovoucí desetinnou čárkou na zabalená celá čísla bez znaménka. |
VCVTSS2USI , VCVTSD2USI ,
|
F | Převod s nebo bez trunkce, skalární jednoduchá nebo dvojitá přesnost s plovoucí desetinnou čárkou na celé číslo bez znaménka. |
VCVTPS2QQ , VCVTPD2QQ ,
|
DQ | Převeďte se zkrácením nebo bez zkrácení, zabalené s plovoucí desetinnou čárkou s jednoduchou nebo dvojitou přesností na zabalená celá čísla podepsaná nebo bez znaménka. |
VCVTUDQ2PS , VCVTUDQ2PD
|
F | Převeďte zabalená celá čísla bez znaménka s dvojitým slovem na s plovoucí desetinnou čárkou s jednoduchou nebo dvojitou přesností. |
VCVTUSI2PS , VCVTUSI2PD
|
F | Převod skalárních nepodepsaných celých čísel s dvojitým slovem na plovoucí desetinnou čárku s jednoduchou nebo dvojitou přesností. |
VCVTUSI2SD , VCVTUSI2SS
|
F | Převod skalárních celých čísel bez znaménka na plovoucí desetinnou čárku s jednoduchou nebo dvojitou přesností. |
VCVTUQQ2PS , VCVTUQQ2PD
|
DQ | Převeďte zabalená čtyřslovná čísla bez znaménka na sbalenou plovoucí desetinnou čárkou s jednoduchou nebo dvojitou přesností. |
VCVTQQ2PD , VCVTQQ2PS
|
F | Převeďte zabalená celá čtyřslovná čísla na zabalená s plovoucí desetinnou čárkou s jednoduchou nebo dvojitou přesností. |
Rozklad s plovoucí desetinnou čárkou
Mezi jedinečné nové funkce AVX-512F patří pokyny k rozložení hodnot s plovoucí desetinnou čárkou a zpracování speciálních hodnot s plovoucí desetinnou čárkou . Protože jsou tyto metody zcela nové, existují také ve skalárních verzích.
Návod | Popis |
---|---|
VGETEXPPD , VGETEXPPS
|
Převeďte exponenty zabalených hodnot fp na hodnoty fp |
VGETEXPSD , VGETEXPSS
|
Převést exponent skalární hodnoty fp na hodnotu fp |
VGETMANTPD , VGETMANTPS
|
Extrahujte vektor normalizovaných mantis z vektoru float32/float64 |
VGETMANTSD , VGETMANTSS
|
Extrahujte float32/float64 normalizované mantisy z float32/float64 scalar |
VFIXUPIMMPD , VFIXUPIMMPS
|
Opravte speciální zabalené hodnoty float32/float64 |
VFIXUPIMMSD , VFIXUPIMMSS
|
Opravte speciální skalární hodnotu float32/float64 |
Aritmetika s pohyblivou řádovou čárkou
Toto je druhá sada nových metod s plovoucí desetinnou čárkou, která zahrnuje nové škálování a přibližný výpočet reciproční a reciproční odmocniny. Přibližné vzájemné pokyny zaručují, že budou mít relativní chybu maximálně 2 −14 .
Návod | Popis |
---|---|
VRCP14PD , VRCP14PS
|
Vypočítejte přibližné převrácené hodnoty zabalených hodnot float32/float64 |
VRCP14SD , VRCP14SS
|
Vypočítejte přibližné převrácené hodnoty skalární float32/float64 hodnoty |
VRNDSCALEPS , VRNDSCALEPD
|
Zaoblené hodnoty float32/float64 zahrnují zahrnutý daný počet zlomkových bitů |
VRNDSCALESS , VRNDSCALESD
|
Zaokrouhlená skalární hodnota float32/float64 pro zahrnutí daného počtu zlomkových bitů |
VRSQRT14PD , VRSQRT14PS
|
Vypočítejte přibližné převrácené hodnoty odmocnin zabalených hodnot float32/float64 |
VRSQRT14SD , VRSQRT14SS
|
Vypočítejte přibližnou převrácenou hodnotu odmocniny skalární hodnoty float32/float64 |
VSCALEFPS , VSCALEFPD
|
Škálovat zabalené hodnoty float32/float64 s hodnotami float32/float64 |
VSCALEFSS , VSCALEFSD
|
Škálovat skalární hodnotu float32/float64 s hodnotou float32/float64 |
Přenos
Návod | Sada rozšíření | Popis |
---|---|---|
VBROADCASTSS , VBROADCASTSD
|
F, VL | Vysílejte jednoduchou/dvojitou hodnotu s plovoucí desetinnou čárkou |
VPBROADCASTB , VPBROADCASTW , VPBROADCASTD ,VPBROADCASTQ
|
F, VL, DQ, BW | Vysílejte celočíselnou hodnotu byte/word/doubleword/quadword |
VBROADCASTI32X2 , VBROADCASTI64X2 , VBROADCASTI32X4 , VBROADCASTI32X8 ,VBROADCASTI64X4
|
F, VL, DQ, BW | Vysílejte dvě nebo čtyři dvojslovné/čtyřslovné celočíselné hodnoty |
Smíšený
Návod | Sada rozšíření | Popis |
---|---|---|
VALIGND , VALIGNQ
|
F, VL | Zarovnejte dvojité nebo čtyřslovné vektory |
VDBPSADBW
|
ČB | Dvojitý blok zabalený součet absolutních rozdílů (SAD) na nepodepsaných bajtech |
VPABSQ
|
F | Balíčky čtyř hodnot absolutní hodnoty |
VPMAXSQ , VPMAXUQ
|
F | Maximální počet zabalených podepsaných/nepodepsaných čtyř hesel |
VPMINSQ , VPMINUQ
|
F | Minimum zabaleného podepsaného/nepodepsaného čtyř hesla |
VPROLD , VPROLVD , VPROLQ , VPROLVQ , VPRORD , VPRORVD , VPRORQ ,VPRORVQ
|
F | Otočení bitů doleva nebo doprava |
VPSCATTERDD , VPSCATTERDQ , VPSCATTERQD ,VPSCATTERQQ
|
F | Dvojitě/čtyřslovně balené scatter s podepsanými dvojslovnými a čtyřslovnými indexy |
VSCATTERDPS , VSCATTERDPD , VSCATTERQPS ,VSCATTERQPD
|
F | Scatter zabalený float32/float64 s podepsanými dvojslovnými a čtyřslovnými indexy |
Nové pokyny podle sad
Detekce konfliktů
Pokyny v detekci konfliktu AVX-512 (AVX-512CD) jsou navrženy tak, aby pomohly efektivně vypočítat bezkonfliktní podmnožiny prvků ve smyčkách, které by normálně nemohly být bezpečně vektorizovány.
Návod | název | Popis |
---|---|---|
VPCONFLICTD , VPCONFLICTQ
|
Detekovat konflikty ve vektoru zabalených hodnot dvojitých nebo čtyř hesel. | Porovná každý prvek v prvním zdroji se všemi prvky na stejných nebo dřívějších místech ve druhém zdroji a vytvoří bitový vektor výsledků. |
VPLZCNTD , VPLZCNTQ
|
Spočítejte počet úvodních nulových bitů pro zabalené hodnoty dvou nebo čtyř hesel. | Vektorová LZCNT instrukce.
|
VPBROADCASTMB2Q ,VPBROADCASTMW2D
|
Vysílací maska do vektorového registru. | Buď 8bitová maska pro čtyřslovný vektor, nebo 16bitová maska pro dvojslovný vektor. |
Exponenciální a reciproční
Exponenciální a reciproční instrukce AVX-512 obsahují přesnější přibližné reciproční instrukce než pokyny v základu AVX-512; relativní chyba je maximálně 2 −28 . Obsahují také dvě nové exponenciální funkce, které mají relativní chybu nejvýše 2 −23 .
Návod | Popis |
---|---|
VEXP2PD , VEXP2PS
|
Vypočítejte přibližné exponenciály 2^x zabalených hodnot s plovoucí desetinnou čárkou s jednoduchou nebo dvojitou přesností |
VRCP28PD , VRCP28PS
|
Vypočítejte přibližné převrácené hodnoty zabalených hodnot s plovoucí desetinnou čárkou s jednoduchou nebo dvojitou přesností |
VRCP28SD , VRCP28SS
|
Vypočítejte přibližnou převrácenou hodnotu skalární jednoduché nebo dvojité přesnosti s plovoucí desetinnou čárkou |
VRSQRT28PD , VRSQRT28PS
|
Vypočítejte přibližné převrácené hodnoty odmocnin zabalených hodnot s plovoucí desetinnou čárkou s jednoduchou nebo dvojitou přesností |
VRSQRT28SD , VRSQRT28SS
|
Vypočtěte přibližnou převrácenou hodnotu odmocniny skalární hodnoty s plovoucí desetinnou čárkou s jednoduchou nebo dvojitou přesností |
Předběžné načtení
Pokyny k předběžnému načtení AVX-512 obsahují nové operace předběžného načtení pro nové funkce scatter and collect zavedené v AVX2 a AVX-512. T0
prefetch znamená předběžné načítání do mezipaměti úrovně 1 a T1
znamená předběžné načítání do mezipaměti úrovně 2.
Návod | Popis |
---|---|
VGATHERPF0DPS , VGATHERPF0QPS , VGATHERPF0DPD ,VGATHERPF0QPD
|
Pomocí podepsaných indexů dword/qword předem načtěte řídká bajtová paměťová místa obsahující data s jednoduchou/dvojitou přesností pomocí opmask k1 a T0 hint. |
VGATHERPF1DPS , VGATHERPF1QPS , VGATHERPF1DPD ,VGATHERPF1QPD
|
Pomocí podepsaných indexů dword/qword předběžně načtěte řídká bajtová paměťová místa obsahující data s jednoduchou/dvojitou přesností pomocí nápovědy opmask k1 a T1. |
VSCATTERPF0DPS , VSCATTERPF0QPS , VSCATTERPF0DPD ,VSCATTERPF0QPD
|
Pomocí podepsaných indexů dword/qword předem načtěte řídká bajtová paměťová místa obsahující data s jednoduchou/dvojitou přesností pomocí příkazu writeemask k1 a T0 s úmyslem zapsat. |
VSCATTERPF1DPS , VSCATTERPF1QPS , VSCATTERPF1DPD ,VSCATTERPF1QPD
|
Pomocí podepsaných indexů dword/qword předběžně načtěte řídká bajtová paměťová místa obsahující data s jednoduchou/dvojitou přesností pomocí příkazu writeemask k1 a T1 s úmyslem zapsat. |
4FMAPS a 4VNNIW
Tyto dvě sady instrukcí provádějí více iterací zpracování. Obvykle se nacházejí pouze ve výrobcích Xeon Phi.
Návod | Sada rozšíření | Popis |
---|---|---|
V4FMADDPS , V4FMADDSS
|
4 FMAPS | Sbalené/skalární s jednou přesností s plovoucí desetinnou čárkou fúzované násobení (4 iterace) |
V4FNMADDPS , V4FNMADDSS
|
4 FMAPS | Balené/skalární s jednou přesností s plovoucí desetinnou čárkou fúzované násobení a negace (4 iterace) |
VP4DPWSSD
|
4VNNIW | Tečkový součin podepsaných slov s dvojitou akumulací slov (4 iterace) |
VP4DPWSSDS
|
4VNNIW | Tečkový součin podepsaných slov s dvojitou akumulací a saturací slov (4 iterace) |
BW, DQ a VBMI
AVX-512DQ přidává nové dvojslovné a čtyřslovné pokyny. AVX-512BW přidává bajtové a slovní verze stejných pokynů a přidává bajtovou a slovní verzi dvojslovných/čtyřslovných pokynů v AVX-512F. Několik instrukce, které se dostanou pouze slovní tvary s AVX-512BW získává bytových forem s příponou AVX-512_VBMI ( VPERMB
, VPERMI2B
, VPERMT2B
, VPMULTISHIFTQB
).
Do sady instrukcí masky byly přidány dvě nové instrukce: KADD
a KTEST
(B a W formy s AVX-512DQ, D a Q s AVX-512BW). Zbytek instrukcí masky, které měly pouze slovní formy, dostal bajtové tvary s AVX-512DQ a dvojslovné/čtyřslovné tvary s AVX-512BW. KUNPCKBW
byl rozšířen o KUNPCKWD
a KUNPCKDQ
o AVX-512BW.
Mezi instrukce přidané AVX-512DQ patří několik SSE, AVX instrukce, které nedostaly verze AVX-512 s AVX-512F, mezi nimi jsou všechny dvě vstupní bitové instrukce a instrukce extrahovat/vkládat celé číslo.
Níže jsou uvedeny pokyny, které jsou zcela nové.
Pokyny s plovoucí desetinnou čárkou
Jsou představeny tři nové operace s plovoucí desetinnou čárkou. Protože nejsou jen nové v AVX-512, mají jak balené/SIMD, tak skalární verze.
Tyto VFPCLASS
pokyny testy, pokud je plovoucí bodová hodnota je jedna z hodnot s plovoucí desetinnou čárkou osm speciálních, která z hodnot osmi spustí bit ve výstupním registru masky je řízen okamžitým polem. Tyto VRANGE
pokyny plnit minimální nebo maximální operací v závislosti na hodnotě okamžité pole, což může také kontrolovat, jestli se operace provádí absolutní či nikoliv, a odděleně, jak se značka je zpracována. Tyto VREDUCE
instrukce pracovat na jediném zdroji, a odečíst od že celočíselné části hodnoty zdroje plus počet bitů specifikovaných v bezprostřední oblasti jeho frakce.
Návod | Sada rozšíření | Popis |
---|---|---|
VFPCLASSPS , VFPCLASSPD
|
DQ | Testujte typy zabalených hodnot s plovoucí desetinnou čárkou s jednoduchou a dvojitou přesností. |
VFPCLASSSS , VFPCLASSSD
|
DQ | Testujte typy skalárních hodnot s plovoucí desetinnou čárkou s jednoduchou a dvojitou přesností. |
VRANGEPS , VRANGEPD
|
DQ | Výpočet omezení rozsahu pro zabalené hodnoty s plovoucí desetinnou čárkou. |
VRANGESS , VRANGESD
|
DQ | Výpočet omezení rozsahu pro skalární hodnoty s plovoucí desetinnou čárkou. |
VREDUCEPS , VREDUCEPD
|
DQ | Proveďte redukční transformaci na hodnotách s plovoucí desetinnou čárkou. |
VREDUCESS , VREDUCESD
|
DQ | Proveďte redukční transformaci na skalárních hodnotách s plovoucí desetinnou čárkou. |
Další pokyny
Návod | Sada rozšíření | Popis |
---|---|---|
VPMOVM2D , VPMOVM2Q
|
DQ | Převést registr masky na vektorový registr se dvěma nebo čtyřmi slovy. |
VPMOVM2B , VPMOVM2W
|
ČB | Převést registr masky na vektorový registr bajtů nebo slov. |
VPMOVD2M , VPMOVQ2M
|
DQ | Převést vektorový registr se dvěma nebo čtyřmi slovy na registr masky. |
VPMOVB2M , VPMOVW2M
|
ČB | Převést vektorový registr bajtů nebo slov na registr masky. |
VPMULLQ
|
DQ | Mnohonásobně zabalený čtyřnásobný obchod s nízkým výsledkem. Čtyřslovná verze VPMULLD. |
VBMI2
Rozšiřte VPCOMPRESS a VPEXPAND o varianty bajtů a slov. Pokyny k řazení jsou nové.
Návod | Popis |
---|---|
VPCOMPRESSB , VPCOMPRESSW
|
Ukládejte řídce zabalené celočíselné hodnoty bajtů/slov do husté paměti/registru |
VPEXPANDB , VPEXPANDW
|
Načíst řídce zabalené celočíselné hodnoty bajtů/slov z husté paměti/registru |
VPSHLD
|
Zřetězení a posunutí zabalených dat zůstalo logické |
VPSHLDV
|
Zřetězení a data s proměnným posunem zůstala logická |
VPSHRD
|
Logicky spojte a posuňte zabalená data |
VPSHRDV
|
Správně logické zřetězení a variabilně posunutá data |
VNNI
VNNI je zkratka pro Vector Neural Network Instructions. AVX512-VNNI dodává EVEX -coded instrukce je popsáno níže. U AVX-512F mohou tyto pokyny fungovat na 512bitových vektorech a AVX-512VL dále přidává podporu pro 128- a 256bitové vektory.
Pozdější AVX-VNNI rozšíření přidá Vex kódování těchto instrukcí, které mohou pracovat jen na 128- nebo 256-bitových vektorů. AVX-VNNI není součástí sady AVX-512, nevyžaduje AVX-512F a lze jej implementovat samostatně.
Návod | Popis |
---|---|
VPDPBUSD
|
Znásobte a přidejte nepodepsané a podepsané bajty |
VPDPBUSDS
|
Znásobte a přidejte nepodepsané a podepsané bajty se sytostí |
VPDPWSSD
|
Znásobte a přidejte celá čísla se znaménkem |
VPDPWSSDS
|
Znásobte a přidejte celá čísla slov se sytostí |
IFMA
Návod | Sada rozšíření | Popis |
---|---|---|
VPMADD52LUQ
|
IFMA | Balené násobení nepodepsaných 52bitových celých čísel a přidání nízkých 52bitových produktů do akumulátorů qword |
VPMADD52HUQ
|
IFMA | Balené násobení nepodepsaných 52bitových celých čísel a přidání vysokých 52bitových produktů do 64bitových akumulátorů |
VPOPCNTDQ a BITALG
Návod | Sada rozšíření | Popis |
---|---|---|
VPOPCNTD , VPOPCNTQ
|
VPOPCNTDQ | Vrátí počet bitů nastavený na 1 ve dvojslově/čtyřúhelníku |
VPOPCNTB , VPOPCNTW
|
BITALG | Vrátí počet bitů nastavený na 1 v bajtech/slovech |
VPSHUFBITQMB
|
BITALG | Shuffle bits from quadword elements using byte indexes into mask |
VP2INTERSECT
Návod | Sada rozšíření | Popis |
---|---|---|
VP2INTERSECTD , VP2INTERSECTQ
|
VP2INTERSECT | Vypočítejte průnik mezi dvojslovy/čtyřslovci do
pár registrů masky |
GFNI
Nové pokyny Galois s kódováním EVEX :
Návod | Popis |
---|---|
VGF2P8AFFINEINVQB
|
Inverzní transformace afinní transformace Galoisova pole |
VGF2P8AFFINEQB
|
Afinní transformace Galoisova pole |
VGF2P8MULB
|
Pole Galois znásobte bajty |
VPCLMULQDQ
VPCLMULQDQ s AVX-512F přidává 512bitovou verzi instrukce PCLMULQDQ kódovanou EVEX. S AVX-512VL přidává 256- a 128bitové verze s kódováním EVEX. Samotný VPCLMULQDQ (tj. Na CPU jiných než AVX512) přidává pouze 256bitovou verzi kódovanou VEX. (Dostupnost 128bitové verze kódované VEX je indikována různými bity CPUID: PCLMULQDQ a AVX.) Širší než 128bitové variace instrukce provádějí stejnou operaci na každé 128bitové části vstupních registrů, ale dělají nerozšířit jej na výběr čtyř hesel z různých 128bitových polí (význam operandu imm8 je stejný: je vybráno buď nízké nebo vysoké kvadword 128bitového pole).
Návod | Popis |
---|---|
VPCLMULQDQ
|
Čtyřslovné násobení bez přenášení |
VAES
Pokyny AES kódované VEX a EVEX . Širší než 128bitové variace instrukce provádějí stejnou operaci na každé 128bitové části vstupních registrů. Verze VEX lze použít bez podpory AVX-512.
Návod | Popis |
---|---|
VAESDEC
|
Proveďte jedno kolo toku dešifrování AES |
VAESDECLAST
|
Proveďte poslední kolo dešifrovacího toku AES |
VAESENC
|
Proveďte jedno kolo toku šifrování AES |
VAESENCLAST
|
Proveďte poslední kolo toku šifrování AES |
BF16
Pokyny pro akceleraci AI pracující s čísly Bfloat16 .
Návod | Popis |
---|---|
VCVTNE2PS2BF16
|
Převeďte dvě zabalená jednotlivá přesná čísla na jedno zabalené číslo Bfloat16 |
VCVTNEPS2BF16
|
Převeďte jedno zabalené jedno přesné číslo na jedno zabalené číslo Bfloat16 |
VDPBF16PS
|
Vypočítejte bodový součin dvou párů Bfloat16 a výsledek shrňte do jednoho zabaleného jediného přesného čísla |
FP16
Rozšíření dřívější sady instrukcí F16C , přidání komplexní podpory pro čísla s plovoucí desetinnou čárkou binary16 (také známá jako čísla FP16, float16 nebo čísla s plovoucí desetinnou čárkou s poloviční přesností). Nové pokyny implementují většinu operací, které byly dříve k dispozici pro čísla s jednoduchou a dvojitou přesností s plovoucí desetinnou čárkou, a také zavedly nové operace. Podporovány jsou skalární a balené operace.
Na rozdíl od instrukcí pro formát s jednoduchou a dvojitou přesností nejsou operandy polopřesnosti ani podmíněně proplachovány na nulu ( FTZ ), ani podmíněně považovány za nulové ( DAZ ) na základě MXCSR
nastavení. Denormální hodnoty jsou hardwarově zpracovávány plnou rychlostí, aby bylo možné využívat plný dynamický rozsah čísel FP16. Pokyny, které vytvářejí čísla FP32 a FP64, stále respektují MXCSR.FTZ
bit.
Aritmetické pokyny
Návod | Popis |
---|---|
VADDPH , VADDSH
|
Přidejte zabalená/skalární čísla FP16. |
VSUBPH , VSUBSH
|
Odečtěte zabalená/skalární čísla FP16. |
VMULPH , VMULSH
|
Znásobte balená/skalární čísla FP16. |
VDIVPH , VDIVSH
|
Rozdělte zabalená/skalární čísla FP16. |
VSQRTPH , VSQRTSH
|
Vypočítejte druhou odmocninu zabalených/skalárních čísel FP16. |
VFMADD{132, 213, 231}PH , VFMADD{132, 213, 231}SH
|
Mnohonásobně přidejte zabalená/skalární čísla FP16. |
VFNMADD{132, 213, 231}PH , VFNMADD{132, 213, 231}SH
|
Negované násobení-přidání zabalených/skalárních čísel FP16. |
VFMSUB{132, 213, 231}PH , VFMSUB{132, 213, 231}SH
|
Vícenásobně odečtěte zabalená/skalární čísla FP16. |
VFNMSUB{132, 213, 231}PH , VFNMSUB{132, 213, 231}SH
|
Negovaná násobení-odčítání zabalených/skalárních čísel FP16. |
VFMADDSUB{132, 213, 231}PH
|
Čísla FP16 s vícenásobným sčítáním (liché vektorové prvky) nebo s násobným odčítáním (sudé vektorové prvky). |
VFMSUBADD{132, 213, 231}PH
|
Multiple-subtract (liché vektorové prvky) nebo multiply-add (sudé vektorové prvky) zabalená čísla FP16. |
VREDUCEPH , VREDUCESH
|
Proveďte redukční transformaci zabalených/skalárních čísel FP16. |
VRNDSCALEPH , VRNDSCALESH
|
Zaokrouhlete/skalární čísla FP16 na daný počet zlomkových bitů. |
VSCALEFPH , VSCALEFSH
|
Měřítko zabalených/skalárních čísel FP16 vynásobením mocninou dvou. |
Složité aritmetické instrukce
Návod | Popis |
---|---|
VFMULCPH , VFMULCSH
|
Vícenásobně zabalená/skalární komplexní čísla FP16. |
VFCMULCPH , VFCMULCSH
|
Vícenásobně zabalená/skalární komplexní čísla FP16. Složitá konjugovaná forma operace. |
VFMADDCPH , VFMADDCSH
|
Znásobte počet sbalených/skalárních komplexních čísel FP16. |
VFCMADDCPH , VFCMADDCSH
|
Znásobte počet sbalených/skalárních komplexních čísel FP16. Složitá konjugovaná forma operace. |
Přibližné vzájemné pokyny
Návod | Popis |
---|---|
VRCPPH , VRCPSH
|
Vypočítejte přibližné převrácené hodnoty sbalených/skalárních čísel FP16. Maximální relativní chyba aproximace je menší než 2 -11 +2 -14 . |
VRSQRTPH , VRSQRTSH
|
Vypočítejte přibližnou reciproční odmocninu z balených/skalárních čísel FP16. Maximální relativní chyba aproximace je menší než 2-14 . |
Porovnávací pokyny
Návod | Popis |
---|---|
VCMPPH , VCMPSH
|
Porovnejte zabalená/skalární čísla FP16 a výsledek uložte do registru masky. |
VCOMISH
|
Porovnejte skalární čísla FP16 a výsledek uložte do registru příznaků. Signalizuje výjimku, pokud je zdrojový operand QNaN nebo SNaN. |
VUCOMISH
|
Porovnejte skalární čísla FP16 a výsledek uložte do registru příznaků. Signalizuje výjimku pouze v případě, že zdrojový operand je SNaN. |
VMAXPH , VMAXSH
|
Vyberte maximum pro každý svislý pár zdrojově balených/skalárních čísel FP16. |
VMINPH , VMINSH
|
Vyberte minimum pro každý svislý pár zdrojově balených/skalárních čísel FP16. |
VFPCLASSPH , VFPCLASSSH
|
Otestujte zabalená/skalární čísla FP16 pro speciální kategorie (NaN, nekonečno, záporná nula atd.) A výsledek uložte do registru masky. |
Pokyny pro převod
Návod | Popis |
---|---|
VCVTW2PH
|
Převeďte zabalená podepsaná 16bitová celá čísla na čísla FP16. |
VCVTUW2PH
|
Převeďte zabalené 16bitové celá čísla bez znaménka na čísla FP16. |
VCVTDQ2PH
|
Převeďte zabalená podepsaná 32bitová celá čísla na čísla FP16. |
VCVTUDQ2PH
|
Převod zabalených nepodepsaných 32bitových celých čísel na čísla FP16. |
VCVTQQ2PH
|
Převést zabalená 64bitová celá čísla na čísla FP16. |
VCVTUQQ2PH
|
Převod zabalených 64bitových celých čísel bez znaménka na čísla FP16. |
VCVTPS2PHX
|
Převeďte zabalená čísla FP32 na čísla FP16. Na rozdíl VCVTPS2PH od F16C , VCVTPS2PHX má jiné kódování, který také podporuje vysílání.
|
VCVTPD2PH
|
Převeďte zabalená čísla FP64 na čísla FP16. |
VCVTSI2SH
|
Převeďte skalární podepsané 32bitové nebo 64bitové celé číslo na číslo FP16. |
VCVTUSI2SH
|
Převeďte skalární nepodepsané 32bitové nebo 64bitové celé číslo na číslo FP16. |
VCVTSS2SH
|
Převeďte skalární číslo FP32 na číslo FP16. |
VCVTSD2SH
|
Převeďte skalární číslo FP64 na číslo FP16. |
VCVTPH2W , VCVTTPH2W
|
Převeďte zabalená čísla FP16 na podepsaná 16bitová celá čísla. VCVTPH2W zaokrouhlí hodnotu podle MXCSR registru. VCVTTPH2W zaokrouhluje směrem k nule.
|
VCVTPH2UW , VCVTTPH2UW
|
Převeďte zabalená čísla FP16 na 16bitová celá čísla bez znaménka. VCVTPH2UW zaokrouhlí hodnotu podle MXCSR registru. VCVTTPH2UW zaokrouhluje směrem k nule.
|
VCVTPH2DQ , VCVTTPH2DQ
|
Převeďte zabalená čísla FP16 na podepsaná 32bitová celá čísla. VCVTPH2DQ zaokrouhlí hodnotu podle MXCSR registru. VCVTTPH2DQ zaokrouhluje směrem k nule.
|
VCVTPH2UDQ , VCVTTPH2UDQ
|
Převeďte zabalená čísla FP16 na 32bitová celá čísla bez znaménka. VCVTPH2UDQ zaokrouhlí hodnotu podle MXCSR registru. VCVTTPH2UDQ zaokrouhluje směrem k nule.
|
VCVTPH2QQ , VCVTTPH2QQ
|
Převeďte zabalená čísla FP16 na podepsaná 64bitová celá čísla. VCVTPH2QQ zaokrouhlí hodnotu podle MXCSR registru. VCVTTPH2QQ zaokrouhluje směrem k nule.
|
VCVTPH2UQQ , VCVTTPH2UQQ
|
Převeďte zabalená čísla FP16 na 64bitová celá čísla bez znaménka. VCVTPH2UQQ zaokrouhlí hodnotu podle MXCSR registru. VCVTTPH2UQQ zaokrouhluje směrem k nule.
|
VCVTPH2PSX
|
Převeďte zabalená čísla FP16 na čísla FP32. Na rozdíl VCVTPH2PS od F16C , VCVTPH2PSX má jiné kódování, který také podporuje vysílání.
|
VCVTPH2PD
|
Převeďte zabalená čísla FP16 na čísla FP64. |
VCVTSH2SI , VCVTTSH2SI
|
Převeďte skalární číslo FP16 na podepsané 32bitové nebo 64bitové celé číslo. VCVTSH2SI zaokrouhlí hodnotu podle MXCSR registru. VCVTTSH2SI zaokrouhluje směrem k nule.
|
VCVTSH2USI , VCVTTSH2USI
|
Převeďte skalární číslo FP16 na 32bitové nebo 64bitové celé číslo bez znaménka. VCVTSH2USI zaokrouhlí hodnotu podle MXCSR registru. VCVTTSH2USI zaokrouhluje směrem k nule.
|
VCVTSH2SS
|
Převeďte skalární číslo FP16 na číslo FP32. |
VCVTSH2SD
|
Převeďte skalární číslo FP16 na číslo FP64. |
Pokyny k rozkladu
Návod | Popis |
---|---|
VGETEXPPH , VGETEXPSH
|
Extrahujte komponenty exponentu zabalených/skalárních čísel FP16 jako čísla FP16. |
VGETMANTPH , VGETMANTSH
|
Extrahujte součásti mantisy zabalených/skalárních čísel FP16 jako čísla FP16. |
Přesunout pokyny
Návod | Popis |
---|---|
VMOVSH
|
Přesuňte skalární číslo FP16 do/z paměti nebo mezi vektorové registry. |
VMOVW
|
Přesuňte skalární číslo FP16 do/z paměti nebo obecného registru. |
Starší pokyny upgradované verzemi kódovanými EVEX
Starší kódování | Skupina | Instrukce | AVX-512 rozšíření |
||
---|---|---|---|---|---|
SSE SSE2 MMX |
AVX SSE3 SSE4.1 |
AVX2 FMA |
|||
Ano | Ano | Ne | VADD |
VADDPD , VADDPS , VADDSD ,VADDSS
|
F, VL |
VAND |
VANDPD , VANDPS , VANDNPD ,VANDNPS
|
VL, DQ | |||
VCMP |
VCMPPD , VCMPPS , VCMPSD ,VCMPSS
|
F | |||
VCOM |
VCOMISD , VCOMISS
|
F | |||
VDIV |
VDIVPD , VDIVPS , VDIVSD ,VDIVSS
|
F, VL | |||
VCVT |
VCVTDQ2PD , VCVTDQ2PS , VCVTPD2DQ , VCVTPD2PS ,
|
F, VL | |||
VMAX |
VMAXPD , VMAXPS , VMAXSD ,VMAXSS
|
F, VL | |||
VMIN |
VMINPD , VMINPS , VMINSD ,VMINSS
|
F | |||
VMOV |
VMOVAPD , VMOVAPS , VMOVD , VMOVQ ,
|
F, VL, BW | |||
VMUL |
VMULPD , VMULPS , VMULSD ,VMULSS
|
F, VL | |||
VOR |
VORPD , VORPS
|
VL, DQ | |||
VSQRTP |
VSQRTPD , VSQRTPS , VSQRTSD ,VSQRTSS
|
F, VL | |||
VSUB |
VSUBPD , VSUBPS , VSUBSD ,VSUBSS
|
F, VL | |||
VUCOMI |
VUCOMISD , VUCOMISS
|
F | |||
VUNPCK |
VUNPCKHPD , VUNPCKHPS , VUNPCKLPD ,VUNPCKLPS
|
F, VL | |||
VXOR |
VXORPD , VXORPS
|
VL, DQ | |||
Ne | Ano | Ne | VEXTRACTPS |
VEXTRACTPS
|
F |
VINSERTPS |
VINSERTPS
|
F | |||
VPALIGNR |
VPALIGNR
|
VL, ČB | |||
VPEXTR |
VPEXTRB , VPEXTRW , VPEXTRD ,VPEXTRQ
|
ČB, DQ | |||
VPINSR |
VPINSRB , VPINSRW , VPINSRD ,VPINSRQ
|
ČB, DQ | |||
Ano | Ano | Ano | VPACK |
VPACKSSWB , VPACKSSDW , VPACKUSDW ,VPACKUSWB
|
VL, ČB |
VPADD |
VPADDB , VPADDW , VPADDD , VPADDQ ,
|
F, VL, BW | |||
VPAND |
VPANDD , VPANDQ , VPANDND ,VPANDNQ
|
F, VL | |||
VPAVG |
VPAVGB , VPAVGW
|
VL, ČB | |||
VPCMPEQ |
VPCMPEQB , VPCMPEQW , VPCMPEQD ,VPCMPEQQ
|
F, VL, BW | |||
VPCMPGT |
VPCMPGTB , VPCMPGTW , VPCMPGTD ,VPCMPGTQ
|
F, VL, BW | |||
VPMAX |
VPMAXSB , VPMAXSW , VPMAXSD , VPMAXSQ , VPMAXUB , VPMAXUW , VPMAXUD ,VPMAXUQ
|
F, VL, BW | |||
VPMIN |
VPMINSB , VPMINSW , VPMINSD , VPMINSQ , VPMINUB , VPMINUW , VPMINUD ,VPMINUQ
|
F, VL, BW | |||
VPMOV |
VPMOVSXBW , VPMOVSXBD , VPMOVSXBQ , VPMOVSXWD , VPMOVSXWQ , VPMOVSXDQ ,
|
F, VL, BW | |||
VPMUL |
VPMULDQ , VPMULUDQ , VPMULHRSW , VPMULHUW , VPMULHW , VPMULLD , VPMULLQ ,VPMULLW
|
F, VL, BW | |||
VPOR |
VPORD , VPORQ
|
F, VL | |||
VPSUB |
VPSUBB , VPSUBW , VPSUBD , VPSUBQ , VPSUBSB , VPSUBSW , VPSUBUSB ,VPSUBUSW
|
F, VL, BW | |||
VPUNPCK |
VPUNPCKHBW , VPUNPCKHWD , VPUNPCKHDQ , VPUNPCKHQDQ ,
|
F, VL, BW | |||
VPXOR |
VPXORD , VPXORQ
|
F, VL | |||
VPSADBW |
VPSADBW
|
VL, ČB | |||
VPSHUF |
VPSHUFB , VPSHUFHW , VPSHUFLW , VPSHUFD ,
|
F, VL, BW | |||
Ne | Ano | Ano | VEXTRAKT |
VEXTRACTF32X4 , VEXTRACTF64X2 , VEXTRACTF32X8 , VEXTRACTF64X4 ,
|
F, VL, DQ |
VINSERT |
VINSERTF32x4 , VINSERTF64X2 , VINSERTF32X8 , VINSERTF64x4 ,
|
F, VL, DQ | |||
VPABS |
VPABSB , VPABSW , VPABSD ,VPABSQ
|
F, VL, BW | |||
VPERM |
VPERMD , VPERMILPD , VPERMILPS , VPERMPD , VPERMPS ,VPERMQ
|
F, VL | |||
VPMADD |
VPMADDUBSW VPMADDWD
|
VL, ČB | |||
Ne | Ne | Ano | VFMADD |
VFMADD132PD , VFMADD213PD , VFMADD231PD ,
|
F, VL |
VFMADDSUB |
VFMADDSUB132PD , VFMADDSUB213PD , VFMADDSUB231PD ,
|
F, VL | |||
VFMSUBADD |
VFMSUBADD132PD , VFMSUBADD213PD , VFMSUBADD231PD ,
|
F, VL | |||
VFMSUB |
VFMSUB132PD , VFMSUB213PD , VFMSUB231PD ,
|
F, VL | |||
VFNMADD |
VFNMADD132PD , VFNMADD213PD , VFNMADD231PD ,
|
F, VL | |||
VFNMSUB |
VFNMSUB132PD , VFNMSUB213PD , VFNMSUB231PD ,
|
F, VL | |||
VGATHER |
VGATHERDPS , VGATHERDPD , VGATHERQPS ,VGATHERQPD
|
F, VL | |||
VPGATHER |
VPGATHERDD , VPGATHERDQ , VPGATHERQD ,VPGATHERQQ
|
F, VL | |||
VPSRAV |
VPSRAVW , VPSRAVD ,VPSRAVQ
|
F, VL, BW |
CPU s AVX-512
-
Intel
- Přistání rytířů (Xeon Phi x200): AVX-512 F, CD, ER, PF
- Rytířský mlýn (Xeon Phi x205): AVX-512 F, CD, ER, PF, 4FMAPS, 4VNNIW, VPOPCNTDQ
- Skylake-SP , Skylake-X : AVX-512 F, CD, VL, DQ, BW
- Cannon Lake : AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI
- Cascade Lake : AVX-512 F, CD, VL, DQ, BW, VNNI
- Cooper Lake : AVX-512 F, CD, VL, DQ, BW, VNNI, BF16
- Ice Lake , Rocket Lake : AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI, VBMI2, VPOPCNTDQ, BITALG, VNNI, VPCLMULQDQ, GFNI, VAES
- Tiger Lake (kromě Pentia a Celeronu, ale někteří recenzenti mají Screenshot CPU-Z Celeronu 6305 s podporou AVX-512): AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI, VBMI2, VPOPCNTDQ, BITALG, VNNI , VPCLMULQDQ, GFNI, VAES, VP2INTERSECT
- Sapphire Rapids : BF16, FP16
-
Kentaurská technologie
- Jádro "CNS" (8c/8t): AVX-512 F, CD, VL, BW, DQ, IFMA, VBMI
-
AMD
- Zen 4 : BF16
Podmnožina | F | CD | ER | PF | 4 FMAPS | 4VNNIW | VPOPCNTDQ | VL | DQ | ČB | IFMA | VBMI | VNNI | BF16 | VBMI2 | BITALG | VPCLMULQDQ | GFNI | VAES | VP2INTERSECT |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Knights Landing (Xeon Phi x200, 2016) | Ano | Ano | Ne | |||||||||||||||||
Knights Mill (Xeon Phi x205, 2017) | Ano | Ne | ||||||||||||||||||
Skylake-SP , Skylake-X (2017) | Ne | Ne | Ano | Ne | ||||||||||||||||
Cannon Lake (2018) | Ano | Ne | ||||||||||||||||||
Cascade Lake (2019) | Ne | Ano | Ne | |||||||||||||||||
Cooper Lake (2020) | Ano | Ne | ||||||||||||||||||
Ice Lake (2019) | Ano | Ano | Ne | Ano | Ne | |||||||||||||||
Tygří jezero (2020) | Ano | |||||||||||||||||||
Rocket Lake (2021) | Ne |
QEMU podporuje emulaci AVX-512 ve svém TCG.
Alder Lake a podobná hybridní jádra stolního počítače mají křemíkové jednotky pro AVX-512, ale tato funkce je deaktivována.
Výkon
Poradce Intel „Vectorization“ (počínaje verzí 2016 Update 3) podporuje nativní analýzu výkonu AVX-512 a kvalitu vektorového kódu pro procesor 2. generace Intel Xeon Phi (s kódovým označením Knights Landing ). Spolu s tradičním profilem hotspotů, doporučeními Advisor a „bezproblémovou“ integrací diagnostiky vektorizace Intel Compiler poskytuje analýza Advisor Survey také metriky AVX-512 ISA a nové „vlastnosti“ specifické pro AVX-512, např. Scatter, Compress/Expand, využití masky.
Na některých procesorech způsobují pokyny AVX-512 omezení frekvence ještě větší než u jeho předchůdců, což způsobuje pokutu za smíšené úlohy. Dodatečné přetaktování je spuštěno 512bitovou šířkou vektorů a závisí na povaze prováděných instrukcí a použití 128 nebo 256bitové části AVX-512 (AVX-512VL) jej nespouští. Výsledkem je, že gcc a clang výchozí upřednostňují použití 256bitových vektorů.
Viz také
- Sada instrukcí FMA (FMA)
- Sada instrukcí XOP (XOP)
- Scalable Vector Extension for ARM - nová sada vektorových instrukcí (doplňující VFP a NEON ) podporující velmi široké bitové šířky a jeden binární kód, který se dokáže automaticky přizpůsobit maximální šířce podporované hardwarem.