Tahmin (bilgisayar mimarisi) - Predication (computer architecture)

Gelen bilgisayar bilimleri , hüküm bir olan mimari koşullu transferi için bir alternatif sunuyor özellik kontrolü tarafından uygulanan, makine talimatları böyle şartlı olarak şube , koşullu çağrı , koşullu getiri ve şube tablolar . Tahmin, dalın her iki yolundan da talimatlar yürüterek ve mimari durumu değiştirmek için yalnızca alınan yoldan bu talimatların alınmasına izin vererek çalışır. Alınan yoldan gelen talimatların mimari durumu değiştirmesine izin verilir, çünkü bunlar bir yüklemle ilişkilendirilmiştir ( yüklemlenmiştir ) , talimatın mimari durumu değiştirmesine izin verilip verilmediğini kontrol etmek için talimat tarafından kullanılan bir Boole değeri .

Basitçe söylemek gerekirse: Kayıt Koşulu biti ayarlanmışsa, talimat yürütülür; bit açıksa, değildir. Koşul Kaydı'nın içeriği dinamik olduğundan, öngörülen talimat yürütmesi de aynı şekilde dinamiktir, yani (koşullu olarak) çalışma zamanında belirlenir.

Vektör işlemciler , bazı SIMD ISA'lar ( AVX2 ve AVX-512 gibi ]) ve GPU'lar genel olarak, işlenmekte olan Vector kayıtlarındaki karşılık gelen öğelere bir bit koşullu maske Vector uygulayarak, skaler olarak skaler yüklem yoğun bir şekilde yüklem kullanır. komut kümeleri yalnızca bir yüklem bitine ihtiyaç duyar. Dayanak maskeler, özellikle güçlü bir hale yerde Vector işlem bir eğer bir dizi arasında durumu Kodları , vektör elemanı başına bir, daha sonra takip eden vektör talimatlarına uygulanır Dayanak maskeler geri beslenebilir.

genel bakış

Çoğu bilgisayar programı , örneğin kullanıcı girdisine bağlı olarak önceden belirlenemeyen faktörlere bağlı olarak yalnızca belirli koşullar altında yürütülecek koşullu kod içerir . İşlemcilerin çoğu bir sıradaki bir sonraki talimatı basitçe yürüttüğünden, geleneksel çözüm, bir programın farklı bir kod bölümüne koşullu olarak dallanmasına izin veren dal talimatlarını eklemek ve böylece sıradaki bir sonraki adımı değiştirmektir. Bu, tasarımcılar dallar tarafından yavaşlatılan bir yöntem olan talimat boru hattını uygulayarak performansı iyileştirmeye başlayana kadar yeterliydi . Ortaya çıkan sorunların daha kapsamlı bir açıklaması ve popüler bir çözüm için bkz. dal tahmincisi .

Neyse ki, normalde dallanmaya dayanan daha yaygın kod kalıplarından birinin daha zarif bir çözümü var. Aşağıdaki sözde kodu göz önünde bulundurun :

if condition
    {dosomething}
else
    {dosomethingelse};

Koşullu dallanma kullanan bir sistemde bu, şuna benzeyen makine talimatlarına dönüşebilir:

branch-if-condition to label1
dosomethingelse
branch-to label2
label1:
dosomething
label2:
...

Tahmin ile, tüm olası dal yolları satır içi olarak kodlanır, ancak bazı talimatlar yürütülürken diğerleri yürütülmez. Temel fikir, her talimatın bir yüklemle ilişkilendirilmesidir (burada kelime, yüklem mantığındaki kullanımına benzer şekilde kullanılır ) ve talimatın yalnızca yüklem doğruysa yürütüleceğidir. Tahmini kullanan yukarıdaki örnek için makine kodu şöyle görünebilir:

(condition) dosomething
(not condition) dosomethingelse

Dalları ortadan kaldırmanın yanı sıra, mimarinin önceden belirlenmiş talimatlar sağlaması koşuluyla, toplamda daha az kod gerekir. Bu, genel olarak daha hızlı yürütmeyi garanti etmese de, dosomething ve dosomethingelse kod bloklarının yeterince kısa olması durumunda olacaktır.

Tahminin en basit biçimi, mimarinin koşullu hareket veya koşullu seçim talimatlarına sahip olduğu kısmi yüklemdir . Koşullu taşıma komutları, bir kaydın içeriğini yalnızca yüklemin değeri doğruysa yazarken, koşullu seçim komutları, iki kayıttan hangisinin içeriğinin yüklemin değerine göre üçte birine yazılacağını seçer. Daha genelleştirilmiş ve yetkin bir biçim tam yüklemdir . Tam yüklem, yüklemleri depolamak için bir dizi yüklem kaydına sahiptir (bu, birden çok iç içe veya sıralı dalın aynı anda ortadan kaldırılmasına izin verir) ve mimarideki çoğu talimatın, hangi yüklem kaydının yüklemi sağladığını belirtmek için bir kayıt belirteci alanı vardır.

Avantajlar

Tahminin temel amacı, program kodunun çok küçük bölümleri üzerinden atlamaları önlemek, ardışık düzende yürütmenin etkinliğini artırmak ve önbellekle ilgili sorunlardan kaçınmaktır . Ayrıca bir dizi daha ince faydaları vardır:

  • Geleneksel olarak basit aritmetik ve bitsel işlemler kullanılarak hesaplanan işlevlerin, önceden belirlenmiş yönergeler kullanılarak hesaplanması daha hızlı olabilir.
  • Farklı yüklemlere sahip önceden belirlenmiş komutlar birbirleriyle ve koşulsuz kodla karıştırılabilir, bu da daha iyi talimat planlamasına ve dolayısıyla daha iyi performansa olanak tanır .
  • Gereksiz dal talimatlarının ortadan kaldırılması, dal tahmin mekanizmaları üzerindeki yükü azaltarak, döngü oluşturanlar gibi gerekli dalların yürütülmesini daha hızlı hale getirebilir .
  • Derin ardışık düzene sahip mimarilerde yüksek olabilen bir dal yanlış tahmini maliyetinin ortadan kaldırılması.
  • Talimatlar tarafından oluşturulan kapsamlı Koşul Kodlarına sahip olan komut setleri, koşul kayıtlarını doğrudan tahmin içinde veya tahmin olarak kullanarak kod boyutunu daha da azaltabilir.

