Yazmaçların Yeniden Adlandırılması

Kısaca: Yazmaçların yeniden adlandırılması, işlemcilerde, yürütülen buyruklardaki, aynı yazmaçların tekrar kullanımından doğan sahte bağımlılıkları gidermek için kullanılan bir yöntemdir. ...devamı ☟

Yazmaçların Yeniden Adlandırılması

Yazmaçların yeniden adlandırılması, yazmaçların veri bağımlılığını çözmek için kullanılan bir yöntemdir. Programlar bazı değerler üretmek için kullanılan komutlardan oluşmuştur. İşlemci içerisinde komutlara girdi ve çıktı olarak kullanılan değerler yazmaçlardan okunur ve yazmaçlara yazılır. İşlemci içerisinde farklı buyruklar farklı sürelerde işlenirler.

Mesela, bir işlemci ana bellekten bir yükleme işlemini gerçekleştirdiği sürede yüzlerce buyruğu işleyebilir. Kısa buyrukların işlenmesi daha hızlı olduğundan işlemci içerisinde buyrukların işlenmesinin tamamlanması program sırasından bağımsız gerçekleşir. Yüksek performanslı işlemciler tarafından yüksek hızlara ulaşmak için sırasız yürütme kullanılır.

Aşağıda sırasız yürütüm yapan bir işlemcinin buyrukları görülmektedir;

  1. Yazmaç 1`e bellek konumu 1024`deki veriyi yükle.
  2. Yazmaç 1`e 2 sayısını ekle
  3. Yazmaç 1`deki veriyi bellek konumu 1032`ye sakla
  4. Yazmaç 1`e bellek konumu 2048`deki veriyi yükle.
  5. Yazmaç 1`e 4 sayısını ekle
  6. Yazmaç 1`deki veriyi bellek konumu 2056`ya sakla


Yukarıda görüldüğü üzere, 4. 5. ve 6. buyruklar 1.2. ve 3. buyruklardan bağımsızdır fakat işlemci 3. buyruğu tamamlamadan 4. buyruğu işleyemez. 4.buyruk 3. uyruktan önce işlenirse 3. burukta bellek konumu 1032 ye yanlış değer yazılmış olur.

Bu karşılaştığımız sınırlamayı bazı yazmaçların ismini değiştirerek çözebiliriz. Mesela,

  1. Yazmaç 1`e bellek konumu 1024`deki veriyi yükle.
  2. Yazmaç 1`e 2 sayısını ekle
  3. Yazmaç 1`deki veriyi bellek konumu 1032`ye sakla
  4. Yazmaç 2`ye bellek konumu 2048`deki veriyi yükle.
  5. Yazmaç 2`ye 4 sayısını ekle
  6. Yazmaç 2`deki veriyi bellek konumu 2056`ya sakla


Yukarıda görülen düzenlemeyle, artık 4. 5. ve 6. buyruklar, 1. 2. ve 3. buyruklarla aynı anda işlenebilir, bu sayede işlemler daha hızlı bir şekilde tamamlanabilir.

Yazmaç yeniden adlandırma işlemi derleyici tarafından yapılır ancak buyruk kümesinde bulunan sınırlı sayıdaki yazmaçlar derleyicileri sınırlandırır. Birçok yüksek performanslı işlemci buyruk kümesinde mümkün olduğunca çok fiziksel yazmaç kullanır.

Sorun ve yeniden adlandırma

Bir yazmaca birden fazla buyruk yazmaçtaki veriyi okumak ya da yazmak için erişmek isterse ve buyruklar program sırasının dışında yürütülürse, üç çeşit sorun meydana gelebilir.

Bu sorunlar;

Yazmadan Sonra Okuma (YSO)



Yazmaçtan ya da bellekten okunan veri, yazmaca veya belleğe program sırasına göre, başka değil, en son yazılan veri olmalıdır. Bu bağımlılık türüne gerçek bağımlılık denir.

Yazmadan Sonra Yazma (YSY)



Birden fazla komut aynı bellek konumunu veya yazmacı güncellemek istiyorsa alanı doğru sırada güncellemeleri gerekir. Bu bağımlılığa çıktı bağımlılığı denir.

Okumadan Sonra Yazma (OSY)



Bir yazmaca veya bellek alanına bir buyruk yazma yapacaksa bu buyruk yazmacın veya bellek alanının önceki değerini okuyacak olan tüm buyrukların işlenmesinin tamamlanmasını beklemelidir. Bu tür bağımlılıklara sahte bağımlılık denir.

Bütün okuma işlemlerinin tamamlanmasını beklemek yerine, alanın eski verisini ve yeni verisini tutan iki farklı kopyası tutulabilir. Program sırasınca bir yazma işleminden önce gelen okuma buyrukları eski veriyi tutan alanı kullanırken, program sırasınca yazma işleminden sonra gelen okuma işlemleri de yeni veriyi tutan alanı kullanır. OSY bağımlılığı bu sayede aşılmış olur ve buyruklar program sırasından bağımsız işletilmeye devam edebilir. Eski veriyi tutan alanı okuyacak tüm buyruklar bittiğinde bu alan bırakılabilir. Yazmaç yeniden adlandırmanın arkasındaki ana fikir budur.

Eğer programın yazmaçları hemen kullanmaları kaçınılabilir olursa yazmaç yeniden adlandırmaya gerek kalmazdı. Bu sebepten IA-64 gibi bazı buyruk kümeleri çok büyük miktarda yazmaç kullanırlar. Fakat yazmaç sayısını arttırmanın bazı sınırlamaları vardır;

  • Derleyiciler için kod sayısını arttırmadan yazmaçların yeniden kullanımından kaçınmak çok zordur.
  • Çok sayıda yazmaç gösterilebilmek için çok sayıda bit e ihtiyaç duyar ve bu da kod büyüklüğünü arttırır.
  • Birçok mimari kümesi eskiden az sayıda yazmaç tanımlamıştır ve bunu şimdi değiştirmek zordur.


Kod sayısının artması önemli bir etkendir, çünkü program kodu arttıkça buyruk önbelleğinde bulamama oranı da artar ve bu yüzden işlemci yeni komut için bekleme gecikmesi yaşar.

düzenle|Aralık 2007

Kaynaklar

Vikipedi

Bu konuda henüz görüş yok.
Görüş/mesaj gerekli.
Markdown kullanılabilir.