
İnstruksiya vfmaddrnd231pd: Intel SDM-də sənədləşdirilib, lakin heç vaxt yaradılmayıb
FMA instruksiyası vfmaddrnd231pd Intel-in 2024-cü il SDM-də görünür, amma real texnikada təyin edilməmiş instruksiya xətası verir. Blogun araşdırması onu tərk edilmiş AVX10 yuvarıqlaşdırma təcrübələrinə qədər gətirir.
İnstruksiyanın görünməsi
vfmaddrnd231pd Intel-in Software Developer's Manual-ında (SDM) FMA instruksiyaları dəstəsinin üzvü kimi görünür. 2024-cü il nəşrinə görə, o, yuvarıqlaşdırma nəzarəti ilə paketlənmiş ikiqədər dəqiqlikdə üzən nöqtə dəyərlərinin birləşdirilmiş vurma-əlavə əməliyyatını yerinə yetirir. İnstruksiyaya bağlı dərhal bayt yuvarıqlaşdırma, DAZ, FTZ və istisnaların bastırılması bit sahələrini müəyyən edir. Belə nəzarət arifmetik əməliyyatlara yuvarıqlaşdırma rejimini birbaşa seçmə imkanı verirdi — ləng dəyişən qlobal parametrlərin əvəzinə — və yuvarıqlaşdirmadan asılı alqoritmləri əhəmiyyətli sürətləndirirdi. Amma bu instruksiya mövcud deyil.
Uğursuz axtarışlar və #UD xətası
GNU assembler vfmaddrnd231pd-i tanımır. SDM Intel C/C++ Compiler-in _mm_fmaddround_pd və _mm256_fmaddround_pd intrinsic-lərini sadalır, amma onlar nə Clang-da, nə də ICC-də yoxdur. İnstruksiyanın əl ilə qurulması SDM-in opcode siyahısından VEX.DDS.128.66.0F3A.W1 B8 /r /ib üzərindən bir sual belə qaldırır: təlimat kitabında DDS-nin nə deməkdir heç yerdə göstərilmir. FMA-nı dəstəkləyən Haswell CPU-da o, #UD (təyin edilməmiş instruksiya) xətası verir. SDM-in 2026-cı il nəşrində bu instruksiya yoxdur, 2024-cü il nəşrində isə var; onun qohum variantları — pd, ps, sd, ss və ya 132, 213, 231 formaları — digər FMA instruksiyalarında da yoxdur.
Tərk edilmiş AVX10 prototipi
Blogun şərhləri tarixi tamamladı. 2023-cü ildə Intel texniki məhdudiyyətlərə görə AVX-512-ni istifadəçi CPU-larına əlavə edə bilmədi, amma AVX-512 üslubundakı funksiyalar istəyirdi; bu, AVX10-a qədər apardı. AVX10 AVX-512-yə oxşardı, lakin 512-bit vektorları yalnız şərti dəstəkləyirdi. AVX-512-nin EVEX prefiksində statik yuvarıqlaşdırma bitləri əməliyyatın enindən istifadə olunur, ona görə də yuvarıqlaşdırma tənzimləmə yalnız skalyar və 512-bit əməliyyatlara imkan verirdi. AVX10 üçün 512-bit dəstək olmadan başqa kodlaşdırma tələb olunurdu. Nəzəri cəhətdən, Intel dərhal baytı yuvarıqlaşdırma üçün nəzərdə tuturdu, ona görə də vfmaddrnd231pd və oxşar instruksiyalar sənədləşməyə düşdü. O, EVEX deyil, VEX prefiksindən istifadə edirdi; bu, 512-bit vektorları olmayan CPU-lara EVEX-i gözardı etmə imkanı verirdi. 2024-cü ilə qədər Intel bu yanaşmadan imtina etdi və EVEX-in son istifadə olunmayan bitini 256-bit vektorların yuvarıqlaşdırması üçün AVX-512 kodlaşdırma və sintaksisi ilə istifadə etdi; bu, vfmaddrnd231pd və onun qohumlarını lazımsız etdi. Yenidən işləmə zamanı kimsə SDM layihəsindən instruksiyanın silinməsini başladı.
Kompilyator yamaqları tarixi təsdiqləyir
2025-ci ilə qədər AVX-512, Zen 4-ün populyarlığından sonra məcburi oldu və Intel AVX10-da 512-bit dəstəyi şərtsiz etdi. Yenilənmiş AVX10 whitepaper-dan 256-bit vektor registrinin maksimumu və 256-bit daxili yuvarıqlaşdırma instruksiyaları çıxarıldı. Intel GCC-də 256-bit yuvarıqlaşdırma dəstəyinin silinməsi üçün yamaqlar göndərdı, onların arasında „AVX10.2 ymm rounding: Support vfmadd{132, 231, 213}p{s, d, h} intrins“ Revert-i var; o, _mm256_fmadd_round_pd kimi intrinsic-ləri sildi. Bu, görünmə instruksiyası üçün sənədləşdirilmiş _mm256_fmaddround_pd-ə çox oxşardır. Daha sonra Intel-də vfmaddrnd231pd-in hələ SDM-də olduğunu qeyd etdilər və onu sildilər. Müəllifin xülasəsinə görə, instruksiya AVX10-nun nəsildir: prototipləşmə zamanı əlavə edilib, başqa kodlaşdırma üçün yenidən işlənib və nəticədə lazımsız olub, lakin texnik heç vaxt işə salmadığı halda təsadüfi şəkildə rəsmi təlimat kitabında dərc olunub.
Mənbələr: purplesyringa.moe
SiTech — AI ilə gücləndirilmiş veb hazırlanması
Sürətli və müasir saytlar qurur, AI-ı real biznes proseslərinə gətiririk. Layihəniz və ya sualınız var? Kömək etməyə hazırıq.