Geri Dön
vfmaddrnd231pd Komutu: Intel SDM'de Belgelenmiş Ama Hiç Yapılmamış
SiTech AI Team2 dk okuma

vfmaddrnd231pd Komutu: Intel SDM'de Belgelenmiş Ama Hiç Yapılmamış

Şüpheli FMA komutu vfmaddrnd231pd Intel'in 2024 SDM'inde yer alır, ancak gerçek donanımda tanımsız komut hatası verir. Blog araştırması onu terk edilmiş AVX10 yuvarlama deneylerine kadar götürüyor.

Görünen Komut

vfmaddrnd231pd Intel'in Software Developer's Manual'ında (SDM) FMA komutları kümesinin bir üyesi olarak görünür. 2024 baskısına göre, çift hassasiyetli kayan nokta değerlerinin yuvarlama kontrollü birleşik çarpma-toplamasını gerçekleştirir. Komuta bağlı immediate bayt, yuvarlama, DAZ, FTZ ve istisnaların bastırılması bit alanlarını tanımlar. Bu tür kontrol, aritmetik işlemlere yuvarlama modunu doğrudan seçme imkanı veriyordu, yavaş global değişkenler yerine, ve yuvarlamaya bağlı algoritmaları önemli ölçüde hızlandırırdı. Ancak bu komut mevcut değildir.

Başarısız Aramalar ve #UD Hatası

GNU assembler vfmaddrnd231pd'yi tanımaz. SDM, Intel C/C++ Compiler intrinsic'lerini _mm_fmaddround_pd ve _mm256_fmaddround_pd olarak adlandırır, ancak bunlar yalnızca Clang'da değil, ICC'de de yok. Komutun elle derlenmesi, SDM'in opcode listesinden VEX.DDS.128.66.0F3A.W1 B8 /r /ib ile, bir soru daha ortaya çıkarır: kılavuzda DDS ne anlama gelir hiçbir yerde belirtilmemiş. FMA'yı destekleyen bir Haswell CPU'sunda bu komut #UD (tanımsız komut) hatası verir. SDM'in 2026 baskısında bu komut yok, ancak 2024 baskısında var; pd, ps, sd, ss veya 132, 213, 231 varyantları da yok, ki bunlar diğer FMA komutlarında mevcuttur.

Terk Edilmiş AVX10 Prototipi

Blogun yorumları tarihi tamamladı. 2023 yılında Intel teknik kısıtlamalar nedeniyle AVX-512'yi tüketici CPU'larına ekleyemedi, ancak AVX-512 tarzı fonksiyonları istiyordu, bu da AVX10'a kadar götürdü. AVX10 AVX-512'ye benziyordu, ancak 512-bit vektörleri koşullu olarak destekliyordu. AVX-512'nin EVEX prefix'inde statik yuvarlama bitleri işlem genişliğinde kullanılır, bu yüzden yuvarlama ayarı yalnızca skaler ve 512-bit işlemler için mümkün. AVX10, 512-bit desteği olmadan farklı bir kodlama gerektiriyordu. Teorik olarak, Intel immediate baytını yuvarlama için planlıyordu, bu yüzden vfmaddrnd231pd ve benzeri komutlar belgelendirmeye girdi. Bu komut EVEX değil, VEX prefix'i kullanır, bu da 512-bit vektörler olmayan CPU'ların EVEX'i yok sayabilmesini sağlardı. 2024 itibarıyla Intel bu yaklaşımdan vazgeçti ve EVEX'in son kullanılmayıp atılan bitini 256-bit vektörler için yuvarlamaya ayırdı, AVX-512 kodlama ve sözdizimi ile, bu da vfmaddrnd231pd ve benzerlerini gereksiz kıldı. İşlem sırasında birisi SDM taslağından komutun silinmesine başladı.

Derleyici Yamanlamaları Tarihi Doğruluyor

2025 itibarıyla AVX-512, Zen 4'ün popülaritesinin ardından zorunlu hale gelmiş ve Intel, AVX10'da 512-bit desteğini koşulsuz kılmıştı. Güncellenmiş AVX10 beyaz kâğıdından 256-bit vektör kayıtçısı maksimumu ve 256-bit gömülü yuvarlama komutları çıkarıldı. Intel, GCC'ye 256-bit yuvarlama desteğini kaldıran yamalar gönderdi, bunlar arasında Revert „AVX10.2 ymm rounding: Support vfmadd{132, 231, 213}p{s, d, h} intrins“, _mm256_fmadd_round_pd gibi intrinsic'leri sildi. Bu, komut için belgelenmiş _mm256_fmaddround_pd'ye çok benziyor. Daha sonra Intel'de vfmaddrnd231pd'in hâlâ SDM'de olduğu fark edildi ve silindi. Yazarın özetine göre, komut AVX10'un bir ürünüdür: prototipleme sırasında eklenmiş, başka kodlamalar için işlenmiş ve sonunda gereksiz, ancak asla donımda çalışmayan, resmi kılavuzda yanlışlıkla yayınlanmıştır.

Kaynaklar: purplesyringa.moe

SSiTech

SiTech — AI destekli web geliştirme

Hızlı ve modern web siteleri kuruyor, AI'yı gerçek iş akışlarına taşıyoruz. Projeniz veya sorunuz mu var? Yardımcı olmaktan mutluluk duyarız.