Dezavantajları

Tahminin birincil dezavantajı, artan kodlama alanıdır. Tipik uygulamalarda, her talimat, bu talimatın hangi koşullar altında bir etkiye sahip olması gerektiğini belirten yüklem için bir bit alanı ayırır. Gömülü cihazlarda olduğu gibi kullanılabilir bellek sınırlı olduğunda , bu alan maliyeti engelleyici olabilir. Ancak, Thumb-2 gibi bazı mimariler bu sorunu önleyebilir (aşağıya bakın). Diğer zararlar ise şunlardır:

  • Tahmin , kritik yollara mantık seviyeleri ekleyerek donanımı karmaşıklaştırır ve potansiyel olarak saat hızını düşürür.
  • Öngörülen bir blok, tüm işlemler için döngüler içerir, bu nedenle daha kısa yollar daha uzun sürebilir ve cezalandırılabilir.
  • Tahmin genellikle spekülasyon yapılmaz ve daha uzun bir bağımlılık zincirine neden olur. Sıralı veriler için bu, öngörülebilir bir dal ile karşılaştırıldığında bir performans kaybı anlamına gelir.

Tahmin, yollar dengelendiğinde veya en uzun yol en sık yürütüldüğünde en etkilidir, ancak böyle bir yolu belirlemek, derleme zamanında, profil oluşturma bilgisinin varlığında bile çok zordur .

Tarih

Öngörülü talimatlar da dahil olmak üzere 1950'lerin Avrupa bilgisayar tasarımları, popüler oldu Mailüfterl (1955), Zuse Z22 (1955), ZEBRA (1958), ve Electrologica X1 (1958). IBM ACS-1 1967 tasarımı kendi talimat biçimlerinde bir "atlama" bit tahsis ve 1976 yılında CDC Esnek İşlemci kendi mikro komut formatlarında üç koşullu yürütme bitlerini tahsis etti.

Hewlett-Packard 'ın PA-RISC mimarisi (1986) adlı bir özellik vardı sıfırlanması en talimatları önceki talimatı ile esas olması, izin. IBM bireyin GÜÇ mimarisi (1990) koşullu hareket talimatlarını özellikli. POWER'ın halefi PowerPC (1993), bu talimatları bıraktı. Digital Equipment Corporation, 'ın Alfa mimarisi (1992) da şartlı hareket talimatları özellikli. MIPS , 1994 yılında MIPS IV versiyonuyla koşullu hareket talimatlarını kazandı; ve SPARC , Sürüm 9'da (1994) hem tamsayı hem de kayan nokta kayıtları için koşullu taşıma talimatlarıyla genişletildi.

In Hewlett-Packard / Intel IA-64 mimarisine, çoğu talimatlar esas alınır. Yüklemler 64 özel amaçlı yüklem kaydında saklanır ; ve yüklem kayıtlarından biri her zaman doğrudur, bu nedenle öngörülemeyen talimatlar basitçe true değeriyle belirtilen talimatlardır. Önerme kullanımı, IA-64'ün yazılım ardışık düzeni uygulamasında esastır, çünkü girişler ve sonlar için ayrı kod yazma ihtiyacını ortadan kaldırır.

In x86 mimarisi, koşullu taşıma talimatları (ailesidir CMOVve FCMOV) tarafından mimarisine eklenmiştir Intel Pentium Pro (1995) işlemci. CMOVTalimatları bayrağı kayıt değeri tarafından sağlanan bir yüklemi bağlı hedef kaydına kaynak kayıt içeriğini kopyalandı.

Olarak KOL mimarisi , orijinal 32-bitlik komut seti olarak adlandırılan bir özellik sağlar koşullu yürütme en kitabı, önceki komutu tarafından belirlenen dört durum kodlarının bir kombinasyonu temel alan bir 13 önermeleri kullanarak esas sağlar. ARM'nin Thumb komut seti (1994), komutların boyutunu 16 bit'e sığdırmak için azaltmak için koşullu yürütmeyi bıraktı, ancak halefi Thumb-2 (2003), tedarik etmekten başka hiçbir etkisi olmayan özel bir komut kullanarak bu sorunun üstesinden geldi. aşağıdaki dört talimata dayanır. ARMv8-A'da (2011) tanıtılan 64 bit komut seti, koşullu yürütmeyi koşullu seçim yönergeleriyle değiştirdi.

SIMD, SIMT ve Vektör Tahmini

AVX2 gibi bazı SIMD komut setleri, değerleri belleğe koşullu olarak yüklemek/depolamak için mantıksal bir maske kullanma yeteneğine , koşullu hareketin paralel bir biçimine sahiptir ve ayrıca paralel bir işlem yürüten bireysel aritmetik birimlere ayrı maske bitleri uygulayabilir. Teknik, Flynn'in Taksonomisinde " İlişkisel İşleme" olarak bilinir .

Bu yüklem biçimi, Vektör işlemcilerinde ve tek komutlu, çok iş parçacıklı GPU hesaplamasında da kullanılır. Tek skaler tahminin tüm teknikleri, avantajları ve dezavantajları, paralel işleme durumu için de geçerlidir.

Ayrıca bakınız

Referanslar

daha fazla okuma