Komut ardışık dizilimi

Komut ardışık dizilimi, modern mikroişlemcilerin, mikrodenetleyicilerin ve CPU'ların tasarımında komut verimini (bir birim zamanda yürütülebilen talimat sayısı) artırmak için kullanılan bir tekniktir.

Ana fikir, bir CPU talimatının işlenmesini, talimat mikro kodu tarafından tanımlandığı gibi, her adımın sonunda depolama ile bir dizi bağımsız mikro işlem adımına ("mikro talimatlar", "mikro işlem" veya "µop" olarak da adlandırılır) bölmektir ("bölme" olarak adlandırılır). Bu, CPU'ların kontrol mantığının talimatları en yavaş adımın işlem hızında işlemesine olanak tanır, bu da talimatı tek bir adım olarak işlemek için gereken süreden çok daha hızlıdır.

Boru hattı terimi, her adımın tek bir mikro talimat taşıdığı (bir damla su gibi) ve her adımın başka bir adıma bağlı olduğu (analoji; su borularına benzer) gerçeğini ifade eder.

Modern CPU'ların çoğu bir saat tarafından çalıştırılır. CPU dahili olarak mantık ve bellekten (flip floplar) oluşur. Saat sinyali geldiğinde, flip floplar yeni değerlerini kaydeder ve ardından mantık flip flopların yeni değerlerini çözmek için bir süreye ihtiyaç duyar. Sonra bir sonraki saat darbesi gelir ve flip floplar başka bir değer depolar ve bu böyle devam eder. Mantığı daha küçük parçalara bölerek ve mantık parçaları arasına flip floplar yerleştirerek, mantığın ihtiyaç duyduğu zaman (bu değerlere bağlı olarak geçerli çıkışlar üretene kadar değerlerin kodunu çözmek için) azaltılır. Bu şekilde saat periyodu azaltılabilir.
Örneğin, RISC boru hattı aşağıdaki gibi her aşama arasında bir dizi flip flop ile beş aşamaya ayrılmıştır:

  1. Talimat getirme
  2. Komut kod çözme ve yazmaç getirme
  3. Yürütmek
  4. Bellek erişimi
  5. Kayıt geri yazma

Pipelining'li işlemciler, ayrı mikro talimatlar üzerinde yarı bağımsız olarak çalışabilen dahili aşamalardan (modüllerden) oluşur. Her aşama flip floplarla bir sonraki aşamaya bağlanır ("zincir" gibi), böylece aşamanın çıkışı, talimatları işleme işi bitene kadar başka bir aşamaya girdi olur. İşlemci iç modüllerinin bu şekilde düzenlenmesi, talimatın toplam işlem süresini azaltır.

Boru hattı olmayan bir mimari verimli değildir çünkü komut döngüsü sırasında başka bir modül aktifken bazı CPU modülleri boşta kalır. Pipelining, pipelined bir CPU'da boşta kalma süresini tamamen ortadan kaldırmaz, ancak CPU modüllerinin paralel çalışmasını sağlamak komut verimini artırır.

Bir komut ardışık düzeninin, her saat döngüsünde yeni bir komut kabul edebiliyorsa tam ardışık düzene sahip olduğu söylenir. Tam olarak ardışık dizili olmayan bir ardışık dizide, ardışık dizinin ilerlemesini geciktiren bekleme döngüleri vardır.

Bir RISC makinesindeki temel beş aşamalı ardışık düzen (IF = Komut Alma, ID = Komut Kod Çözme, EX = Yürütme, MEM = Bellek erişimi, WB = Kaydedici geri yazma). Dikey eksen ardışık talimatlar, yatay eksen ise zamandır. Yani yeşil sütunda, en eski komut WB aşamasındadır ve en son komut komut getirme aşamasındadır.Zoom
Bir RISC makinesindeki temel beş aşamalı ardışık düzen (IF = Komut Alma, ID = Komut Kod Çözme, EX = Yürütme, MEM = Bellek erişimi, WB = Kaydedici geri yazma). Dikey eksen ardışık talimatlar, yatay eksen ise zamandır. Yani yeşil sütunda, en eski komut WB aşamasındadır ve en son komut komut getirme aşamasındadır.

Pipelining'in Avantaj ve Dezavantajları

