Şube (bilgisayar bilimi) - Branch (computer science)

Bir dal bir bir talimatıdır bilgisayar programı bir bilgisayar farklı bir talimat dizisi yürütme başlar ve böylece sırayla komutları yerine varsayılan davranışı sapmasına neden olabilir. Dallanma (veya dallanma , dallanma ), bir dal talimatının yürütülmesinin bir sonucu olarak yürütmeyi farklı bir talimat dizisine değiştirme eylemine de atıfta bulunabilir. Dal komutları, program döngülerinde ve koşullularda kontrol akışını uygulamak için kullanılır (yani, yalnızca belirli koşullar yerine getirildiğinde belirli bir talimat dizisini yürütmek).

Bir dal talimatı, her zaman dallanma ile sonuçlanan koşulsuz bir dal veya bir koşula bağlı olarak dallanmaya neden olabilecek veya olmayabilen koşullu bir dal olabilir. Ayrıca, yeni talimat dizisinin adresini ("hedef" adres) nasıl belirttiğine bağlı olarak, bir dal talimatı genellikle doğrudan , dolaylı veya göreceli olarak sınıflandırılır , yani talimatın hedef adresi içerdiği veya hedefin nerede olduğunu belirttiği anlamına gelir. adres bulunacaktır (örneğin, bir kayıt veya bellek konumu) veya mevcut ve hedef adresler arasındaki farkı belirtir.

uygulama

Mekanik olarak, bir dal talimatı bir CPU'nun program sayacını (PC) değiştirebilir . Program sayacı, yürütülecek bir sonraki talimatın hafıza adresini saklar. Bu nedenle, bir dal, CPU'nun talimatlarını farklı bir bellek hücresi dizisinden almaya başlamasına neden olabilir.

Makine düzeyinde dal talimatlarına bazen atlama talimatları denir . Makine düzeyinde atlama talimatları tipik olarak koşulsuz ve koşullu biçimlere sahiptir; burada ikincisi , bazı koşullara bağlı olarak alınabilir veya alınmayabilir . Genellikle tek yönlü atlamalar için, genellikle atlama olarak adlandırılan farklı formlar vardır ve çağrı olarak bilinen , kaynak adresi yığında bir dönüş adresi olarak otomatik olarak kaydeden ve tek bir alt rutinin koddaki birden çok konumdan çağrılmasına izin veren alt program çağrıları olarak adlandırılır .

Bir dal alındığında , CPU'nun program sayacı atlama komutunun argümanına ayarlanır . Böylece, bir sonraki talimat, bellekteki o adresteki talimat olur . Bu nedenle, kontrol akışı değişir.

Bir dal alınmadığında , CPU'nun program sayacı değişmez. Bu nedenle, yürütülen bir sonraki talimat, dal talimatından sonraki talimattır. Bu nedenle, kontrol akışı değişmez.

Dal terimi , makine kodu veya montaj dilinde yazılmış programların yanı sıra üst düzey dillerdeki programlara atıfta bulunulurken kullanılabilir . Gelen yüksek seviyeli programlama dilleri , dalları genellikle şeklinde koşullu ifadeleri koşul sağlansa takdirde yürütülecek tanıtım serisini saklanması çeşitli formların. GOTO gibi koşulsuz dal talimatları , farklı bir talimat dizisine koşulsuz olarak "atlamak" (yürütmeye başlamak) için kullanılır.

Bayrak kayıtlarına sahip CPU'larda , daha önceki bir talimat bayrak kaydında bir koşul belirler. Daha önceki talimat aritmetik veya bir mantık talimatı olabilir. Şubeden hemen önceki talimat olmasa da, genellikle şubeye yakındır . Depolanan koşul daha sonra jump if overflow-flag set gibi bir dalda kullanılır . Bu geçici bilgi genellikle bir bayrak kaydında saklanır, ancak başka bir yerde de bulunabilir. Bir bayrak kaydı tasarımı, daha yavaş, basit bilgisayarlarda basittir. Hızlı bilgisayarlarda bir bayrak kaydı hız üzerinde bir darboğaz oluşturabilir, çünkü aksi takdirde paralel olarak (birkaç yürütme biriminde ) çalışabilecek talimatların bayrak bitlerini belirli bir sırayla ayarlaması gerekir.

