SSE4.1'i gerçekleyen 45 nm Intel Core 2 Duo E8400 işlemcisinin kırmığı | |
| Tasarımcı | Intel |
|---|---|
| Mimari | x86 |
| Tür | SIMD |
| Tanıtım | 2007 |
| İlk işlemci | Xeon 5400 serisi ve Core 2 Extreme QX9650 (SSE4.1) |
| Yazmaçlar | 128 bit XMM; CRC32 ve POPCNT için genel amaçlı yazmaçlar |
| Buyruk sayısı | 54 (SSE4.1: 47, SSE4.2: 7) |
| Öncel | SSSE3 |
| Ardıl | AVX |
SSE4 (İngilizce: Streaming SIMD Extensions 4), Intel'in x86 mimarisi için tanımladığı bir tek buyruk, çoklu veri (SIMD) buyruk kümesi uzantısıdır. 45 nm üretim süreciyle yapılan Intel 64 işlemcilerine 54 yeni buyruk ekler. Buyruklar iki alt kümeye ayrılır: 47 buyruktan oluşan SSE4.1, Penryn kod adlı işlemcilerde bulunur; kalan yedi buyruğu içeren SSE4.2 ise SSE4.1 ile birlikte Nehalem mikromimarisine dayanan işlemcilerde yer alır.
SSE4 yeni bir yazmaç ya da veri türü getirmez ve önceki x86 işlemciler için yazılmış yazılım değişiklik olmadan çalışmayı sürdürür. SSE4, adı benzeyen SSSE3'ten ayrı ve ondan sonra gelen bir uzantıdır; Intel'in SSE4 başvuru belgesi SSSE3'ü SSE, SSE2 ve SSE3 ile birlikte önceki kuşaklar arasında sayar.
Buyruk türleri
SSE4'ün 54 buyruğu yaptıkları işe göre beş türe ayrılabilir:
| Tür | SSE4.1 | SSE4.2 | Örnek buyruklar |
|---|---|---|---|
| Aritmetik: çarpma, nokta çarpım, yuvarlama, mutlak farklar toplamı | 9 | – | PMULLD, DPPS, ROUNDPS, MPSADBW
|
| Karşılaştırma ve seçme: en küçük ve en büyük değer, eşitlik ve büyüklük karşılaştırması, maskeyle sınama, koşula göre alan seçme | 17 | 1 | PMINSD, PCMPEQQ, PCMPGTQ, PTEST, PBLENDVB
|
| Veri taşıma ve dönüştürme: XMM yazmacına değer koyma ve yazmaçtan değer alma, işaretle ya da sıfırla genişletme, doymalı paketleme, akış ipucuyla yükleme | 21 | – | PINSRD, PEXTRB, PMOVZXBW, PACKUSDW, MOVNTDQA
|
| Karakter dizisi işleme | – | 4 | PCMPISTRI, PCMPESTRM
|
| Uygulamaya yönelik hızlandırma | – | 2 | CRC32, POPCNT
|
| Toplam | 47 | 7 |
Kullanılan yazmaçlar