Pipelining'in Avantajları:

  1. İşlemcinin döngü süresi azalır; komut verimi artar. Pipelining bir komutu tamamlamak için gereken süreyi azaltmaz; bunun yerine aynı anda ("bir kerede") işlenebilen komut sayısını artırır ve tamamlanan komutlar arasındaki gecikmeyi azaltır ('verim' olarak adlandırılır).
    Bir işlemci ne kadar çok boru hattı aşamasına sahipse, "aynı anda" o kadar çok komut işleyebilir ve tamamlanan komutlar arasında o kadar az gecikme olur. Günümüzde üretilen
    her genel amaçlı mikroişlemci en az 2, en fazla 30 ya da 40 aşamalı boru hattı kullanır.
  2. Pipelining kullanılırsa, CPU Aritmetik mantık birimi daha hızlı tasarlanabilir, ancak daha karmaşık olacaktır.
  3. Teorik olarak pipelining, pipelined olmayan bir çekirdeğe göre performansı aşama sayısı kadar artırır (saat frekansının da aynı oranda arttığı varsayılırsa) ve kod pipeline yürütme için idealdir.
  4. Pipelined CPU'lar genellikle RAM saat frekansından daha yüksek bir saat frekansında çalışırlar (2008 teknolojilerinden itibaren RAM'ler CPU frekanslarına kıyasla daha düşük frekanslarda çalışmaktadır) ve bilgisayarların genel performansını arttırırlar.

Pipelining'in Dezavantajları:

