Streaming SIMD Extensions
Intel Pentium III (Coppermine) işlemcisi | |
| Tasarımcı | Intel |
|---|---|
| Mimari | x86 |
| Tür | SIMD |
| Tanıtım | Şubat 1999 |
| İlk işlemci | Pentium III |
| Yazmaçlar | 8 × 128 bit (XMM0-XMM7), 64 bit kipinde 16; MXCSR |
| Buyruk sayısı | 70 (ilk sürüm) |
| Sürümler | SSE2 (2000), SSE3 (2004), SSSE3 (2006), SSE4 (2007) |
| Öncel | MMX |
| Ardıl | SSE2 |
Streaming SIMD Extensions (SSE), Intel'in x86 mimarisi için tanımladığı ve ilk kez Şubat 1999'da Pentium III işlemcisiyle sunduğu bir tek buyruk, çoklu veri (SIMD) buyruk kümesi uzantısıdır. İlk sürümü 70 yeni buyruk getirdi.[1] SSE, 128 bitlik XMM yazmaçlarını ve dört tek duyarlıklı kayan noktalı sayı üzerinde koşut işlem yapan buyrukları x86'ya ekledi.[2]
Uzantı sonraki yıllarda aynı yazmaçlar üzerinde SSE2, SSE3, SSSE3 ve SSE4 uzantılarıyla kuşak kuşak genişletildi. Kendisinden önce gelen MMX yalnız tam sayılarla çalışırken SSE ailesi kayan noktalı SIMD işlemini de x86'ya getirdi.[2]
AMD SSE'yi 2001'de Athlon XP işlemcisiyle kendi ürünlerine aldı.[3][4] Şirket ayrıca yalnız kendi işlemcilerinde bulunan SSE4a'yı tanımladı ve 2007'de SSE5'i önerdi; bu öneri 2009'da XOP, FMA4 ve CVT16 uzantılarına bölündü.[5][6] SSE ve SSE2, 64 bitlik x86'nın taban özellikleri arasındadır ve bu mimarinin çağrı kuralları kayan noktalı argümanları XMM yazmaçlarında geçirir; SSE3, SSSE3, SSE4.1 ve SSE4.2 ise x86-64-v2 mikromimari düzeyinin gerektirdiği uzantılardır.[7][8] XMM yazmaçları, Intel'in sonraki AVX, AVX2, AVX-512 ve AVX10 uzantılarında daha geniş yazmaçların alt kısmı olarak kullanılmayı sürdürdü.[9]
Yazmaçlar
[değiştir | kaynağı değiştir]
SSE, x86'ya 128 bitlik veri yazmaçları ekledi. 64 bit dışındaki kiplerde XMM0'dan XMM7'ye sekiz yazmaç vardır; 64 bit kipinde XMM8-XMM15 yazmaçlarıyla birlikte sayı on altıya çıkar.[2] MMX yazmaçlarından farklı olarak XMM yazmaçları kayan nokta biriminin, MMX'in ya da genel amaçlı yazmaçların üzerine eşlenmez; onlardan bağımsız olarak erişilir.[2]
Uzantı ayrıca 32 bitlik MXCSR denetim ve durum yazmacını tanımlar. Bu yazmaç SIMD kayan nokta işlemlerinde kural dışı durumların bayraklarını ve maskelerini, yuvarlama kipini, alttan taşmada sonucu sıfıra çeken bir bayrağı ve olağanlaştırılmamış işlenenleri sıfır sayan bir bayrağı taşır.[2]
XMM yazmaçları yeni bir mimari durum olduğu için işletim sisteminin bağlam değiştirmede bu durumu saklayıp geri yüklemesi gerekir. Intel'in el kitabına göre işletim sistemi SSE durumu ve kural dışı durumları için sistem düzeyinde destek sağlamadan bir uygulama SSE'yi kullanamaz; destek yoksa SSE buyrukları geçersiz işlem kodu kural dışı durumu üretebilir.[2] Bu, işletim sisteminde değişiklik gerektirmeyecek biçimde tasarlanan MMX'ten önemli bir ayrılıktır.[10]
Kuşaklar
[değiştir | kaynağı değiştir]SSE ailesi 1999 ile 2008 arasında Intel'in SSE, SSE2, SSE3, SSSE3 ve SSE4 uzantılarıyla büyüdü. AMD bu uzantıları kendi işlemcilerine sonradan aldı; ayrıca yalnız kendi işlemcilerinde bulunan SSE4a'yı tanımladı ve hiç piyasaya çıkmayan SSE5'i önerdi. Çizelgenin son sütunu, uzantının sonradan hangi yazılımlar için gereksinim hâline geldiğini ya da neyle değiştirildiğini gösterir.
| Uzantı | Yıl | Intel'de ilk işlemci | AMD'de ilk destek | Buyruk | Başlıca katkısı | Sonraki durum |
|---|---|---|---|---|---|---|
| SSE | 1999 | Pentium III | Athlon XP (2001)[3][4] | 70 | Sekiz 128 bitlik XMM yazmacı ve MXCSR; dört tek duyarlıklı sayı üzerinde koşut işlem; önbellek denetimi | 64 bitlik x86'nın taban özelliği, float için gerekli[7][8] |
| SSE2 | 2000 | Pentium 4, Xeon | K8 çekirdekleri (Opteron 2003, Athlon 64)[11][12] | 144[13] | Çift duyarlıklı kayan nokta ve 128 bitlik tam sayı türleri | 64 bitlik x86'nın taban özelliği, double için gerekli; Windows 8'in şartı[7][14] |
| SSE3 | 2004 | 90 nm Pentium 4 | SSE3 destekli K8 çekirdekleri; Opteron'da E sürümü ve sonrası[15][12] | 13 | Karmaşık sayı aritmetiği, hizasız yükleme, yatay toplama, MONITOR ve MWAIT[16] | x86-64-v2 düzeyinin parçası[8] |
| SSSE3 | 2006 | Xeon 5100, Core 2 | Family 14h ve Bulldozer çekirdekleri[12][17] | 32 | Tam sayılarda yatay işlemler, mutlak değer, baytların yerini değiştirme | x86-64-v2 düzeyinin parçası |
| SSE4.1 | 2007 | Xeon 5400, Core 2 Extreme QX9650 | Bulldozer (2011)[18] | 47 | Vektörleştirmeye yönelik alan seçme ve yuvarlama, 32 bitlik tam sayı işlemleri | x86-64-v2 düzeyinin parçası |
| SSE4.2 | 2008 | Core i7 (Nehalem) | Bulldozer (2011)[18] | 7 | Karakter dizisi karşılaştırma, CRC32, POPCNT | x86-64-v2 düzeyinin parçası; Windows 11 24H2'nin şartı[19] |
| SSE4a | 2007 | Yok | Family 10h çekirdekleri[12] | 4 | EXTRQ, INSERTQ, MOVNTSD, MOVNTSS[5] | Yalnız AMD işlemcilerinde |
| SSE5 | 2007 (duyuru) | Yok | Piyasaya çıkmadı | 100'ü aşkın | Üç işlenenli buyruklar, çarpma ile toplamayı birleştiren buyruklar, DREX kodlaması[20] | 2009'da XOP, FMA4 ve CVT16'ya bölündü;[6] XOP ve FMA4 Zen çekirdeklerinde yok[17] |
Intel sütunundaki işlemci ve yıl bilgileri Intel'in yazılım geliştirici el kitabından alınmıştır.[2]
SSE
[değiştir | kaynağı değiştir]SSE'nin hedef aldığı uygulamalar iki ve üç boyutlu grafik, video, görüntü işleme, konuşma tanıma, ses sentezi, telefon ve görüntülü toplantıdır.[2] Pentium III tasarımcıları bu buyrukları gerçeklerken kırmık alanı ve saat sıklığı hedefleri yüzünden bir dizi ödünleşime gitti.[21]
Buyruklar dört grupta toplanır:[2]
- Paketlenmiş ve tek öğeli tek duyarlıklı kayan nokta buyrukları. Veri taşıma, aritmetik, mantık, karşılaştırma, öğelerin yerini değiştirme ve dönüştürme işlemlerini kapsar. Paketlenmiş buyruklar dört sayının hepsinde aynı işlemi yapar; tek öğeli buyruklar yalnız en alttaki 32 bit üzerinde çalışır ve üstteki üç sayıyı hedefe olduğu gibi aktarır.
- 64 bitlik SIMD tam sayı buyrukları. MMX yazmaçları üzerinde çalışan ek tam sayı işlemleridir.
- Durum yönetimi buyrukları. MXCSR yazmacını bellekten yükleyen ve belleğe yazan buyruklardır.
- Önbellek denetimi, önceden getirme ve yazma sırası buyrukları. Verinin XMM yazmaçlarına önbelleği doldurmadan akıtılmasını, verinin kullanılmadan önce istenen önbellek düzeyine getirilmesini ve
SFENCEbuyruğuyla bellek yazmalarının sırasının denetlenmesini sağlar.
Pentium III'te gerçekleme
[değiştir | kaynağı değiştir]Intel uzantıyı ilk yayınlarında Internet Streaming SIMD Extensions adıyla tanıttı. Pentium III'ün tasarımcılarına göre 70 buyruk ve yeni bir mimari durum getiren uzantı, 80386'dan bu yana buyruk kümesinin ikinci önemli genişlemesi ve yeni mimari durum ekleyen ilk genişlemesidir; ilk genişleme olan MMX yeni bir durum eklememişti. Durumun x87 kayan nokta biriminden ayrılması gerçeklemeyi basitleştirdi ve SIMD kayan nokta buyruklarının MMX ya da x87 buyruklarıyla birlikte kullanılabilmesini sağladı. Sayısal kural dışı durumlar için ayrı bir kesme vektörü ayrıldı. Uzantı, IEEE uyumlu kipin yanında gerçek zamanlı uygulamalar için alttan taşmada sonucu sıfıra çeken daha hızlı bir kip de sunar.[22]
Pentium III, Pentium Pro ile başlayan P6 mikromimarisine dayanır. Tasarımın hedefi, uzantıyı kırmık alanını Pentium II'ye göre yaklaşık yüzde 10 büyüterek gerçeklemek ve saat sıklığını en az bir kademe artırmaktı. Buyruk çözücü 128 bitlik her buyruğu iki 64 bitlik mikro işleme çevirir; bu mikro işlemler 64 bitlik yürütme birimlerinde çalışır. Böylece 128 bitlik buyruk kümesi var olan 64 bitlik veri yolu üzerinde gerçeklendi ve değişiklikler büyük ölçüde buyruk çözücüyle sınırlı kaldı.[22]
Çarpıcı ve toplayıcı ayrı yürütme kapılarına yerleştirildiği için bir çarpma ve bir toplama mikro işlemi aynı anda gönderilebilir. Tasarımcılara göre bu düzen 550 MHz'de saniyede 2,2 milyar kayan nokta işlemi üst sınırı sağladı. 0 numaralı kapıdaki çarpıcı var olan x87 çarpıcısının değiştirilmiş biçimidir ve her çevrimde iki tek duyarlıklı sayıyı dört çevrimlik gecikmeyle çarpar; x87'nin tek duyarlıklı çarpması ise iki çevrimde bir sayı işliyor ve beş çevrim gecikmeyle çalışıyordu. 1 numaralı kapıya eklenen yeni toplayıcı iki tek duyarlıklı sayıyı üç çevrimlik gecikmeyle toplar ve karşılaştırma, çıkarma, en büyük ve en küçük değer ile dönüştürme buyruklarını da yürütür. Aynı kapıya verinin yeniden düzenlenmesi için öğelerin yerini değiştirme ve mantık işlemlerini yürüten bir birim de eklendi. x86 buyrukları işlenenlerinden birinin üzerine yazdığı için kodda sık görülen yazmaç kopyalamalarını hızlandırmak amacıyla iki ayrı taşıma kapısı gerçeklendi.[22]
128 bitlik bir buyruğun iki mikro işleme bölünmesi kesin kural dışı durum sorununu doğurdu. İkinci mikro işlem kural dışı durum üretirken birincinin sonucu kesinleştirilirse 128 bitlik yazmaç yarı yarıya güncellenmiş kalır. Tasarımcılar bunu, bir çiftin ilk mikro işlemini ikincisi de tamamlanabilir olana dek yeniden sıralama belleğinde bekleten bir düzenekle çözdü. Bu bekleme tamamlama hızını düşürdüğü için, bütün kural dışı durumlar maskeliyken mikro işlemler ayrı ayrı tamamlanır; tasarımcılara göre çokluortam yazılımları kural dışı durumları genellikle maskelediğinden bu durumda işlem hacminden kayıp olmaz. Taşma, sıfıra bölme ve alttan taşma gibi maskeli durumlar da donanımda hızla işlenir.[22]
Önceden getirme buyrukları, istenen veri önbellekte bulunamasa bile hemen hemen anında tamamlanacak biçimde gerçeklendi. Pentium II'de önbellekte bulunamayan bir yükleme, ardından gelen buyrukların tamamlanmasını da geciktirir; yeniden sıralama belleği gibi kaynaklar dolunca işlemcinin ön tarafı durur. Önceden getirmenin erken tamamlanması bu duraklamaları ortadan kaldırdı ve hesaplama ile bellek erişiminin koşut ilerlemesini sağladı. Önbelleğe yazmadan belleğe yazan buyruklar için tasarımcılar yola yazma bant genişliğini yüzde 20 artırdı; işlemcinin dört doldurma ara belleğinin hepsi, Pentium II'deki tek ara belleğin yerine, yazmaları birleştirmek için aynı anda kullanılabilir oldu.[22]
Kırmık alanını küçük tutmak için x87 çarpıcısı paketlenmiş kayan nokta çarpıcısıyla birleştirildi. Paketlenmiş değerlerin mutlak farklarını toplayan PSAD buyruğu fark, mutlak değer ve toplam olmak üzere üç mikro işlemle gerçeklendi; toplam, çarpıcının kısmi çarpımları topladığı Wallace ağacında hesaplanır. Tasarımcılar bu buyruğu yazılım denetimli önbellek kullanımıyla birleştirerek MPEG-2 videonun yazılımla gerçek zamanlı kodlanmasına ulaştıklarını bildirdi. Pentium III 550 MHz'e kadar üretime girdi ve 70 yeni buyruk kırmık alanında yaklaşık yüzde 10'luk bir artışla eklendi.[22]
SSE2
[değiştir | kaynağı değiştir]SSE2, 2000'de Pentium 4 ve Intel Xeon işlemcileriyle geldi ve 144 yeni buyruk ekledi.[13][2] İki çift duyarlıklı kayan noktalı sayıyı 128 bite paketleyen bir veri türü ile 128 bite paketlenmiş 8, 16, 32 ve 64 bitlik tam sayı türleri tanımlar. MMX ve SSE ile gelen 64 bitlik tam sayı buyruklarının PSHUFW dışındaki hepsine 128 bitlik bir sürüm ekler; böylece MMX'in tam sayı işlemleri XMM yazmaçlarına taşınabilir. SSE ile aynı yazmaçları kullandığı için ek bir işletim sistemi desteği gerektirmez.[2]
Çift duyarlıklı hesabın XMM yazmaçlarına taşınması kayan nokta biriminin yanında ikinci bir yol açtı. x87 hesabı 80 bitlik genişletilmiş duyarlıkta yapıp sonucu yuvarlarken SSE2 çift duyarlıklı sayıları doğal biçimleriyle işler; bu yüzden iki birimin sonuçları anlamlı kısmın en düşük bitlerinde ayrışabilir.[2] Pentium 4'ün tasarımcıları, SPEC 2000'in kayan nokta denektaşlarında SSE ve SSE2 buyruklarının yalnız x87 kullanan sürüme göre yaklaşık yüzde 5 kazanç sağladığını ve derleyiciler geliştikçe bu kazancın artacağını bildirdi.[13]
AMD, SSE2'yi K8 çekirdekli Opteron ve Athlon 64 işlemcilerine aldı.[11][12] 64 bitlik x86 için yazılan uygulama ikili arayüzü double türü için SSE2'yi gerekli sayar.[7] Microsoft da Windows 8'in kurulabilmesi için işlemcinin SSE2 desteklemesini şart koştu.[14]
SSE3
[değiştir | kaynağı değiştir]SSE3, Hyper-Threading teknolojisini destekleyen ve 90 nm süreçle üretilen Pentium 4 işlemcisiyle geldi ve 13 buyruk içerir. Yeni bir veri türü ya da yazmaç durumu eklemez.[2] Buyrukları şöyle gruplanır:[2]
| Sayı | Buyruklar | İşlev |
|---|---|---|
| 1 | FISTTP | Kayan nokta biriminde denetim sözcüğünü değiştirmeden, kesme yoluyla tam sayıya dönüştürme |
| 1 | LDDQU | Önbellek satırı bölünmesini önlemek için tasarlanmış hizasız 128 bitlik yükleme |
| 3 | MOVSLDUP, MOVSHDUP, MOVDDUP | Kayan noktalı öğeleri yükleme, taşıma ve çoğaltma |
| 2 | ADDSUBPS, ADDSUBPD | Paketlenmiş toplama ve çıkarma |
| 4 | HADDPS, HADDPD, HSUBPS, HSUBPD | Yatay toplama ve çıkarma |
| 2 | MONITOR, MWAIT | İş parçacıkları arasında eşzamanlama |
SSE ve SSE2 buyruklarının çoğu, iki işlenenin karşılıklı öğeleri arasında işlem yapan dikey bir hesaplama modeli izler. SSE3'ün yatay buyrukları ise aynı işlenenin komşu öğelerini birleştirir; örneğin HADDPD bir işlenenin iki öğesini toplayıp sonucu hedefin bir öğesine yazar.[2]
Pentium 4'ün tasarımcılarına göre buyruklar belirli yükler için seçildi. ADDSUBPS, ADDSUBPD ve yüklemeyi öğe çoğaltmayla birleştiren üç buyruk karmaşık sayı aritmetiğini hızlandırır; çift duyarlıklı iki karmaşık sayının çarpımı SSE2 ile 7, SSE3 ile 4 mikro işlem tutar. LDDQU, video kodlamada hareket kestiriminin sık yaptığı hizasız yüklemelerde önbellek satırı bölünmesinin cezasını ortadan kaldırır. Yatay toplama buyrukları grafikteki nokta çarpımlarını, FISTTP ise x87 kodundaki tam sayıya dönüştürmeleri hızlandırır.[16]
MONITOR ve MWAIT, işletim sisteminin boşta bekleme döngüsünde işlemciyi, belirlenen bir bellek bölgesine yazılana dek düşük güç tüketen bir duruma sokabilmesi için tanımlandı.[16] Linux çekirdeğinin intel_idle sürücüsü, bir mantıksal işlemcinin boşta olduğunu işlemciye bu buyrukla bildirir.[23] AMD'de SSE3 desteği K8 çekirdeklerinin sonraki sürümleriyle geldi; Opteron'da E sürümü ve sonrasında bulunur.[15][12]
SSSE3
[değiştir | kaynağı değiştir]SSSE3 (İngilizce: Supplemental Streaming SIMD Extensions 3), Xeon 5100 serisi ve Core 2 işlemci ailesiyle 2006'da geldi. Tam sayı verisi üzerindeki SIMD işlemlerini hızlandıran 32 buyruk içerir.[2] Buyrukların işlenenleri 8, 16 ya da 32 bitlik paketlenmiş tam sayılardır ve 64 bitlik MMX ya da 128 bitlik XMM yazmaçlarında durabilir; bu yüzden çoğu işlemin iki sürümü vardır.[2]
| Sayı | Buyruklar | İşlev |
|---|---|---|
| 12 | PHADDW, PHADDD, PHADDSW, PHSUBW, PHSUBD, PHSUBSW | Tam sayılarda yatay toplama ve çıkarma, doymalı biçimleriyle |
| 6 | PABSB, PABSW, PABSD | Mutlak değer |
| 2 | PMADDUBSW | Çarpıp toplama; nokta çarpımlarını hızlandırır |
| 2 | PMULHRSW | Ölçekli tam sayı çarpması |
| 2 | PSHUFB | İkinci işlenendeki denetim baytlarına göre baytların yerini değiştirme |
| 6 | PSIGNB, PSIGNW, PSIGND | Kaynaktaki karşılık gelen öğe eksiyse hedef öğenin eksisini alma |
| 2 | PALIGNR | İki işlenenin birleşiminden veri hizalama |
Çizelgedeki sayılar MMX ve XMM sürümleri birlikte sayılarak verilmiştir.[2]
Intel'e göre SSSE3 çokluortam ve sinyal işleme uygulamalarındaki tam sayı SIMD işlemlerini hızlandırmak için tanımlandı. Yatay toplama ve çıkarma buyrukları, SSE3'ün kayan noktalı yatay buyruklarının 16 ve 32 bitlik işaretli tam sayılar için karşılığıdır ve 16 bitlik sürümlerinin doymalı biçimleri de vardır. PMADDUBSW işaretsiz baytları karşılık gelen işaretli baytlarla çarpar ve komşu 16 bitlik ara sonuçları doymalı olarak toplar. PMULHRSW 16 bitlik işaretli sayıları çarpar, 32 bitlik ara sonucun en anlamlı 18 bitini alıp yuvarlayarak ölçekli 16 bitlik bir sonuç üretir.[2]
PSHUFB, ikinci işlenendeki denetim maskesine göre birinci işlenenin baytlarını yerinde karıştırır; denetim baytının en anlamlı biti 1 ise sonuç baytına sıfır yazılır. PALIGNR iki işleneni art arda ekleyip anlık değerin belirlediği bayt konumundan sağa hizalı bir değer çıkarır. SSE'yi destekleyen bir işletim sistemi SSSE3 için de yeterli desteği sağlar.[2] Intel'in el kitabına göre 45 nm Atom işlemciler SSSE3'e kadarki buyrukları destekler.[2] AMD'de SSSE3, Family 14h ve Bulldozer çekirdekleriyle geldi.[12][17]
SSE4
[değiştir | kaynağı değiştir]SSE4, 45 nm süreçle üretilen Intel işlemcilerle geldi ve 54 buyruk içerir. Bunların 47'si SSE4.1 adıyla ilk kez Xeon 5400 serisi ve Core 2 Extreme QX9650 işlemcilerinde sunuldu; kalan yedi buyruk SSE4.2 adını taşır.[2] SSE4.2, SSE4.1 ile birlikte Nehalem mikromimarisine dayanan işlemcilerde yer alır.[24]
SSE4 de yeni bir veri türü eklemez ve MMX yazmaçlarını kullanmaz. SSE4.1 buyruklarının hepsi ve SSE4.2 buyruklarından beşi XMM yazmaçları üzerinde çalışır; SSE4.2'nin kalan iki buyruğu, CRC32 ve POPCNT, genel amaçlı yazmaçları kullanır.[2]
SSE4.1 çokluortam, görüntü işleme ve üç boyutlu grafik yüklerine ve derleyicinin döngüleri vektörleştirmesini kolaylaştırmaya yöneliktir. SSE4.2 ise karakter dizisi işleme buyruklarını, 64 bitlik tam sayıları karşılaştıran bir buyruğu ve belirli uygulamaları hızlandıran iki buyruğu ekler.[24]
SSE4.1'in alan seçme buyrukları, kaynaktaki bir alanı koşula bağlı olarak hedefteki aynı alana kopyalar ve önceki uzantılarla iki ile dört işlemlik bir diziyle yapılan işi çoğu zaman tek buyrukta karşılar. Yuvarlama buyruklarında kip, geçerli yuvarlama kipi değiştirilmeden bir anlık değerle seçilir. SSE4.2'nin dört karakter dizisi buyruğu en çok 16 baytlık parçalar üzerinde çalışır ve tek buyrukta öğe çiftleri arasında 256'ya kadar karşılaştırma yapar.[24] POPCNT SSE4.2 ile tanımlanmış olsa da işlemcinin desteğini bildiren ayrı bir CPUID biti vardır.[2]
AMD, SSE4.1 ve SSE4.2'yi 2011'de Bulldozer çekirdekli AMD FX, Opteron 6200 ve Opteron 4200 işlemcileriyle destekledi.[18] Tom's Hardware'in bildirdiğine göre Windows 11'in 24H2 sürümü SSE4.2 desteği olmayan işlemcilerde açılmıyor.[19]
AMD
[değiştir | kaynağı değiştir]Benimseme
[değiştir | kaynağı değiştir]AMD da SSE'yi kendi işlemcilerine aldı. Şirketin 9 Ekim 2001'de tanıttığı Athlon XP işlemcisinin[3] veri sayfası, kayan nokta biriminin x87, MMX, SSE ve 3DNow! buyruklarının hepsini yürüttüğünü ve işlemcinin MMX, SSE ya da 3DNow! için hazırlanmış uygulamalarla geriye uyumlu olduğunu belirtir.[4] Microsoft'un derleyici belgeleri de SSE'nin yerleşik işlevlerinden (İngilizce: intrinsic) 15'inin 3DNow! destekli AMD işlemcilerinde desteklendiğini belirtir. Bunlar 64 bitlik __m64 türüyle çalışan tam sayı işlevleri ile _mm_prefetch ve _mm_sfence işlevleridir.[25]
AMD'nin 64 bitlik x86 genişletmesini taşıyan Opteron işlemcisinin Nisan 2003 tarihli veri sayfası SSE ve SSE2 desteğini sayar. Aynı belgeye göre bu genişletme 64 bitlik tam sayı yazmaçlarına ve 128 bitlik SSE/SSE2 yazmaçlarına sekizer yeni yazmaç ekler ve ikisinin sayısı da on altıya çıkar.[11]
SSE4a
[değiştir | kaynağı değiştir]AMD, Temmuz 2007'de programcı el kitabına SSE4a adını verdiği dört buyruk ekledi. EXTRQ, bir XMM yazmacının alt 64 bitinden başlangıç biti ve uzunluğu verilen bir alanı çıkarır; INSERTQ ise bir bit alanını yazmacın alt 64 bitine yerleştirir. MOVNTSD ve MOVNTSS, tek bir çift ya da tek duyarlıklı sayıyı işlemciye verinin önbelleğe alınmasının gerekmediğini bildiren bir ipucuyla belleğe yazar. Desteği, 8000_0001h işleviyle çağrılan CPUID buyruğunun ECX yazmacındaki 6. bit gösterir.[5]
SSE4a, Intel'in SSE4 uzantısının 54 buyruğu arasında yer almaz.[24] GCC belgeleri SSE4a'yı Family 10h çekirdeklerinden Zen çekirdeklerine kadar AMD işlemci ailelerinin desteklediği uzantılar arasında sayar.[12][17]
SSE5 ve AVX'e geçiş
[değiştir | kaynağı değiştir]AMD, Ağustos 2007'de SSE5 adını verdiği yeni bir uzantıyı duyurdu ve bunun 2009'da çıkacak Bulldozer çekirdekli yongalarında yer alacağını açıkladı.[26] Belirtime göre SSE5, 23 temel buyruktan türeyen 100'ü aşkın buyruk içeriyordu. Başlıcaları üç işlenenli buyruklar, çarpma ile toplamayı tek buyrukta birleştiren buyruklar, tam sayı çarpıp biriktirme, yer değiştirme ve koşullu taşıma, vektör karşılaştırma ve sınama ile duyarlık denetimi, yuvarlama ve dönüştürme buyruklarıydı. Bu buyruklar üçüncü bir işlem kodu baytı ile hedef yazmacı belirten DREX adlı yeni bir bayt kullanan ayrı bir kodlama getiriyordu.[20] AMD, üç işlenenli buyruklarla işlemin sonucunun iki işlenenden birinin üzerine yazılmak zorunda kalmadığını, uzantıyla AES şifrelemesinde beş kata varan, ayrık kosinüs dönüşümünde ise yüzde 30'luk hızlanma gördüğünü açıkladı.[26]
Intel, Nisan 2008'de AVX önerisini yayımladı. AMD'ye göre bu öneri SSE5'in üç ve dört işlenenli buyruklarını, çarpma-toplama buyruklarını ve bazı yer değiştirme buyruklarını farklı bir biçimde içeriyor, ayrıca kayan noktalı SIMD işlemlerinin genişliğini iki katına çıkarıyordu. İki önerinin işlevleri örtüştüğü için AMD, Mayıs 2009'da gelecekteki işlemcilerinde AVX'i destekleyeceğini ve SSE5'i AVX çerçevesine uyarladığını açıkladı. Uyarlamanın sonunda üç uzantı ortaya çıktı. Bunlar XOP (İngilizce: eXtended Operations), 16 bitlik kayan noktalı sayılarla dönüşüm yapan CVT16 ve dört işlenenli çarpma-toplama buyruklarını içeren FMA4'tür. AVX'te karşılığı olmayan SSE5 özellikleri XOP'ta toplandı.[6] AMD'nin Kasım 2009 tarihli belirtimine göre XOP buyrukları üç baytlık yeni bir XOP önekiyle, FMA4 buyrukları ise AVX'in VEX önekiyle kodlanır.[27]
Sonraki gelişmeler
[değiştir | kaynağı değiştir]SSE'nin 128 bitlik XMM yazmaçları, Intel'in sonraki vektör uzantılarında daha geniş yazmaçların alt yarısı ya da alt çeyreği olarak kullanılmayı sürdürdü. AVX ailesinin uzantıları SSE'nin programlama modelini genişletir ve eski SSE buyruklarının çoğuna yeni kodlamalarla karşılık verir.[9]
| Uzantı | Yıl | Yazmaçlar | Intel'de ilk işlemciler | AMD'de ilk destek | Başlıca yenilik |
|---|---|---|---|---|---|
| AVX | 2011 | 16 × 256 bit (YMM) | Sandy Bridge (ikinci kuşak Core)[2][12] | Bulldozer (2011)[18] | VEX öneki, üç işlenenli buyruklar, 256 bitlik kayan nokta işlemleri |
| AVX2 | 2013 | 16 × 256 bit (YMM) | Haswell (dördüncü kuşak Core)[9][12] | Excavator[12][17] | 256 bitlik tam sayı işlemleri, dağınık yükleme, öğe başına kaydırma |
| AVX-512 | 2016 | 32 × 512 bit (ZMM), 8 maske yazmacı | P çekirdekli Xeon işlemciler[28] | Zen 4 (EPYC 9004)[29] | EVEX öneki, maskeyle koşullu işlem, gömülü yuvarlama denetimi |
| AVX10 | 2023 (belirtim) | AVX-512 ile aynı | Granite Rapids (AVX10.1)[28] | – | Başarım ve verimlilik çekirdeklerinde ortak buyruk kümesi, sürüm numarasıyla sınama |
AVX
[değiştir | kaynağı değiştir]Intel'in 2011'de ikinci kuşak Core işlemcilerle sunduğu AVX uzantısı, VEX adlı yeni bir önekle 256 bitlik YMM yazmaçlarını getirdi. XMM yazmaçları bu yazmaçların alt 128 bitini oluşturur. Intel'in el kitabına göre MMX yazmaçlarıyla çalışanlar dışında eski 128 bitlik SIMD buyruklarının neredeyse hepsinin üç işlenenli bir AVX karşılığı vardır. Örneğin iki işlenenli ADDPS xmm1, xmm2/m128 buyruğu, AVX'te kaynağı bozmayan VADDPS xmm1, xmm2, xmm3/m128 biçimini alır.[2]
VEX ile kodlanan buyrukların çoğunda bellek işleneninin 16 baytlık sınıra hizalanması gerekmez. AVX'in 128 bitlik karşılaştırma buyrukları, SSE ve SSE2'deki 8 karşılaştırma koşulu yerine 32 koşul sunar. VEX öneki taşımayan eski SSE buyrukları YMM yazmaçlarının üst bitlerine dokunmaz; 128 bitlik VEX buyrukları ise bu bitleri sıfırlar.[2]
AVX2
[değiştir | kaynağı değiştir]AVX2, 128 bitlik SIMD tam sayı buyruklarının büyük çoğunluğunu 256 bitlik YMM yazmaçlarına taşır; AVX ile aynı VEX kodlamasını ve aynı işletim sistemi desteğini kullanır. Yeni işlevleri arasında bellekteki bitişik olmayan öğeleri bir taban yazmacı ile bir vektör yazmacındaki indisler aracılığıyla yükleyen dağınık yükleme (İngilizce: gather) buyrukları, her öğe için ayrı bir kaydırma miktarı alan kaydırma buyrukları ve öğeleri yayan ya da yerlerini değiştiren buyruklar vardır. AVX2, AVX'in kayan noktalı buyruklarının 32 ve 64 bitlik tam sayılar için eksiksiz karşılıklarını da ekler.[9] Intel'de ilk kez Haswell mikromimarisine dayanan dördüncü kuşak Core işlemcilerde yer aldı.[9][12]
AVX-512
[değiştir | kaynağı değiştir]Intel, AVX-512'yi 2016'da sundu.[28] Aile, AVX-512 Foundation buyruklarının yanında üstel ve çarpmaya göre ters değer, çakışma algılama ve önceden getirme buyrukları ile ek 512 bitlik buyruk kümelerinden oluşur. Uzantı 64 bit kipinde ZMM0'dan ZMM31'e kadar 32 adet 512 bitlik yazmaç getirir. Bu yazmaçların alt 256 biti YMM, alt 128 biti XMM yazmaçlarıdır; 32 bit kipinde kullanılabilen yazmaç sayısı sekizde kalır. EVEX adlı yeni önek, VEX'in olanaklarının yanında maske yazmaçlarını, gömülü yaymayı, buyruğa gömülü yuvarlama denetimini ve sıkıştırılmış adres uzaklığını kodlar.[9]
Sekiz 64 bitlik maske yazmacından k1-k7 koşullu işlem için kullanılır. Örneğin VADDPS zmm1 {k1}{z}, zmm2, zmm3 buyruğu yalnız k1 yazmacında biti 1 olan öğeleri toplar; {z} belirteci öteki öğeleri sıfırlar, belirteç yazılmazsa bu öğeler hedefte olduğu gibi kalır.[9] AVX-512 zamanla her biri ayrı bir CPUID biti taşıyan birçok alt uzantıya bölündü. Intel'e göre Granite Rapids kod adlı Xeon işlemcilerde bu bitlerin sayısı 20'yi aşacaktı.[28]
AMD, AVX-512'yi dördüncü kuşak EPYC işlemcilerindeki Zen 4 çekirdekleriyle destekledi.[29] AMD'nin ayar kılavuzuna göre bu işlemcilerin veri yolu 512 değil 256 bit genişliğindedir ve 512 bitlik bir vektörün yüklenmesi iki çevrim sürer. AMD bu yolla güç tasarrufu sağlandığını ve kazanılan gücün saat sıklığını artırmak için kullanılabildiğini belirtir. Kılavuz bu işlemcilerin AVX-512 desteğinin BFLOAT16 ve VNNI buyruklarını da kapsadığını yazar.[30] GCC belgeleri ise Intel'in Alder Lake, Raptor Lake ve Meteor Lake işlemcileri için AVX2 ve AVX-VNNI uzantılarını sayar, AVX-512 uzantılarını saymaz.[12]
AVX10
[değiştir | kaynağı değiştir]Intel, Haziran 2023'te yayımladığı teknik raporla AVX10'u tanımladı. AVX10, AVX-512'nin bütün yeteneklerini içerir ve Intel'in gelecekteki başarım (P) ve verimlilik (E) çekirdeklerinin hepsinde desteklenecek ortak bir vektör buyruk kümesi olarak tasarlandı. Destek, her yeni buyruk için ayrı bir CPUID biti yerine önceki sürümleri kapsayan ve hep artan bir sürüm numarasıyla bildirilir. AVX-512'nin buyruk kümesi AVX10 ile birlikte dondurulur; sonraki yeni vektör buyrukları yalnız AVX10'un parçası olarak tanımlanır.[28]
İlk sürüm AVX10.1, Granite Rapids kod adlı P çekirdekli Xeon işlemcilerdeki AVX-512 buyruklarının AVX10 ile ileriye uyumlu alt kümesini kapsar. AVX10.2 ise yapay zekâ veri türleri ve dönüşümleri, veri taşıma ve standart desteği için yeni buyruklar ekler; bu buyruklar küçük ayrıklar dışında 128, 256 ve 512 bitlik vektör boylarının hepsinde desteklenir. Raporun Mart 2025'teki üçüncü düzeltmesinde en büyük vektör yazmacı boyunu 256 bitle sınırlayan ifadeler belgeden çıkarıldı.[28]
Durum yönetimi
[değiştir | kaynağı değiştir]Genişleyen yazmaçlar işletim sisteminin bağlam değiştirmede sakladığı durumu da büyüttü. Intel'in XSAVE buyrukları işlemci durumunu bileşenlere ayırır. 0 numaralı bileşen x87 kayan nokta birimini, 1 numaralı bileşen SSE yazmaçlarını, 2 numaralı bileşen AVX'in ek yazmaç durumunu tutar; AVX-512'nin durumu ise maske yazmaçları, ZMM0-ZMM15 yazmaçlarının üst 256 biti ve ZMM16-ZMM31 yazmaçları olmak üzere üç bileşene dağılır.[9]
SSE ile sonraki uzantılar arasında önemli bir ayrım vardır. AVX ve AVX-512 gibi özelliklerin buyrukları, işletim sistemi bu özelliklerin durum bileşenlerini XCR0 denetim yazmacında açmadıkça çalıştırılamaz ve geçersiz işlem kodu kural dışı durumu üretir. x87 ve SSE buyrukları ise CR4 yazmacının OSXSAVE biti ile XCR0'ın değerinden bağımsız olarak çalıştırılabilir.[9]
Kullanımdan kalkanlar
[değiştir | kaynağı değiştir]MMX yazmaçlarını kullanan SSE ve SSE2 buyruklarına, örneğin CVTPI2PS ve CVTPD2PI dönüştürmelerine, VEX karşılığı tanımlanmadı; VEX öneki MMX ve x87 yazmaçlarıyla çalışan buyruklarda kullanılamaz.[2] Microsoft'un derleyicisinde de __m64 türünü kullanan SSE yerleşik işlevleri x64 işlemcilerde desteklenmez.[31]
AMD, 2010'da kendi SIMD uzantısı 3DNow!'ın kullanımdan kaldırıldığını ve bazı yeni işlemcilerinde desteklenmeyeceğini duyurdu. Şirket, bu buyrukları kullanan kodun yalnız CPUID özellik biti denetlendikten sonra çalıştırılmasını ve öteki durumlarda SSE gibi başka bir kod yoluna geçilmesini önerdi.[32] Red Hat'e göre 64 bitlik Red Hat Enterprise Linux'un kullanıcı alanı da uzun süre AMD K8 taban özelliklerinin 3DNow! dışındaki kısmına göre derlendi.[33] SSE5'ten türeyen XOP ve FMA4, 2011'de Bulldozer çekirdekli işlemcilerde yer aldı;[18] sıfırdan tasarlanan Zen çekirdeklerinde ise bulunmaz.[17]
Taban gereksinim hâline gelmesi
[değiştir | kaynağı değiştir]64 bitlik x86'nın taban özellik kümesi SSE ve SSE2'yi içerir.[8] 2020 yazında AMD, Intel, Red Hat ve SUSE bu tabanın üzerinde üç mikromimari düzeyi tanımladı. Bunların ilki olan x86-64-v2, SSE3, SSSE3, SSE4.1 ve SSE4.2 ile POPCNT, CMPXCHG16B, LAHF ve SAHF buyruklarını gerektirir; x86-64-v3 AVX2'ye, x86-64-v4 ise bazı AVX-512 uzantılarına kadar çıkar.[8][33] Red Hat, Red Hat Enterprise Linux 9 için x86-64-v2 düzeyini uygun seçim olarak belirledi.[33]
İşletim sistemleri de ailenin üyelerini zamanla şart koştu. Microsoft, Windows 8 için SSE2 desteğini gerekli saydı.[14] Tom's Hardware'in bildirdiğine göre Windows 11'in 24H2 sürümü, 26080 numaralı yapıdan başlayarak SSE4.2 desteği olmayan işlemcilerde açılmıyor.[19]
Yazılımda kullanım
[değiştir | kaynağı değiştir]Desteğin sınanması
[değiştir | kaynağı değiştir]Bir program bu buyrukları kullanmadan önce işlemcinin onları tanıyıp tanımadığını CPUID buyruğuyla sınar. EAX yazmacına 1 yüklenerek çağrılan CPUID buyruğunun EDX yazmacına döndürdüğü değerde 25. bit SSE'yi, 26. bit SSE2'yi; ECX yazmacına döndürdüğü değerde 0. bit SSE3'ü, 9. bit SSSE3'ü, 19. bit SSE4.1'i, 20. bit SSE4.2'yi gösterir.[2] İşlemci desteklemediği bir SSE ya da SSE2 buyruğunu çalıştırmaya kalkarsa geçersiz işlem kodu kural dışı durumu üretir.[2]
Çağrı kuralları
[değiştir | kaynağı değiştir]64 bitlik x86 için tanımlanan çağrı kuralları kayan noktalı sayıları XMM yazmaçlarıyla taşır. System V için hazırlanan AMD64 uygulama ikili arayüzü taslağına göre mimari, 16 genel amaçlı 64 bitlik yazmacın yanında 128 bitlik 16 SSE yazmacı ve 80 bitlik 8 x87 kayan nokta yazmacı sağlar. Belge, bu arayüze uyan programlar için float türüne SSE'yi, double türüne SSE2'yi gerekli işlemci özelliği sayar; long double için x87 kayan nokta birimi gerekir.[7] Kayan noktalı argümanlar sıradaki boş XMM yazmacıyla, XMM0'dan XMM7'ye doğru geçirilir. XMM0 ve XMM1 kayan noktalı değerleri döndürmek için de kullanılır, long double değerleri ise x87 yazmaçlarında döner.[7]
Microsoft'un x64 çağrı kuralları argüman geçirmede x87 yazmaç yığıtını kullanmaz ve bütün kayan nokta işlemlerini 16 XMM yazmacıyla yapar. İlk dört argümandan kayan noktalı olanlar konumlarına göre XMM0-XMM3 yazmaçlarında geçirilir. XMM6-XMM15 ise çağrılan işlevin kullanırsa saklayıp geri yüklemesi gereken kaydedilen yazmaçlardır.[34]
Programlama
[değiştir | kaynağı değiştir]SSE buyrukları çevirici dilde doğrudan yazılabileceği gibi C ve C++ programlarında yerleşik işlevlerle de kullanılabilir. Microsoft'un derleyici belgelerine göre SSE yerleşik işlevlerinin bildirimleri xmmintrin.h başlık dosyasındadır ve bu işlevler __m128, __m128i ve __m128d veri türlerini kullanır. __m64 türünü kullanan SSE yerleşik işlevleri x64 işlemcilerde desteklenmez.[31]
Aşağıdaki işlev, dört öğeli iki tek duyarlıklı diziyi _mm_loadu_ps ile yükler, _mm_add_ps ile toplar ve sonucu _mm_storeu_ps ile belleğe yazar. Microsoft'un x86 yerleşik işlevleri listesinde üç işlev de SSE uzantısına bağlı olarak __m128 türüyle tanımlanır.[35]
#include
/* a, b ve c en az dört öğeli dizilerdir */
void topla4(const float *a, const float *b, float *c)
{
__m128 x = _mm_loadu_ps(a); /* a[0]..a[3] yüklenir */
__m128 y = _mm_loadu_ps(b); /* b[0]..b[3] yüklenir */
__m128 t = _mm_add_ps(x, y); /* dört öğe birlikte toplanır */
_mm_storeu_ps(c, t); /* sonuç c[0]..c[3] içine yazılır */
}
Kaynakça
[değiştir | kaynağı değiştir]- ↑ "Intel Launches the Pentium III Processor". Intel. 26 Şubat 1999. 12 Mart 2026 tarihinde kaynağından arşivlendi. Erişim tarihi: 12 Eylül 2026.
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 "Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 1: Basic Architecture (253665-039US)" (PDF). Intel. Mayıs 2011. 28 Haziran 2011 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 13 Eylül 2026.
- 1 2 3 "AMD Improves Outlook for Fourth Quarter". AMD. 6 Aralık 2001. 13 Eylül 2026 tarihinde kaynağından arşivlendi. Erişim tarihi: 13 Eylül 2026.
- 1 2 3 "AMD Athlon XP Processor Model 6 Data Sheet (24309 Rev. E)" (PDF). AMD. Mart 2002. 4 Nisan 2003 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 13 Eylül 2026.
- 1 2 3 "AMD64 Architecture Programmer's Manual Volume 4: 128-Bit Media Instructions (26568 Rev. 3.10)" (PDF). AMD. Eylül 2007. 6 Aralık 2008 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 13 Eylül 2026.
- 1 2 3 Christie, Dave (6 Mayıs 2009). "Striking a Balance". AMD Developer Central. 4 Kasım 2013 tarihinde kaynağından arşivlendi. Erişim tarihi: 13 Eylül 2026.
- 1 2 3 4 5 6 Matz, Michael; Hubička, Jan; Jaeger, Andreas; Mitchell, Mark (7 Ekim 2013). "System V Application Binary Interface: AMD64 Architecture Processor Supplement, Draft Version 0.99.6" (PDF). 1 Ağustos 2016 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 13 Eylül 2026.
- 1 2 3 4 5 "System V Application Binary Interface: AMD64 Architecture Processor Supplement, Low Level System Information". x86-64 psABI. 14 Eylül 2026 tarihinde kaynağından arşivlendi. Erişim tarihi: 13 Eylül 2026.
- 1 2 3 4 5 6 7 8 9 "Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 1: Basic Architecture (253665-060US)" (PDF). Intel. Eylül 2016. 9 Mayıs 2026 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 13 Eylül 2026.
- ↑ Mittal, Millind; Peleg, Alex; Weiser, Uri (1997). "MMX Technology Architecture Overview" (PDF). Intel Technology Journal. 1 (3). 4 Mart 2016 tarihinde kaynağından (PDF) arşivlendi13 Eylül 2026.
- 1 2 3 "AMD Opteron Processor Data Sheet (23932 Rev. 3.00)". AMD. Nisan 2003. Erişim tarihi: 13 Eylül 2026.
- 1 2 3 4 5 6 7 8 9 10 11 12 13 "x86 Options". Using the GNU Compiler Collection. GNU Project. 13 Eylül 2026 tarihinde kaynağından arşivlendi. Erişim tarihi: 13 Eylül 2026.
- 1 2 3 Hinton, Glenn; Sager, Dave; Upton, Mike; Boggs, Darrell; Carmean, Doug; Kyker, Alan; Roussel, Patrice (2001). "The Microarchitecture of the Pentium 4 Processor" (PDF). Intel Technology Journal. 5 (1). 12 Ocak 2022 tarihinde kaynağından arşivlendi (PDF)13 Eylül 2026.
- 1 2 3 "What is PAE, NX, and SSE2 and why does my PC need to support them to run Windows 8?". Microsoft. 11 Nisan 2013 tarihinde kaynağından arşivlendi. Erişim tarihi: 13 Eylül 2026.
- 1 2 "AMD Opteron Processor Product Data Sheet (23932 Rev. 3.23)" (PDF). AMD. Mart 2007. 6 Kasım 2025 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 13 Eylül 2026.
- 1 2 3 Boggs, Darrell; Baktha, Aravindh; Hawkins, Jason; Marr, Deborah T.; Miller, J. Alan; Roussel, Patrice; Singhal, Ronak; Toll, Bret; Venkatraman, K. S. (18 Şubat 2004). "The Microarchitecture of the Intel Pentium 4 Processor on 90nm Technology" (PDF). Intel Technology Journal. 8 (1). 22 Ağustos 2026 tarihinde kaynağından arşivlendi (PDF)13 Eylül 2026.
- 1 2 3 4 5 6 Larabel, Michael (3 Mart 2017). "The Impact Of GCC Zen Compiler Tuning On AMD Ryzen Performance". Phoronix. 13 Eylül 2026 tarihinde kaynağından arşivlendi. Erişim tarihi: 13 Eylül 2026.
- 1 2 3 4 5 Hollingsworth, Brent (Ekim 2012). "New "Bulldozer" and "Piledriver" Instructions" (PDF). AMD. 7 Ocak 2013 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 13 Eylül 2026.
- 1 2 3 Klotz, Aaron (24 Nisan 2024). "Microsoft blocks some PCs from Windows 11 24H2 - CPU must support SSE4.2 or the OS will not boot". Tom's Hardware. 11 Şubat 2025 tarihinde kaynağından arşivlendi. Erişim tarihi: 13 Eylül 2026.
- 1 2 "128-Bit SSE5 Instruction Set (43479 Rev. 3.01)" (PDF). AMD. Ağustos 2007. 27 Aralık 2022 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 13 Eylül 2026.
- ↑ Raman, S. K.; Pentkovski, V.; Keshava, J. (2000). "Implementing streaming SIMD extensions on the Pentium III processor". IEEE Micro. 20 (4). ss. 47-57. doi:10.1109/40.865866.
- 1 2 3 4 5 6 Keshava, Jagannath; Pentkovski, Vladimir (1999). "Pentium III Processor Implementation Tradeoffs" (PDF). Intel Technology Journal. 3 (2). 4 Mart 2016 tarihinde kaynağından arşivlendi (PDF)13 Eylül 2026.
- ↑ Wysocki, Rafael J. "intel_idle CPU Idle Time Management Driver". The Linux Kernel documentation. 7 Eylül 2026 tarihinde kaynağından arşivlendi. Erişim tarihi: 13 Eylül 2026.
- 1 2 3 4 "Intel SSE4 Programming Reference (D91561-003)" (PDF). Intel. Temmuz 2007. 15 Şubat 2020 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 13 Eylül 2026.
- ↑ "Streaming SIMD Extensions Supported by 3DNow!". Microsoft. 1 Şubat 2013. 13 Eylül 2026 tarihinde kaynağından arşivlendi. Erişim tarihi: 13 Eylül 2026.
- 1 2 Vance, Ashlee (30 Ağustos 2007). "AMD plots single thread boost with x86 extensions". The Register. 14 Aralık 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 13 Eylül 2026.
- ↑ "AMD64 Architecture Programmer's Manual Volume 6: 128-Bit and 256-Bit XOP and FMA4 Instructions (43479 Rev. 3.04)" (PDF). AMD. Kasım 2009. 21 Ağustos 2018 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 13 Eylül 2026.
- 1 2 3 4 5 6 "The Converged Vector ISA: Intel Advanced Vector Extensions 10 Technical Paper (356368-003US)" (PDF). Intel. Mart 2025. 17 Nisan 2025 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 13 Eylül 2026.
- 1 2 "Fast AI inference with AMD EPYC 9004 Processors". AMD. 10 Temmuz 2026 tarihinde kaynağından arşivlendi. Erişim tarihi: 13 Eylül 2026.
- ↑ "High Performance Computing (HPC) Tuning Guide for AMD EPYC 9004 Processors (58002 Rev. 1.7)". AMD. Temmuz 2024. 13 Eylül 2026 tarihinde kaynağından arşivlendi. Erişim tarihi: 13 Eylül 2026.
- 1 2 "Streaming SIMD Extensions (SSE)". Microsoft. 1 Şubat 2013. 13 Eylül 2026 tarihinde kaynağından arşivlendi. Erişim tarihi: 13 Eylül 2026.
- ↑ Yam, Marcus (24 Ağustos 2010). "AMD Drops 3DNow! Support From Future CPUs". Tom's Hardware. 14 Eylül 2026 tarihinde kaynağından arşivlendi. Erişim tarihi: 13 Eylül 2026.
- 1 2 3 Weimer, Florian (5 Ocak 2021). "Building Red Hat Enterprise Linux 9 for the x86-64-v2 microarchitecture level". Red Hat Developer. 20 Şubat 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 13 Eylül 2026.
- ↑ "x64 calling convention". Microsoft. 19 Mart 2025. Erişim tarihi: 13 Eylül 2026.
- ↑ "x86 intrinsics list". Microsoft. 30 Ağustos 2022. Erişim tarihi: 13 Eylül 2026.