Ayrıca, eğer register X negatifse <label> dalı gibi, durumun atlama komutunun kendisi tarafından kontrol edilebileceği makineler (veya belirli talimatlar) vardır . Basit bilgisayar tasarımlarında, karşılaştırma dalları daha fazla aritmetik yürütür ve flag register dallarından daha fazla güç kullanabilir. Hızlı bilgisayar tasarımlarında karşılaştırma dalları, bayrak kayıt dallarından daha hızlı çalışabilir, çünkü karşılaştırma dalları, bir hesaplama olarak aynı CPU mekanizmalarını kullanarak kayıtlara daha paralellikle erişebilir.

Hala mikrodenetleyicilerde bulunan bazı erken ve basit CPU mimarileri, koşullu bir atlama uygulamayabilir, bunun yerine yalnızca koşullu bir "sonraki komutu atla" işlemi uygulayabilir. Bir koşullu atlama veya çağrı, böylece, bir koşulsuz atlama veya çağrı talimatının koşullu bir atlama olarak uygulanır.

Örnekler

Bağlı bilgisayar mimarisi , montaj dil anımsatıcı atla komutunun için tipik kelime bazıları kısaltılmış şeklidir atlama veya kelime dalı genellikle koşulunu temsil eden diğer bilgilendirici mektuplar (veya ekstra parametre) ile birlikte. Bazen atlama aralığı (ofset boyutu) veya gerçek etkin ofseti bulmak için kullanılması gereken özel bir adresleme modu gibi başka ayrıntılar da dahil edilir.

Bu tablo, birkaç iyi bilinen mimaride bulunan makine düzeyinde dallanma veya atlama talimatlarını listeler:

koşul veya sonuç x86 PDP-11, VAX KOL (kısmen 6502) denklem
sıfır (alt/cmp için eşit anlamına gelir) JZ; JNZ BEQ; BNE BEQ; BNE sıfır; sıfır değil
negatif (N), işaret (S) veya eksi (M) JS; JNS BMI; BPL BMI; BPL olumsuz; olumsuz değil
aritmetik taşma (O veya V olarak adlandırılan bayrak) JO; JNO BVS; BVC BVS; BVC taşma; taşma değil
taşıma (add, cmp, shift, vb.) JC; JNC BCS; gizli BCS; gizli Taşımak; taşımamak
aşağıda imzasız (alt) JB BLO BLO * borç almak
altında imzasız veya eşit (düşük veya aynı) JBE BLOS BLS * ödünç veya sıfır
imzasız yukarıda veya eşit (daha yüksek veya aynı) JAE BHIS BHS * ödünç almamak
yukarıda imzasız (daha yüksek) JA BHI BHI * ödünç değil ve sıfır değil
daha az imzalandı JL BLT BLT işaret; taşma
daha az veya eşit olarak imzalanmış JLE BLE BLE (işaret≠taşma) veya sıfır
daha büyük veya eşit olarak imzalanmış JGE BGE BGE işaret=taşma
daha büyük imzalı JG BGT BGT (işaret=taşma) ve sıfır değil

* X86, PDP-11, VAX ve bazı diğerleri, sinyal için taşıma-bayrak set borrow ve sinyal taşıma-bayrak temizlemek hiçbir ariyet . ARM, 6502 , PIC ve diğerleri, çıkarma işlemleri için tersini yapar. Bazı talimatlar için taşıma bayrak Bu ters fonksiyonu (ile işaretlenir * ), olduğu, ariyet = değil taşımak Aksi belirtilmediği takdirde, borrow≡carry tablo bazı bölümlerinde, ancak. Ancak, devam ekleme işlemleri çoğu mimari tarafından aynı şekilde işlenir.

Şube talimatlarıyla ilgili performans sorunları