Pipelining'in birçok dezavantajı vardır, ancak CPU'lar ve derleyici tasarımcıları tarafından bunların çoğunun üstesinden gelmek için kullanılan birçok teknik vardır; Aşağıda yaygın dezavantajların bir listesi verilmiştir:

  1. Pipelined olmayan bir işlemcinin tasarımı daha basit ve üretimi daha ucuzdur, pipelined olmayan işlemci bir seferde yalnızca tek bir komut yürütür. Bu, dallanma gecikmelerini (Pipelining'de her dallanma geciktirilir) ve seri talimatların eşzamanlı olarak yürütülmesindeki sorunları önler.
  2. Pipelined işlemcide, modüller arasına flip flopların yerleştirilmesi, pipelining olmayan bir işlemciye kıyasla komut gecikmesini artırır.
  3. Pipelined olmayan bir işlemci tanımlanmış bir komut verimine sahip olacaktır. Pipelined bir işlemcinin performansını tahmin etmek çok daha zordur ve farklı programlar için büyük farklılıklar gösterebilir.
  4. Birçok tasarım 7, 10, 20, 31 ve hatta daha fazla aşamaya kadar uzun boru hatları içerir; uzun bir boru hattının dezavantajı, bir program dallandığında, tüm boru hattının temizlenmesi (temizlenmesi) gerektiğidir. Yürütülen kod çok sayıda dallanma içerdiğinde boru hatlarının yüksek verimi yetersiz kalır: işlemci bir sonraki komutu nerede okuyacağını önceden bilemez ve dallanma komutunun bitmesini beklemek zorunda kalır ve arkasındaki boru hattını boş bırakır. Bu dezavantaj, bir koşullu dallanma komutunun önceki faaliyete dayalı olarak dallanıp dallanmayacağını tahmin ederek azaltılabilir. Dallanma çözüldükten sonra, bir sonraki komutun sonucu kullanılabilir hale gelmeden ve işlemci yeniden "çalışmaya" başlamadan önce boru hattı boyunca tüm yolu kat etmesi gerekir. Bu gibi aşırı durumlarda, boru hatlı bir işlemcinin performansı boru hattı olmayan işlemciden daha kötü olabilir.
  5. Ne yazık ki, tüm talimatlar bağımsız değildir. Basit bir boru hattında, bir talimatın tamamlanması 5 aşama gerektirebilir. Tam performansla çalışmak için, bu ardışık düzende ilk komut tamamlanırken birbirini takip eden 4 bağımsız komutun çalıştırılması gerekecektir. Bu 4 talimattan herhangi biri ilk talimatın çıktısına bağlı olabilir ve bu da boru hattı kontrol mantığının beklemesine ve bağımlılık çözülene kadar boru hattına bir duraklama veya boşa harcanan saat döngüsü eklemesine neden olabilir. Neyse ki, yönlendirme gibi teknikler duraklamanın gerekli olduğu durumları önemli ölçüde azaltabilir.
  6. Kendi kendini değiştiren programlar, değiştirilen talimatlar yürütülmekte olan talimatlara yakın olduğunda, boru hatlı bir mimaride düzgün bir şekilde yürütülemeyebilir. Bunun nedeni, talimatların zaten Prefetch Giriş Kuyruğunda olması olabilir, bu nedenle değişiklik, talimatların gelecekteki yürütülmesi için etkili olmayabilir. Komut önbellekleri sorunu daha da kötüleştirir.
  7. Tehlikeler: Bir programcı (veya derleyici) assembly kodu yazarken, genellikle her komutun bir sonraki komuttan önce yürütüldüğünü varsayar. Bu varsayım pipelining ile doğrulanmadığında bir programın yanlış davranmasına neden olur, bu durum tehlike olarak bilinir. Tehlikeleri çözmek ya da etrafından dolaşmak için yönlendirme ve geciktirme (bir duraklama ya da boşa harcanan bir saat döngüsü ekleyerek) gibi
    çeşitli
    teknikler mevcuttur.

Örnekler

Jenerik boru hattı

Sağ tarafta dört aşamalı genel bir boru hattı bulunmaktadır:

  1. Getir
  2. Şifre çözme
  3. Yürütmek
  4. Geri yazma

Üstteki gri kutu yürütülmeyi bekleyen talimatların listesidir; alttaki gri kutu tamamlanan talimatların listesidir; ortadaki beyaz kutu ise boru hattıdır.

Yürütme aşağıdaki gibidir:

Zaman

Yürütme

0

Dört talimat yürütülmeyi beklemektedir

1

  • yeşil komut bellekten getirilir

2

  • yeşil talimatın kodu çözülür
  • mor komut bellekten getirilir

3

  • yeşil komut yürütülür (gerçek işlem gerçekleştirilir)
  • mor talimatın kodu çözülür
  • mavi talimat getirilir

4

  • yeşil komutun sonuçları kayıt dosyasına veya belleğe geri yazılır
  • mor talimat yürütülür
  • mavi talimatın kodu çözülür
  • kırmızı talimat getirilir

5

  • yeşil talimat tamamlandı
  • mor talimat geri yazılır
  • mavi talimat yürütülür
  • kırmızı talimatın kodu çözülür

6

  • Mor talimat tamamlandı
  • mavi talimat geri yazılır
  • kırmızı talimat yürütülür

7

  • mavi talimat tamamlandı
  • kırmızı talimat geri yazılır

8

  • kırmızı talimat tamamlandı

9

Tüm talimatlar yürütülür

Baloncuk

Yürütmede bir "hıçkırık" (kesinti) meydana geldiğinde, boru hattında yararlı hiçbir şeyin gerçekleşmediği bir "baloncuk" oluşur. Döngü 2'de mor komutun alınması gecikir ve döngü 3'teki kod çözme aşaması artık bir kabarcık içerir. Mor komutun arkasındaki her şey de gecikir ancak mor komutun önündeki her şey yürütülmeye devam eder.

Açıkça görüldüğü üzere, yukarıdaki yürütme ile karşılaştırıldığında, baloncuk 7 yerine 8 saat tiklik bir toplam yürütme süresi vermektedir.

Kabarcıklar, getirme, kod çözme, yürütme ve geri yazma için yararlı hiçbir şeyin olmayacağı duraklamalar (gecikmeler) gibidir. Bu bir NOP (No OPeration'ın kısaltması) kodu gibidir.

Örnek 1

İki sayıyı toplamak için kullanılan tipik bir komut ADD A, B, C olabilir; bu komut A ve B bellek konumlarında bulunan değerleri toplar ve ardından sonucu C bellek konumuna yerleştirir:

LOAD A, R1 LOAD B, R2 ADD R1, R2, R3 STORE R3, C Sonraki talimatı YÜKLE

'R1' ve 'R2' konumları CPU'daki yazmaçlardır. 'A' ve 'B' etiketli bellek konumlarında saklanan değerler bu kayıtlara yüklenir (kopyalanır), ardından toplanır ve sonuç 'C' etiketli bir bellek konumunda saklanır.

Bu örnekte boru hattı üç aşamalıdır: yükleme, yürütme ve depolama. Adımların her biri boru hattı aşamaları olarak adlandırılır.

Pipelined olmayan bir işlemcide, aynı anda yalnızca bir aşama çalışabilir, bu nedenle bir sonraki komutun başlayabilmesi için tüm komutun tamamlanması gerekir. Boru hatlı bir işlemcide, tüm aşamalar aynı anda farklı komutlar üzerinde çalışabilir. Yani bu komut yürütme aşamasındayken, ikinci bir komut kod çözme aşamasında ve üçüncü bir komut da getirme aşamasında olacaktır.

Örnek 2

Bu kavramı daha iyi anlamak için teorik olarak 3 aşamalı bir boru hattına bakabiliriz:

Sahne

Açıklama

Yük

Bellekten okuma talimatı

Yürütmek

Talimat yürütme

Mağaza

Sonucu bellekte ve/veya kayıtlarda saklama

ve çalıştırılacak bir sözde kod derleme listesi:

LOAD #40, A ; A'ya 40 yükleyin MOVE A, B ; A'yı B'ye kopyalayın ADD #20, B ; B'ye 20 ekleyin STORE B, 0x300 ; B'yi 0x300 bellek hücresine depolayın

Bu şekilde yürütülecektir:

Saat 1

Yük

Yürütmek

Mağaza

YÜKLE

 

 

LOAD komutu bellekten getirilir.

Saat 2

Yük

Yürütmek

Mağaza

HAREKET

YÜKLE

 

MOVE komutu bellekten alınırken LOAD komutu yürütülür.

Saat 3

Yük

Yürütmek

Mağaza

ADD

HAREKET

YÜKLE

LOAD komutu, sonucunun (40 sayısı) A yazmacında saklanacağı Store aşamasındadır. Bu arada, MOVE komutu yürütülmektedir. A'nın içeriğini B'ye taşıması gerektiğinden, LOAD komutunun bitmesini beklemesi gerekir.

Saat 4

Yük

Yürütmek

Mağaza

MAĞAZA

ADD

HAREKET

STORE komutu yüklenirken, MOVE komutu bitiyor ve ADD hesaplanıyor.

Ve böyle devam eder. Bazen bir komutun başka bir komutun sonucuna bağlı olduğunu unutmayın (MOVE örneğimizde olduğu gibi). Birden fazla komut bir operand için belirli bir konuma referans verdiğinde, ya onu okuyarak (bir girdi olarak) ya da yazarak (bir çıktı olarak), bu komutları orijinal program sırasından farklı bir sırada çalıştırmak (yukarıda bahsedilen) tehlikelere yol açabilir.

Genel 4 aşamalı boru hattı; renkli kutular birbirinden bağımsız talimatları temsil ederZoom
Genel 4 aşamalı boru hattı; renkli kutular birbirinden bağımsız talimatları temsil eder

3. döngüdeki bir baloncuk yürütmeyi geciktirirZoom
3. döngüdeki bir baloncuk yürütmeyi geciktirir

İlgili sayfalar

  • Boru hattı (bilgi işlem)
  • Paralel hesaplama
  • Komut düzeyinde paralellik

Sorular ve Yanıtlar

S: Komut ardışık sıralama nedir?


C: Komut ardışıklığı, bir CPU komutunun işlenmesini her adımın sonunda depolama ile bir dizi bağımsız adıma bölerek komut verimini artırmak için modern mikroişlemcilerin, mikrodenetleyicilerin ve CPU'ların tasarımında kullanılan bir tekniktir.

S: Pipelining nasıl çalışır?


C: Pipelining, mantığı daha küçük parçalara ayırarak ve mantık parçaları arasına flip floplar yerleştirerek çalışır, bu da mantığın değerleri çözmesi için gereken süreyi bu değerlere bağlı olarak geçerli çıkışlar üretene kadar azaltır. Bu da daha hızlı saat periyotlarına olanak sağlar.

S: Bazı boru hattı örnekleri nelerdir?


C: Bir boru hattı örneği, her aşama arasında bir dizi flip flop ile beş aşamaya bölünmüş olan RISC boru hattıdır.

S: Pipelining komut verimini nasıl artırır?


C: Pipelining, CPU modüllerinin paralel çalışmasına izin vererek komut verimini artırır, bu da bir komut döngüsü sırasında boşta kalma süresini azaltır ve genel işlem süresini artırır.

S: Her boru hattı tamamen boru hattı mıdır?


C: Hayır, her ardışık düzen tamamen ardışık düzen değildir; bazı ardışık düzenlerde ardışık düzendeki ilerlemeyi geciktiren bekleme döngüleri vardır.

AlegsaOnline.com - 2020 / 2023 - License CC3