SSE4.1 buyruklarının hepsi ve SSE4.2 buyruklarından beşi, SSE ile gelen 128 bitlik XMM yazmaçlarını kaynak ya da hedef olarak kullanır; CRC32 ve POPCNT ise genel amaçlı yazmaçlarla çalışır. Yeni yazmaç eklenmediği için işletim sisteminin bağlam değiştirmede SSE için sakladığının dışında bir yazmaç durumu saklaması gerekmez.
Yeni olan, bazı buyrukların belli yazmaçları işlenen olarak yazılmadan, örtük olarak kullanmasıdır. Değişken alan seçme buyrukları seçici bitleri XMM0 yazmacında bekler. Karakter dizisi buyrukları sonucu bir konum olarak ECX yazmacına ya da bir maske olarak XMM0 yazmacına yazar; dizinin uzunluğunu açıkça alan iki buyruk bu uzunlukları EAX ve EDX yazmaçlarından okur.
SSE4.1
SSE4.1 çokluortam, görüntü işleme ve üç boyutlu grafik yüklerinin başarımını artırmaya yöneliktir. Uzantının iki belirgin amacı, derleyicinin döngüleri vektörleştirmesini kolaylaştırmak ve 32 bitlik paketlenmiş tam sayılarla hesaplama desteğini genişletmektir.
Alan seçme buyrukları, kaynaktaki bir alanı koşula bağlı olarak hedefteki aynı alana kopyalar. Tek bir SSE4.1 buyruğu, önceki uzantılarla iki ile dört işlemlik bir diziyle yapılan işi çoğu zaman tek başına karşılar. Değişken seçim yapan buyruklarda her alanın en anlamlı biti seçici olarak kullanılır.
Yuvarlama buyruklarında yuvarlama kipi, geçerli kip değiştirilmeden bir anlık değerle IEEE 754'ün dört kipinden biri olarak seçilir. Bu buyruklar C99'daki ceil(), floor(), trunc(), rint() ve nearbyint() işlevlerinin çoğu zaman tek bir buyrukla gerçeklenmesine olanak verir.
MPSADBW, önceki PSADBW buyruğundan daha küçük öbekler üzerinde çalışır ve buyruk başına dört kat fazla mutlak fark işlemi yapar. Intel bu buyruğu VC-1 ve H.264 gibi video kodlama standartlarındaki yoğun hareket aramalarına daha uygun olarak tanıtır. PTEST ise 128 bitlik bir değeri bir maskeyle sınar ve hedefi değiştirmeden yalnızca bayrakları kurar; paketlenmiş sayıların işaretine ya da bir alanın sıfır olup olmadığına göre dallanmayı kolaylaştırır.
SSE4.2
SSE4.2'nin yedi buyruğundan beşi XMM yazmaçlarıyla çalışır: dört karakter dizisi işleme buyruğu ve 64 bitlik paketlenmiş tam sayıları büyüklük için karşılaştıran PCMPGTQ. Kalan iki buyruk, CRC32 ve POPCNT, genel amaçlı yazmaçlar üzerinde çalışır ve belirli uygulama alanlarını hızlandırmak için tanımlanmıştır.
Karakter dizisi işleme
PCMPESTRI, PCMPESTRM, PCMPISTRI ve PCMPISTRM buyrukları, geleneksel olarak çok daha fazla işlem kodu gerektiren karakter dizisi işlemlerini dört işlem koduyla karşılar. En çok 16 baytlık ya da sekiz adet 16 bitlik öğeden oluşan parçalar üzerinde çalışırlar ve tek bir buyrukta öğe çiftleri arasında 256'ya kadar karşılaştırma yaparlar.
Hangi karşılaştırmanın yapılacağı, ara sonuçların nasıl birleştirileceği ve sonucun bir konum mu yoksa bir maske mi olacağı, buyruğa verilen bir anlık değer baytıyla seçilir. Adında E bulunan iki buyrukta dizinin uzunluğu iki genel amaçlı yazmaçla açıkça verilir; adında I bulunan ikisinde ise dizi ilk boş karakterle sona erer. Çoğu 128 bitlik SIMD buyruğundan farklı olarak bu dört buyruk bellek işlenenlerinde hizalama denetimi yapmaz.
CRC32 ve POPCNT
CRC32 buyruğu, veri bütünlüğü protokollerinde kullanılan döngüsel artıklık denetimi değerini donanımda biriktirir. Buyruğun kullandığı 11EDC6F41 polinomu, iSCSI için değerlendirilen ve CRC32C diye anılan polinomdur; IEEE 802 ağlarında kullanılan 104C11DB7 polinomundan farklıdır.
POPCNT, bir tam sayıdaki 1 bitlerinin sayısını döndürür ve bit örüntüsü arama işlerini hızlandırmaya yöneliktir. SSE4.2 ile tanımlanmasına karşın işlemcinin desteğini bildiren ayrı bir CPUID biti vardır. Bu buyruk, 1 bitlerini saymanın her durumda en hızlı yolu değildir. Uzun bit akışları üzerinde yapılan bir çalışma, SIMD buyruklarıyla vektörleştirilmiş bir yöntemin yeni Intel işlemcilerde POPCNT'den iki kat hızlı olabildiğini göstermiş; yöntem LLVM derleyici altyapısına alınmıştır.
Desteğin sınanması
Bir program bu buyrukları kullanmadan önce işlemcinin onları tanıyıp tanımadığını sınar. EAX yazmacına 1 yüklenerek çağrılan CPUID buyruğunun ECX yazmacına döndürdüğü değerde 19. bit SSE4.1'i, 20. bit SSE4.2'yi, 23. bit POPCNT'yi gösterir. İlgili bit sıfırken buyruk çalıştırılırsa işlemci geçersiz işlem kodu kural dışı durumu üretir.
Kaynakça
- ^ a b "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.
- ^ a b c d e f g h i j k l m n o p q "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.
- ^ Sheinwald, D.; Satran, J.; Thaler, P.; Cavanna, V. (Eylül 2002), Internet Protocol Small Computer System Interface (iSCSI) Cyclic Redundancy Check (CRC)/Checksum Considerations, IETF, doi:10.17487/RFC3385, RFC 3385
- ^ Muła, Wojciech; Kurz, Nathan; Lemire, Daniel (2018). "Faster Population Counts Using AVX2 Instructions". The Computer Journal. 61 (1). ss. 111-120. doi:10.1093/comjnl/bxx046.
