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.
Sorun
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ütüm) kullanılır.
Aşağıda sırasız yürütüm yapan bir işlemcinin buyrukları görülmektedir;
- Yazmaç 1'e bellek konumu 1024'teki veriyi yükle.
- Yazmaç 1'e 24 sayısını ekle.
- Yazmaç 1'deki veriyi bellek konumu 1031'ye sakla.
- Yazmaç 1'e bellek konumu 2048'deki veriyi yükle.
- Yazmaç 1'e 4 sayısını ekle.
- 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. buyruktan önce işlenirse 3. buyrukta 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,
- Yazmaç 1'e bellek konumu 1024'teki veriyi yükle.
- Yazmaç 1'e 2 sayısını ekle.
- Yazmaç 1'deki veriyi bellek konumu 1032'ye sakla.
- Yazmaç 2'ye bellek konumu 2048'deki veriyi yükle.
- Yazmaç 2'ye 4 sayısını ekle.
- 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.
Bağımlılıklar
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 bağımlılık 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 buyruk, bir yazmaca veya bellek alanına 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 miktarını arttırmadan yazmaçların yeniden kullanımından kaçınmak çok zordur. Örneğin yapıları için aynı kodun defalarca kez farklı yazmaçlar kullanılarak tekrarlanması gerekir. Kod sayısının artması önemli bir etkendir, çünkü program kodu arttıkça bulamama oranı da artar ve bu yüzden işlemci yeni komut için bekleme gecikmesi yaşar.
- Çok sayıda yazmaç gösterilebilmek için çok sayıda bite ihtiyaç duyulur ve bu da kod büyüklüğünü arttırır.
- Birçok buyruk kümesi eskiden az sayıda yazmaç tanımlamıştır ve bunu artık değiştirmek zordur.
wikipedia, wiki, viki, vikipedia, oku, kitap, kütüphane, kütübhane, ara, ara bul, bul, herşey, ne arasanız burada,hikayeler, makale, kitaplar, öğren, wiki, bilgi, tarih, yukle, izle, telefon için, turk, türk, türkçe, turkce, nasıl yapılır, ne demek, nasıl, yapmak, yapılır, indir, ücretsiz, ücretsiz indir, bedava, bedava indir, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, resim, müzik, şarkı, film, film, oyun, oyunlar, mobil, cep telefonu, telefon, android, ios, apple, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, pc, web, computer, bilgisayar
Yazmaclarin yeniden adlandirilmasi islemcilerde yurutulen buyruklardaki ayni yazmaclarin tekrar kullanimindan dogan sahte bagimliliklari gidermek icin kullanilan bir yontemdir SorunProgramlar bazi degerler uretmek icin kullanilan komutlardan olusmustur Islemci icerisinde komutlara girdi ve cikti olarak kullanilan degerler yazmaclardan okunur ve yazmaclara yazilir Islemci icerisinde farkli buyruklar farkli surelerde islenirler Mesela bir islemci ana bellekten bir yukleme islemini gerceklestirdigi surede yuzlerce buyrugu isleyebilir Kisa buyruklarin islenmesi daha hizli oldugundan islemci icerisinde buyruklarin islenmesinin tamamlanmasi program sirasindan bagimsiz gerceklesir Yuksek performansli islemciler tarafindan yuksek hizlara ulasmak icin sirasiz yurutum kullanilir Asagida sirasiz yurutum yapan bir islemcinin buyruklari gorulmektedir Yazmac 1 e bellek konumu 1024 teki veriyi yukle Yazmac 1 e 24 sayisini ekle Yazmac 1 deki veriyi bellek konumu 1031 ye sakla Yazmac 1 e bellek konumu 2048 deki veriyi yukle Yazmac 1 e 4 sayisini ekle Yazmac 1 deki veriyi bellek konumu 2056 ya sakla Yukarida goruldugu uzere 4 5 ve 6 buyruklar 1 2 ve 3 buyruklardan bagimsizdir fakat islemci 3 buyrugu tamamlamadan 4 buyrugu isleyemez 4 buyruk 3 buyruktan once islenirse 3 buyrukta bellek konumu 1032 ye yanlis deger yazilmis olur Bu karsilastigimiz sinirlamayi bazi yazmaclarin ismini degistirerek cozebiliriz Mesela Yazmac 1 e bellek konumu 1024 teki veriyi yukle Yazmac 1 e 2 sayisini ekle Yazmac 1 deki veriyi bellek konumu 1032 ye sakla Yazmac 2 ye bellek konumu 2048 deki veriyi yukle Yazmac 2 ye 4 sayisini ekle Yazmac 2 deki veriyi bellek konumu 2056 ya sakla Yukarida gorulen duzenlemeyle artik 4 5 ve 6 buyruklar 1 2 ve 3 buyruklarla ayni anda islenebilir bu sayede islemler daha hizli bir sekilde tamamlanabilir Yazmac yeniden adlandirma islemi derleyici tarafindan yapilir ancak buyruk kumesinde bulunan sinirli sayidaki yazmaclar derleyicileri sinirlandirir Bircok yuksek performansli islemci buyruk kumesinde mumkun oldugunca cok fiziksel yazmac kullanir BagimliliklarBir yazmaca birden fazla buyruk yazmactaki veriyi okumak ya da yazmak icin erismek isterse ve buyruklar program sirasinin disinda yurutulurse uc cesit bagimlilik meydana gelebilir Bu sorunlarYazmadan Sonra Okuma YSO Yazmactan ya da bellekten okunan veri yazmaca veya bellege program sirasina gore baska degil en son yazilan veri olmalidir Bu bagimlilik turune gercek bagimlilik denir Yazmadan Sonra Yazma YSY Birden fazla komut ayni bellek konumunu veya yazmaci guncellemek istiyorsa alani dogru sirada guncellemeleri gerekir Bu bagimliliga cikti bagimliligi denir Okumadan Sonra Yazma OSY Bir buyruk bir yazmaca veya bellek alanina yazma yapacaksa bu buyruk yazmacin veya bellek alaninin onceki degerini okuyacak olan tum buyruklarin islenmesinin tamamlanmasini beklemelidir Bu tur bagimliliklara sahte bagimlilik denir Butun okuma islemlerinin tamamlanmasini beklemek yerine alanin eski verisini ve yeni verisini tutan iki farkli kopyasi tutulabilir Program sirasinca bir yazma isleminden once gelen okuma buyruklari eski veriyi tutan alani kullanirken program sirasinca yazma isleminden sonra gelen okuma islemleri de yeni veriyi tutan alani kullanir OSY bagimliligi bu sayede asilmis olur ve buyruklar program sirasindan bagimsiz isletilmeye devam edebilir Eski veriyi tutan alani okuyacak tum buyruklar bittiginde bu alan birakilabilir Yazmac yeniden adlandirmanin arkasindaki ana fikir budur Eger programin yazmaclari hemen kullanmalari kacinilabilir olursa yazmac yeniden adlandirmaya gerek kalmazdi Bu sebepten IA 64 gibi bazi buyruk kumeleri cok buyuk miktarda yazmac kullanirlar Fakat yazmac sayisini arttirmanin bazi sinirlamalari vardir Derleyiciler icin kod miktarini arttirmadan yazmaclarin yeniden kullanimindan kacinmak cok zordur Ornegin yapilari icin ayni kodun defalarca kez farkli yazmaclar kullanilarak tekrarlanmasi gerekir Kod sayisinin artmasi onemli bir etkendir cunku program kodu arttikca bulamama orani da artar ve bu yuzden islemci yeni komut icin bekleme gecikmesi yasar Cok sayida yazmac gosterilebilmek icin cok sayida bite ihtiyac duyulur ve bu da kod buyuklugunu arttirir Bircok buyruk kumesi eskiden az sayida yazmac tanimlamistir ve bunu artik degistirmek zordur