Yüksek performans elde etmek için modern işlemciler ardışık düzene sahiptir . Her biri bir talimatı kısmen işleyen, sonuçlarını boru hattındaki bir sonraki aşamaya besleyen ve programdaki bir sonraki talimat üzerinde çalışmaya başlayan birden fazla parçadan oluşurlar. Bu tasarım, talimatların belirli bir değişmeyen sırayla yürütülmesini bekler. Koşullu dal talimatları bu diziyi bilmeyi imkansız hale getirir. Bu nedenle koşullu dallar, boru hattının programın farklı bir bölümünde yeniden başlatılması gereken "takılmalara" neden olabilir.

Şubelerdeki tezgahları azaltarak performansı artırma

Birkaç teknik, koşullu dallardan gelen durakları azaltarak hızı artırır.

Şube tahmin ipuçları

Tarihsel olarak, dal tahmini istatistikleri aldı ve sonucu kodu optimize etmek için kullandı. Bir programcı, bir programın test sürümünü derler ve onu test verileriyle çalıştırır. Test kodu, dalların gerçekte nasıl alındığını saydı. Test kodundaki istatistikler daha sonra derleyici tarafından serbest bırakılan kodun dallarını optimize etmek için kullanıldı. Optimizasyon, en hızlı dal yönünün (alınan veya alınmayan) her zaman en sık alınan kontrol akış yolu olacağını ayarlayacaktır. Buna izin vermek için, CPU'lar tahmin edilebilir dal zamanlaması ile (veya en azından sahip) tasarlanmalıdır. Bazı CPU'larda , bir derleyicinin CPU'ya her bir dalın nasıl alınacağını söyleyebilmesi için "dal ipuçları" ile tasarlanmış komut setleri ( Power ISA gibi ) bulunur.

Yazılım dalı tahmini ile ilgili sorun, karmaşık bir yazılım geliştirme süreci gerektirmesidir.

Donanım dalı tahmin edicileri

Herhangi bir yazılımı çalıştırmak için, donanım dal tahmincileri istatistikleri elektroniğe taşıdı. Dal tahmin edicileri, koşullu bir dalın sonucunu tahmin eden bir işlemcinin parçalarıdır. Ardından işlemcinin mantığı, beklenen talimat akışını yürütmeye başlayarak tahmin üzerinde kumar oynar. Basit bir donanım dalı tahmin şemasına bir örnek, tüm geriye doğru dalların (yani daha küçük bir program sayacına) alındığını (çünkü bir döngünün parçası oldukları için) ve tüm ileri dalların (daha büyük bir program sayacına) alınmadığını varsaymaktır. (çünkü bir döngü bırakırlar). Daha iyi dal tahmin edicileri, çeşitli test programlarında simülasyonda çalıştırılarak istatistiksel olarak geliştirilir ve doğrulanır. İyi tahminciler genellikle bir dalın önceki uygulamalarının sonuçlarını sayar. Daha hızlı, daha pahalı bilgisayarlar, daha iyi branş tahmin elektroniğine yatırım yaparak daha hızlı çalışabilir. Donanım dalı tahmini olan bir CPU'da dal ipuçları, derleyicinin muhtemelen üstün dal tahmininin donanımın daha basit dal tahminini geçersiz kılmasına izin verir.

Şubesiz kod

Bazı mantık dallar olmadan veya daha az dal ile yazılabilir. Dallar yerine bitsel işlemler , koşullu hareketler veya diğer tahminleri kullanmak genellikle mümkündür . Aslında, zamanlama saldırıları nedeniyle kriptografi için şubesiz kod bir zorunluluktur .

gecikme yuvası

Başka bir teknik, dal gecikme yuvasıdır . Bu yaklaşımda, bir daldan sonra her zaman bir talimat yürütülür. Bu nedenle, bilgisayar, boru hattı dursa da durmasa da faydalı işler yapmak için bu talimatı kullanabilir. Bu yaklaşım, RISC bilgisayarlarında tarihsel olarak popülerdi . Uyumlu bir CPU ailesinde, çok döngülü CPU'ları (boru hattı olmadan), beklenenden daha uzun boru hatlarına sahip daha hızlı CPU'ları ve süperskalar CPU'ları (talimatları düzensiz çalıştırabilen) karmaşıklaştırır.

Ayrıca bakınız

Notlar

Referanslar

Dış bağlantılar