
Ինստրուցիան vfmaddrnd231pd: փաստագրված է Intel SDM-ում, բայց երբեք ստեղծված չէ
Երազանքային FMA ինստրուցիան vfmaddrnd231pd նշված է Intel-ի 2024 թվականի SDM-ում, սակայն իրական տեխնիկայի վերաբերյալ չսահմանված ինստրուցիայի սխալ է առաջացնում։ Բլոգի ուսումնասիրությունը մինչև թողնված AVX10 կլորացման փորձերը է տանում։
Ինստրուցիայի ներկայացում
vfmaddrnd231pd-ը նշված է որպես FMA ինստրուցիաների փաթեթի անդամ Intel-ի Software Developer's Manual-ում (SDM): 2024 թվականի հրատարակման համաձայն, այն կատարում է փաթեթավորված կրկնակի ճշտության սահող ստորնակետ արժեքների ինտեգրված բազմապատկման-ավելացմանը՝ կլորացման վերահսկումով: Ինստրուցիային կցված անմիջական բայթը սահմանում է կլորացման, DAZ-ի, FTZ-ի և բացառությունների ճնշման բիթային դաշտերը: Այսպիսի վերահսկումը թույլ է տալիս թվաբանական գործողություններին ուղիղ ընտրել կլորացման ռեժիմը՝ փոխարեն դանդաղ փոփոխական գլոբալ պարամետրերի, և զգալիորեն արագացնում է կլորացման վրա հիմնված ալգորիթմները: Այնուամենայնիվ այս ինստրուցիան գոյություն չունի:
Չհաջողված որոնումները և #UD սխալը
GNU ասեմբլերը vfmaddrnd231pd-ն չի ճանաչում: SDM-ը նշում է Intel C/C++ Compiler-ի _mm_fmaddround_pd և _mm256_fmaddround_pd intrinsic-ները, սակայն դրանք բացակայում են ոչ միայն Clang-ում, այլև ICC-ում: Ինստրուցիայի ձեռքով հավաքումը SDM-ի opcode-ների ցանկից՝ VEX.DDS.128.66.0F3A.W1 B8 /r /ib, ևս մեկ հարց է ծնում. ուղեցույցում ոչ մի տեղ չի բացատրվում, թե ինչ է նշանակում DDS: Haswell-ի CPU-ում, որը աջակցում է FMA-ն, այն առաջացնում է #UD (անորոշ ինստրուցիայի) սխալ: SDM-ի 2026 թվականի հրատարակումում այս ինստրուցիան այլևս չկա, թեև 2024 թվականի հրատարակումում կա: Չկա նաև դրա կապակցված տարբերակները՝ pd, ps, sd, ss կամ 132, 213, 231 ձևերը, որոնք ունեն մյուս FMA ինստրուցիաները:
Թողնված AVX10 նախատեսում
Բլոգի մեկնաբանությունները լրացրեցին պատմությունը: 2023 թվականին Intel-ը տեխնիկական սահմանափակումների պատճառով չկարողացավ ավելացնել AVX-512 սպառողական CPU-ներում, բայց ուզում էր AVX-512-ի ոճի ֆունկցիաները, ինչը հանգեցրեց AVX10-ին: AVX10-ն նման էր AVX-512-ին, թեև պայմանականորեն աջակցում էր 512-բիթային վեկտորներին: AVX-512-ի EVEX նախածանցում ստատիկ կլորացման բիթերը օգտագործվում են գործողության լայնության համար, ուստի կլորացումը կարգավորել կարող են միայն սկալյառ և 512-բիթային գործողությունները: AVX10-ին 512-բիթային աջակցության առանց պետք էր այլ կոդավորում: Ըստ տեսության, Intel-ը նախատեսում էր անմիջական բայթը կլորացման համար, ուստի vfmaddrnd231pd-ն և նման ինստրուցիաները հայտնվեցին փաստագրում: Այն օգտագործում է VEX նախածանցը, ոչ թե EVEX-ը, ինչը CPU-ներին 512-բիթային վեկտորների առանց թույլ էր տալիս անտեսել EVEX-ը: 2024 թվականին Intel-ը մերժեց այս մոտեցումը և օգտագործեց EVEX-ի վերջին չօգտագործված բիթը 256-բիթային վեկտորների կլորացման համար AVX-512-ի կոդավորման և շարահյուսության հետ, ինչը vfmaddrnd231pd-ն և դրա կապակցվածները ավելորդ դարձրեց: Վերամշակման ընթացքում ինչ-որ մեկը սկսել է ջնջել ցուցադրված ինստրուցիան SDM-ի սևագրից:
Կոմպիլյատորի թելընթացները հաստատում են պատմությունը
2025 թվականին՝ Zen 4-ի AVX-512-ի ժողովրդականության հետևում, աջակցությունը դարձել է պարտադիր, իսկ Intel-ը AVX10-ում 512-բիթային աջակցությունը անպայման դարձրեց: Թարմացված AVX10 whitepaper-ից հեռացվեցին 256-բիթային վեկտորային գրանցի մաքսիմումը և 256-բիթային ներդրված կլորացման ինստրուցիաները: Intel-ը ուղարկել է թելընթացներ GCC-ում՝ հեռացնելով 256-բիթային կլորացման աջակցությունը, այդ թվում՝ Revert “AVX10.2 ymm rounding: Support vfmadd{132, 231, 213}p{s, d, h} intrins”, որը ջնջել է _mm256_fmadd_round_pd-ի նման intrinsic-ները: Այն շատ նման է ցուցադրված ինստրուցիայի համար փաստագրված _mm256_fmaddround_pd-ին: Ավելի ուշ Intel-ում նկատեցին, որ vfmaddrnd231pd-ն դեռ SDM-ում էր, և ջնջեցին այն: Հեղինակի ամփոփմամբ, ինստրուցիան AVX10-ի ժառանգն է. ավելացված նախատեսման ժամանակ, վերամշակված այլ կոդավորման համար և վերջում ավելորդ, թեև պատահականորեն հրապարակված պաշտոնական ուղեցույցում՝ չնայած տեխնիկան երբեք չի աշխատելու այն:
Հղումներ: purplesyringa.moe
SiTech — AI-ով հզորացված վեբ մշակում
Ստեղծում ենք արագ ու ժամանակակից կայքեր և AI-ը ներդնում իրական բիզնես գործընթացներում։ Ունե՞ք նախագիծ կամ հարց։ Ուրախ կլինենք օգնել։