Bu makale bilgisayarlar hakkında bir taslaktır .
İlgili projelerin tavsiyelerine göre bilginizi geliştirerek ( nasıl ? ) paylaşabilirsiniz .
Çoklu Veri üzerinde Tek Talimat ya: ( "tek komut çoklu veri" İngilizce anlamında) SIMD , tarafından tanımlanan mimari dört kategoriden biri olan Flynn'in taksonomisinde içinde 1966 ve işleyişinin bir mod belirtir bilgisayarlar yetenekleriyle donatılmıştır arasında paralellik . Bu modda, birden çok sonuç üretmek için aynı komut birden çok veriye aynı anda uygulanır.
Bu kısaltma, SISD ( Tek Komut, Tek Veri ), geleneksel işlem, MIMD ( Çoklu Komut, Çoklu Veri ), bağımsız hafızalı birkaç işlemciyle veya SPMD'ye ( tek program, çoklu veri ) karşı kullanılır. Ayrıca, SIMD'nin çok iş parçacıklı hesaplamaya uyarlanarak geliştirilmiş hali olan SIMT ( Tek Komut, Çoklu İş Parçacığı) terimi de vardır .
1966 yılında Flynn'in taksonomisi ile tanımlanan ilk uygulamalardan biri 1976 yılında Cray-1 süper bilgisayarında olacaktır .
Başında 1990'larda , Macintosh mikro gelen Apple ve BeBox donatıldı RISC PowerPC işlemciler bu (ayakta talimat fmadd dahil, çarpıp yüzen İngilizceden ve fmsub, yüzen bir ek-mulitiplication anlamında) ( çarpma-substract yüzen , yani kayan çıkarma-çarpma), iki kaydı çarpabilir, ardından üçte birinden toplama veya çıkarma yapabilir ve sonucu dördüncü olarak koyabilir, bunlar FPU'nun çift duyarlıklı kayan noktalı kayıtlarında istendiğinde seçilebilir . Bunlar, diğer kayan komutların çoğu gibi, RISC teknolojisi işlemcilerini kullanır , yürütülmesi için üç ila dört saat döngüsü, ancak boru hattı sistemi sayesinde üç adede kadar paralel olarak gerçekleştirilebilir.
NS 8 Ocak 1997, Intel, MMX teknolojisine sahip ilk mikroişlemciyi , 166 MHz Pentium MMX'i (P166MX) piyasaya sürdü; bu, bir CISC teknolojisi işlemcisine ilk kez bir SIMD ekleniyor . Daha sonra içinde 1997 , AMD ayrıca serbest MMX uyumlu X86 işlemci ek bir SIMD seti dahil (Intel lisansı altında) 3DNow! Intel, 1999 yılında 3DNow ile uyumlu olmayan SSE teknolojisine sahip yeni bir SIMD oyunu ekleyecektir .
VFP ARM tanıtılan bir vektör işlemcisi SoC içinde 2000'lerin , çok düşük güç tüketimi ile cep telefonları ve diğer mobil cihazlar bunları tanıtmak izin verdi. In 2009 , ARM ile çok önemli bir devrim tanıtıldı NEON teknolojisi onun yeni hat ARM Cortex-A işlemcileri ilk modeli olan, Cortex-A8 cihazının bu tip performansını artırma.
SIMD modeli, matris hesaplamada olduğu gibi yapısı çok düzenli olan işlemler için özellikle uygundur . Genellikle, SIMD mimarilerinden yararlanan uygulamalar, çok sayıda dizi, matris veya benzer veri yapısı kullanan uygulamalardır. Özellikle bilimsel uygulamalardan veya sinyal işlemeden söz edilebilir.
SIMD paradigmasının donanım uygulaması çeşitli şekillerde yapılabilir:
İlk üç durumda, tek bir işlemci doğal olarak farklı veriler üzerinde aynı işlemi gerçekleştirebilir.
İkinci durumda, her işlemci bir veri üzerinde tek bir işlem gerçekleştirecektir. Bu nedenle SIMD paralelliği, birkaç işlemcinin kullanılmasından gelir.
Bu komutlar, farklı veriler üzerinde paralel olarak birkaç işlemi gerçekleştirebilen komutlardır.
Söz konusu işlemler şunlar olabilir:
Bu SIMD talimatlarının tümü, aynı boyut ve türdeki bir dizi veri üzerinde çalışır. Bu veriler, vektör adı verilen sabit boyutta bir tür veri bloğunda toplanır. Bu vektörler, yan yana yerleştirilmiş birkaç tam sayı veya kayan noktalı sayı içerir.
Bir SIMD komutu, vektörün her bir verisini diğerlerinden bağımsız olarak işleyecektir. Örneğin, bir SIMD ekleme talimatı, aynı yerde bulunan verileri iki vektörde toplayacak ve sonucu aynı yerde başka bir vektöre yerleştirecektir. Bir vektör üzerinde bir talimat yürütülürken, o vektörde bulunan veriler aynı anda işlenir.
Tüm modern işlemciler, komut setlerinin MMX, SSE, vb. gibi uzantılarını içerir. Bu uzantılar, hesaplamalarda işlem hızını iyileştirebilmek için modern işlemcilere eklenmiştir. SIMD talimatları, özellikle talimat setlerinden oluşur:
Bu talimatlar tarafından işlenen vektörler, genellikle vektör depolama konusunda uzmanlaşmış ayrı kayıtlara yerleştirilir. Bunlar genellikle boyut olarak oldukça büyüktür, yaklaşık 128 ila 256 bit.
Ancak, bazı işlemciler bu vektörleri depolamak için genel kayıtlarını kullanır. Bu nedenle, özel kayıtlara sahip olmaları gerekmez ve vektörleri korumak için normal kayıtlar kullanılır. SIMD talimatları daha sonra SIMD olmayan benzerleriyle aynı kayıtlar üzerinde çalışır. Bu SIMD talimatları biçimine mikro-SIMD denir.
Optimizasyon için kullanınBu tür komutlarla optimize edilmiş programlar, çok fazla işlemci kaynağı gerektiren programlardır: veri sıkıştırma , ses ve/veya video oynatmak için kodlayıcı , büyük tamsayılarda hesaplama ( özellikle kriptografi ), vb.
Genellikle, bu talimatlar doğrudan programcılar tarafından kullanılır. Bunlar, SIMD talimatlarının izin verdiği optimizasyonlardan maksimum düzeyde yararlanabilmek için programlarına montaj kodu yazarlar. Her yerde çalışacak genel kod geliştirerek başlarlar. Algoritma doğru olduğunda, belirli bir işlemcinin uzantısı için özel bir sürüm yazarlar. Bu talimatları kullanmak bu nedenle çok fazla çalışma ve derinlemesine montaj bilgisi gerektirir.
Bazı derleyiciler ve bazı kitaplıklar, assembler'da kodlama yapmadan bu optimizasyonlardan yararlanmanıza izin verir. Örneğin Mono projesinin uygun sınıflar kullanıldığı takdirde bu işlemci optimizasyonlarından faydalandığı belirtilebilir. Ancak, programcılar tarafından gerçekleştirilen manuel optimizasyonun, derleyici tarafından gerçekleştirilen optimizasyonlardan daha iyi sonuçlar verdiğine dikkat edilmelidir.
Vektör işlemcileri, bazı ek iyileştirmelerle birlikte SIMD talimatlarını içeren işlemciler olarak düşünülebilir. Örneğin, bu işlemciler, bellek erişimi SIMD talimatlarına hizalama kısıtlamaları getirmez. Ek olarak, bellek erişim yönergeleri, geçmeli veya dağınık erişim gibi ek bellek erişim modlarını destekler.
Akış Processing , veya akış hesaplama ile, standart, örneğin sağlar ne olduğu, hesaplama için birimlerin farklı sağlar kütüphane işlem OpenCL'i .
SIMD mimarilerinin kullanımını kolaylaştırmak için çeşitli diller icat edilmiştir. Bu diller, veri paralelliğini derleyiciler tarafından daha kolay kullanılabilir hale getirmeyi amaçlar.
Günümüzün prosedürel dillerinde, derleyiciler, ifadelerin bağımsız veriler üzerinde çalışıp çalışmadığını belirlemekte zorlanırlar. Sonuç olarak, derleyiciler SIMD talimatlarını veya vektör talimatlarını kullanma fırsatlarını kaçırabilir. Bazı SIMD dillerinin icat edilmesi mümkün olduğunca bu tür durumlardan kaçınmak içindir.
Bu diller arasında şunları sayabiliriz:
Son olarak, GCC veya LLVM (ve CLANG) gibi derleyiciler , mevcut SIMD'lerin çoğunda hesaplama döngülerinin otomatik vektörleştirilmesine izin verir .