SIMD

Türkçe karşılığı: Tek komut çok veriAlan: Bilgisayar Mimarisi

Tek bir komut akışının birden fazla veri öğesi üzerinde aynı işlemi vektör yazmaçlarıyla paralel yürüttüğü veri-paralel hesaplama modeli.

SIMD (Single Instruction, Multiple Data), aynı aritmetik veya mantıksal işlemi birden fazla veri öğesine tek komutla uygulayan veri paralelliği modelidir.

İşlemci Düzeyinde Ne Olur?

Skaler bir toplama tek sayı çifti üzerinde çalışırken vektör komutu aynı anda birden fazla öğeyi taşıyan yazmaç üzerinde işlem yapabilir. Gerçek genişlik işlemci mimarisine ve veri türüne bağlıdır.

x86 tarafında SSE/AVX ailesi, ARM tarafında NEON/SVE ve POWER mimarisinde AltiVec/VSX bu yaklaşımın örnekleridir.

Gerçek Performansı Belirleyen Etkenler

SIMD kullanılması tek başına hızlanma garantisi değildir. Kazancı belirleyen başlıca etkenler:

  • verinin ardışık ve vektörleştirilebilir biçimde yerleşmesi,
  • bellek bant genişliği,
  • hizalama ve yükleme/saklama maliyeti,
  • dallanma ve mask işlemleri,
  • scalar remainder veya tail handling,
  • derleyicinin otomatik vektörleştirme başarısı.

Bellekten veri yeterince hızlı getirilemiyorsa daha geniş vektör birimi toplam throughput'u artırmayabilir.

Thread Paralelliğinden Farkı

SIMD, birden fazla thread çalıştırmak değildir. Tek komut akışı içindeki veri paralelliğidir. OpenMP gibi thread-level parallelism ile SIMD aynı programda birlikte kullanılabilir.

Kendi uygulama bağlamım için IBM POWER9 AC922, Bilgisayar Mimarisi ve DCT/SIMD görüntü benzerliği çalışmalarına bakılabilir.

İlgili makale: Donanım ve Çoklu Ortam

Vektör Genişliği ile Gerçek Hızlanma Aynı Şey Değildir

W öğeyi aynı anda işleyebilen bir vektör komutu, tamamen vektörleşebilen ve başka darboğazı olmayan ideal bir çekirdekte skaler işe göre en fazla yaklaşık W kat aritmetik paralellik sunar. Programın yalnız p oranı bu biçimde hızlanabiliyorsa, bellek ve diğer giderler yok sayıldığında dahi Amdahl tipi kaba üst sınır:

S <= 1 / ((1-p) + p/W)

olur. Örneğin vektör genişliğini iki katına çıkarmak, seri kalan bölüm veya bellek bant genişliği baskınsa uçtan uca süreyi iki kat iyileştirmez.

Bu nedenle SIMD değerlendirmesinde yalnız instruction-set adı değil; vectorized-loop oranı, load/store miktarı, cache miss, memory bandwidth ve scalar tail birlikte ölçülmelidir. OpenMP gibi thread paralelliğiyle birleştiğinde iki paralellik katmanının aynı bellek sistemini paylaştığı da hesaba katılmalıdır.

Yazılım Optimizasyonu Bağlamı

SIMD kazancı yalnız vektör genişliğinden gelmez. Ardışık veri yerleşimi, hizalama, branch yapısı, cache locality ve memory bandwidth aynı anda sonucu belirler. Bir scalar döngünün vectorized sürümü daha az instruction çalıştırdığı halde bellek bant genişliğine dayanıyorsa beklenen hızlanmaya ulaşmayabilir.

İlgili teknik yayınlar

Başlık veya özetinde bu kavrama doğrudan karşılık gelen yayınlar.

DCT ve SIMD ile Algısal Görüntü Benzerliği

DCT tabanlı algısal özet yeniden boyutlandırma ve sıkıştırma gibi küçük görsel değişikliklerde yakın imzalar üretir; 64 bit imza Hamming uzaklığıyla hızlı aday eleme sağlar.

Donanım ve Çoklu Ortam

Algılayıcıdan CPU, SIMD, GPU, bellek ve gömülü hızlandırıcılara kadar çoklu ortam işleme performansını belirleyen donanım katmanları.

Adli Bilişimde Veri Kazıma Algoritması

File carving, dosya sistemi üstverisi olmadan imza ve yapısal doğrulama ile veri çıkarmaya çalışır; yalnız başlangıç imzasına güvenmek yanlış pozitif ve hatalı sınır üretir.