Sunuyu indir
Sunum yükleniyor. Lütfen bekleyiniz
YayınlayanGarey Wilkins Değiştirilmiş 6 yıl önce
1
Pipeline (Boru hattı) Uygulaması - II BIL-304: Bilgisayar Mimarisi
Dersi veren öğretim üyesi: Dr. Öğr. Üyesi Fatih Gökçe Ders kitabına ait sunum dosyalarından adapte edilmiştir: Adapted from slides of the textbook:
2
Pipeline’ın çalışması
R e g 100 ps 20 ps Comb. logic A B C Clock 300 R e g Clock Comb. logic A B C 100 ps 20 ps 359 R e g Clock Comb. logic A B C 100 ps 20 ps 241 R e g Clock Comb. logic A B C 100 ps 20 ps 239 Zaman OP1 OP2 OP3 A B C 120 240 360 480 600 Saat sinyali (Clock) * Comb. Logic Kombinasyonel lojik
3
Kısıtlamalar: Eşit bölünemeyen gecikmeler
Saat sinyali Komb. lojik B C 50 ps 20 ps 150 ps 100 ps Gecikme= 510 ps Throughput = 5.88 GIPS A Zaman OP1 OP2 OP3 A B C Throughput en yavaş aşama tarafından sınırlandırılır Diğer aşamalar zamanlarının çoğunu bekleyerek geçirir Bir sistemi zaman açısından dengeli aşamalara bölebilmek oldukça zordur
4
Kısıtlamalar: Kaydedicilerle gelen zaman problemi
Gecikme= 420 ps, Throughput = GIPS Saat sinyali R e g Komb. lojik 50 ps 20 ps Pipeline’daki aşama sayılarını arttırdıkça, kaydedicilere kayıt için gereken sürelerin toplamı önem kazanır Kaydedicilere kayıt için harcanan saat palsi yüzdeleri: 1-aşama pipeline: 6.25% 3- aşama pipeline: % 6- aşama pipeline: % Modern işlemcilerin yüksek hızlarda çalışabilmesi, çok aşamalı pipeline ile sağlanır
5
Veri Bağımlılıkları Sistem Her komut bir öncekinin sonucuna bağlıdır R
Saat sinyali Kombinasyonel lojik R e g Zaman OP1 OP2 OP3 Sistem Her komut bir öncekinin sonucuna bağlıdır
6
Veri Riskleri (Data Hazards)
g Saat sinyali Komb. lojik A B C Zaman OP1 OP2 OP3 A B C OP4 Sonuçlar bir sonraki komut için zamanında geri beslenmez Pipeline sistemin davranışını değiştirir
7
İşlemcilerde Veri Bağımlılıkları
1 irmovq $50, %rax 2 addq %rax , %rbx 3 mrmovq 100( %rbx ), %rdx Bir komutun sonucu bir başkası için işlenecek veri olabilir Yazmadan-sonra-okuma (Read-after-write (RAW)) bağımlılığı Gerçek programlarda sık rastlanır Pipeline’ın bu durumları düzgün şekilde çözmesi gerekir Doğru sonuç alınmalı Performans üzerindeki olumsuz etkisi olabildiğince az olmalı
8
Kontrol akışı bağımlılığı (Control flow dependency)
loop: subq %rdx, $rbx jne target irmovq $10, %rdx jmp loop target: halt
9
Örnek Saat Sinyali R e g 80 ps 30 ps 60 ps 50 ps 70 ps 20 ps A B C D E F 10 ps 3 aşama pipeline yapılması gerekiyor. Elde edilebilecek en yüksek ve en düşük throughput nedir?
10
SEQ Donanımı Aşamalar dizi halindedir
Herhangi bir anda sadece bir iş yapılmaktadır
11
SEQ+ Donanımı PC Aşaması İşlemci Durumu Hala ardışıl bir uygulama
PC aşaması başta olacak şekilde tekrar düzenlenmiştir PC Aşaması Görevi şimdiki komutun PC değerini seçmek Bir önceki komut tarafından hesaplanan sonuçlara bağlı olarak İşlemci Durumu PC artık kaydedicide tutulmamakta Fakat, diğer kaydedilmiş bilgiler kullanılarak PC belirlenebilmekte
12
Pipeline Kaydedicilerinin Eklenmesi
Instruction memory PC increment CC ALU Data Fetch Decode Execute Memory Write back icode , ifun rA rB valC Register file A B M E valP srcA srcB dstA dstB valA valB aluA aluB Cnd valE Addr , Data valM newPC
13
Pipeline Aşamaları Fetch Decode Execute Memory Write Back
Şimdiki PC’yi seç Komutu oku Arttırılmış PC’yi hesapla Decode Program kaydedicilerini oku Execute ALU’yu çalıştır Memory Veri hafızasından oku ya da veri hafızasına yaz Write Back Kaydedici dizisini güncelle
14
PIPE- Donanımı İleri (Yukarı) Yönlü Hatlar
Pipeline kaydedicileri komutun yürütülmesinden oluşan ara değerleri tutar İleri (Yukarı) Yönlü Hatlar Değerler bir aşamadan bir sonrakine aktarılır Geçmiş aşamaları atlayamaz örnek, valC decode aşamasını doğrudan geçer
15
Sinyal İsimlendirme Kuralları
S_Alan S aşamasındaki pipeline kaydedicilerinde tutulan alan değeri s_Alan S aşamasında hesaplanan alan değeri
16
Geribesleme Hatları Tahmin Edilen PC Dallanma Bilgisi
Bir sonraki PC değeri tahmini Dallanma Bilgisi Dallanma oldu/olmadı Bir sonraki komutun adresi veya hedef adresi Geri dönüş noktası Hafızadan okunur Kaydedici güncellemeleri Kaydedici dizisi yazma portlarına
17
Pipeline Gösterimi Dosya: demo-basic.ys F D E M W I1 I2 I3 I4 I5
irmovq $1,%rax #I1 1 2 3 4 5 6 7 8 9 F D E M W irmovq $2,%rcx #I2 irmovq $3,%rdx #I3 irmovq $4,%rbx #I4 halt #I5 5. Saat palsi I1 I2 I3 I4 I5 Dosya: demo-basic.ys
18
Veri Bağımlılığı: 3 Nop durumu
0x000: irmovq $10,% rdx 1 2 3 4 5 6 7 8 9 F D E M W 0x00a: $3,% rax 0x014: nop 0x015: 0x016: 0x017: addq % ,% 10 R[ ] f valA = valB # demo-h3.ys 6. Saat palsi 11 0x019: halt 7. Saat palsi
19
Veri Bağımlılığı: 2 Nop durumu
0x000: irmovq $10,% rdx 1 2 3 4 5 6 7 8 9 F D E M W 0x00a: $3,% rax 0x014: nop 0x015: 0x016: addq % ,% 0x018: halt 10 # demo-h2.ys R[ ] f valA = valB • 6. Saat palsi Hata
20
Veri Bağımlılığı: 1 Nop durumu
0x000: irmovq $10,% rdx 1 2 3 4 5 6 7 8 9 F D E M W 0x00a: $3,% rax 0x014: nop 0x015: addq % ,% 0x017: halt # demo-h1.ys R[ ] f 10 valA = valB • 5. Saat palsi Hata M_ valE = 3 dstE
21
Veri Bağımlılığı: Nop olmaması durumu
0x000: irmovq $10,% rdx 1 2 3 4 5 6 7 8 F D E M W 0x00a: $3,% rax 0x014: addq % ,% 0x016: halt # demo-h0.ys valA f R[ ] = valB 4. Saat palsi Hata M_ valE = 10 dstE e_ 0 + 3 = 3 E_
22
Dallanma Hatalı Tahmini Örneği
demo-j.ys 0x000: xorq %rax,%rax 0x002: jne t # Dallanma olmaz 0x00b: irmovq $1, %rax # Dallanma olmaması durumunda # işletilmesi gereken komut 0x015: nop 0x016: nop 0x017: nop 0x018: halt 0x019: t: irmovq $3, %rdx # Hedef (İşletilmemeli) 0x023: irmovq $4, %rcx # İşletilmemeli 0x02d: irmovq $5, %rdx # İşletilmemeli Sadece ilk 7 komutun işletilmesi gerekir
23
Dallanma Hatalı Tahmini İncelemesi
0x000: xorq % rax ,% 1 2 3 4 5 6 7 8 9 F D E M W 0x002: jne t # Dallanma yok 0x019: t: irmovq $3, % rdx # Hedef 0x023: $4, % rcx # Hedef+1 0x00b: $1, % # jne t’den hemen # sonraki komut # demo - j 5. Saat palsi valE f dstE = M_Cnd = M_ valA = 0x007 valC ecx rB Dallanma hedef noktasındaki iki komut işletilmemesi gerekirken işletiliyor
24
Return Örneği demo-ret.ys 0x000: irmovq Stack,%rsp # Yığın pointer’ını ayarla 0x00a: nop # %rsp ile ilgili riskten sakın 0x00b: nop 0x00c: nop 0x00d: call p # Altprogram çağrılması 0x016: irmovq $5,%rsi # Dönüş noktası 0x020: halt 0x020: .pos 0x20 0x020: p: nop # Altprogram 0x021: nop 0x022: nop 0x023: ret 0x024: irmovq $1,%rax # İşletilmemeli 0x02e: irmovq $2,%rcx # İşletilmemeli 0x038: irmovq $3,%rdx # İşletilmemeli 0x042: irmovq $4,%rbx # İşletilmemeli 0x100: .pos 0x100 0x100: Stack: # İlk yığın pointer’ı Risklerden sakınabilmek için fazla sayıda nop kullanmak gerekir
25
Hatalı Return Örneği ret’i takip eden 3 komut işletilmemesi gerekirken işletiliyor
26
Veri Bağımlılığı: 2 Nop Durumu
0x000: irmovq $10,% rdx 1 2 3 4 5 6 7 8 9 F D E M W 0x00a: $3,% rax 0x014: nop 0x015: 0x016: addq % ,% 0x018: halt 10 # demo-h2.ys R[ ] f valA = valB • 6. Saat palsi Hata
27
Veri Bağımlılığı: Nop Olmaması Durumu
0x000: irmovq $10,% rdx 1 2 3 4 5 6 7 8 F D E M W 0x00a: $3,% rax 0x014: addq % ,% 0x016: halt # demo-h0.ys valA f R[ ] = valB 4. Saat palsi Hata M_ valE = 10 dstE e_ 0 + 3 = 3 E_
28
Veri Bağımlılığı için Durdurma (Stalling) Çözümü
1 2 3 4 5 6 7 8 9 10 11 # demo-h2.ys 0x000: irmovq $10,%rdx F D E M W 0x00a: irmovq $3,%rax F D E M W 0x014: nop F D E M W 0x015: nop F D E M W kabarcık F E M W 0x016: addq %rdx,%rax D D E M W 0x018: halt F F D E M W Eğer bir komut, kaydediciye yazan bir diğer komutu çok yakından izliyorsa, yavaşlatılır Yukarıda, durdurulan addq komutu decode aşamasında tutulur 7. saat palsinde çalıştırılmak üzere execute aşamasına nop enjekte edilir kabarcık (bubble) eklenmesi işlemi
29
Durdurma Durumunun Tespit Edilmesi
1 2 3 4 5 6 7 8 9 10 11 # demo-h2.ys 0x000: irmovq $10,%rdx F D E M W 0x00a: irmovq $3,%rax F D E M W 0x014: nop F D E M W 0x015: nop F D E M W kabarcık F E M W 0x016: addq %rdx,%rax D D E M W 0x018: halt F F D E M W 6. Saat palsi W D • W_dstE = %rax W_valE = 3 srcA = %rdx srcB = %rax
30
Durdurma X3 F D E M W F D E M W E M W E M W E M W F D D D D E M W F F
1 2 3 4 5 6 7 8 9 10 11 # demo-h0.ys 0x000: irmovq $10,%rdx F D E M W 0x00a: irmovq $3,%rax F D E M W kabarcık E M W kabarcık E M W kabarcık E M W 0x014: addq %rdx,%rax F D D D D E M W 0x016: halt F F F F D E M W 6 . Saat palsi W W_dstE = %rax 5 . Saat palsi M M_dstE = %rax 4. Saat palsi • E e_dstE = %rax • D srcA = %rdx srcB = %rax D srcA = %rdx srcB = %rax D srcA = %rdx srcB = %rax
31
Durdurma Sırasında Neler Olur?
0x000: irmovq $10,%rdx 0x00a: irmovq $3,%rax 0x014: addq %rdx,%rax # demo-h0.ys 0x016: halt kabarcık 0x014: addq %rdx,%rax 7. Saat palsi 0x016: halt kabarcık 8. Saat palsi 0x014: addq %rdx,%rax 0x016: halt 0x00a: irmovq $3,%rax kabarcık 0x014: addq %rdx,%rax 6. Saat palsi 0x016: halt 0x000: irmovq $10,%rdx 0x00a: irmovq $3,%rax kabarcık 0x014: addq %rdx,%rax 5. Saat palsi 0x016: halt 0x000: irmovq $10,%rdx 0x00a: irmovq $3,%rax 0x014: addq %rdx,%rax 4. Saat palsi 0x016: halt Write Back Memory Execute Decode Fetch Durdurulan komut decode aşamasında tutulur Bir sonraki komut da fetch aşamasında durur Execute aşamasına kabarcık enjekte edilir Dinamik olarak oluşturulmuş nop Sonraki aşamalar boyunca ilerler
32
Pipeline Kaydedici Modları
Yükselen Kenar _ Çıkış = y y Çıkış = x Giriş = y durdurma = 0 kabarcık x Normal Yükselen Kenar _ Çıkış = x x Çıkış = x Giriş = y durdurma = 1 kabarcık = 0 x Durdurma n o p Yükselen Kenar _ Çıkış = nop Çıkış = x Giriş = y durdurma = 0 kabarcık = 1 Kabarcık x x
33
Veri İletme (Forwarding)
Basit (Naïve) Pipeline Write-back aşaması tamamlanana kadar kaydedicilere yazılmaz Kaynak veriler kaydedici dizisinden decode aşamasında okunur Veriler aşamanın başlangıcında kaydedici dizisinde kayıtlı bulunmalıdır Gözlem Değerler execute veya hafıza aşamasında elde edilir İşin sırrı Değeri oluşturan komutun, ilgili değeri decode aşamasına doğrudan aktarması Değerin decode aşamasının sonunda oluşturulmuş olması yeterli ve gereklidir
34
Veri İletme Örneği irmovq write-back aşamasında
0x000: irmovq $10,% rdx 1 2 3 4 5 6 7 8 9 F D E M W 0x00a: $3,% rax 0x014: nop 0x015: 0x016: addq % ,% 0x018: halt 10 # demo-h2.ys 6. Saat palsi R[ ] f valA = valB W_ valE • dstE = 3 srcA srcB irmovq write-back aşamasında Hedef değer W pipeline kaydedicisinde valB değeri olarak decode aşamasına iletilir
35
Veri İletme Örneği #2 Kaydedici %rdx Kaydedici %rax
0x000: irmovq $10,%rdx 1 2 3 4 5 6 7 8 F D E M W 0x00a: irmovq $3,%rax 0x014: addq %rdx,%rax 0x016: halt # demo-h0.ys 4. Saat palsi valA f M_valE = 10 valB f e_valE = 3 M_dstE = %rdx M_valE = 10 srcA = %rdx srcB = %rax E_dstE = %rax e_valE f = 3 Kaydedici %rdx ALU tarafından bir önceki saat palsinde oluşturulmuştur Memory aşamasından valA değeri olarak iletilir Kaydedici %rax Değer ALU tarafından yeni oluşturulmuştur Execute aşamasından valB değeri olarak iletilir
36
İletme Önceliği Birden fazla iletme seçeneği bulunuyorsa
0x000: irmovq $1, %rax 1 2 3 4 5 6 7 8 9 F D E M W 0x00a: irmovq $2, %rax 0x014: irmovq $3, %rax 0x01e: rrmovq %rax, %rdx 0x020: halt 10 # demo-priority.ys W R[ % rax ] f 3 1 D valA rdx = 10 valB ? 5. Saat palsi M 2 E Birden fazla iletme seçeneği bulunuyorsa Öncelik hangisinde olmalı? Birbiri izleyen komutları incele En erken pipeline aşamasından eşleşen değeri kullan
37
İletmenin Kısıtlandığı Yer
Yükle Kullan 7. Saat palsi 8. Saat palsi Yükle-kullan veri bağımlılığı 7. saat palsinde, decode aşamasının sonunda değere ihtiyaç duyulur Fakat bu değer hafızadan ancak 8. saat palsindeki hafıza aşamasında okunur Hata
38
Yükle-Kullan Riskinin Önlenmesi
kabarcık Kullan 8. Saat palsi Veriyi kullanacak komutu 1 saat palsi boyunca durdur Ardından, yüklenen değer memory aşamasından iletme yoluyla kullanılacak yere aktarılabilir
39
Yükle-Kullan Riski için Kontrol
0x000: irmovq $128,% rdx 1 2 3 4 5 6 7 8 9 F D E M W 0x00a: $3,% rcx 0x014: rmmovq % , 0(% ) 0x01e: $10,% ebx 0x028: mrmovq 0(% ), rax # Yükle% # demo - luh . ys 0x032: addq , # Kullan % 0x034: halt 10 11 kabarcık 12 Komutlar fetch ve decode aşamalarında durdurulur Execute aşamasına kabarcık enjekte edilir Durum F D E M W Yükle/Kullan Riski durdur kabarcık normal
40
Dallanma Hatalı Tahmini Örneği
demo-j.ys 0x000: xorq %rax,%rax 0x002: jne t # Dallanma olmaz 0x00b: irmovq $1, %rax # Dallanma olmaması durumunda # işletilmesi gereken komut 0x015: nop 0x016: nop 0x017: nop 0x018: halt 0x019: t: irmovq $3, %rdx # Hedef 0x023: irmovq $4, %rcx # İşletilmemeli 0x02d: irmovq $5, %rdx # İşletilmemeli Sadece ilk 7 komutun işletilmesi gerekir
41
Hatalı Tahminin Halledilmesi
Dallanma olmaz Hedef kabarcık Hedef+1 kabarcık Dallanma gerçekleşmezse Dallanmayı gerçekleşmiş olarak tahmin et Hedeften 2 komut fetch edilir Hatalı tahmin durumunda 2 komutu iptal et Dallanmanın olmayacağı execute aşamasında anlaşılır Bir sonraki saat palsinde, execute ve decode aşamasındaki komutların yerine kabarcık enjekte edilir Herhangi bir yan etkisi olmaz
42
Hatalı Tahmin için Kontrol
Dallanma olmaz Hedef kabarcık Hedef+1 kabarcık Dallanma gerçekleşmezse Durum F D E M W Hatalı tahmin edilmiş dallanma normal kabarcık
43
Return (Geri dönme) Örneği
demo-retb.ys 0x000: irmovq Stack,%rsp # Yığın pointer’ını ayarla 0x00a: call p # Alt program çağırma 0x013: irmovq $5,%rsi # Geri dönüş noktası 0x01d: halt 0x020: .pos 0x20 0x020: p: irmovq $-1,%rdi # Alt program 0x02a: ret 0x02b: irmovq $1,%rax # İşletilmemeli 0x035: irmovq $2,%rcx # İşletilmemeli 0x03f: irmovq $3,%rdx # İşletilmemeli 0x049: irmovq $4,%rbx # İşletilmemeli 0x100: .pos 0x100 0x100: Stack: # Yığın: Yığın pointer’ı 3 komut ek olarak işletilir
44
Doğru Return Örneği Dikkat! Bu slayt, orijinal İngilizcesinden
daha detaylı bilgiler içerecek şekilde genişletilmiştir. # demo - retb 0x026: ret F D E M W kabarcık F D E M W kabarcık F D E M W kabarcık F D E M W 0x013: irmovq $5,% rsi # Return F F D D E E M M W W ret komutu pipeline’dan geçerken, decode, execute ve memory aşamalarındayken, fetch aşamasına durdurma (stall) uygulanır. ret komutundan bir sonraki komut (0x02b:irmovq $1,%rax), 3 saat palsi boyunca hep fetch edilir ama decode aşamasına aktarılmaz. Decode aşamasına 3 saat palsi boyunca hep kabarcık enjekte edilir. Fetch aşamasına kabarcık enjekte edemediğimiz için durdurma uygulanmaktadır. Bu durum, efektif olarak yukarıdaki gibi 3 kez kabarcık uygulanacak şekilde basitleştirilmiş halde gösterilmektedir. Decode aşamasındaki durdurma, ret komutu write-back aşamasına ulaştığında kaldırılır. W valM = 0x0b 0x013 • F F valC valC f f 5 5 rB rB f f % % esi rsi
45
Return için Kontrol Durum F D E M W ret komutunun işletilmesi durdurma
# demo - retb 0x026: ret F D E M W kabarcık F D E M W kabarcık F D E M W kabarcık F D E M W 0x013: irmovq $5,% rsi # Return F F D D E E M M W W Durum F D E M W ret komutunun işletilmesi durdurma kabarcık normal Fetch aşamasına kabarcık enjekte edemediğimiz için bu aşama durdurulur, bu durum 3 saat palsi boyunca devam eder
46
Özel Kontrol Durumları
Tespit İşlem (bir sonraki saat palsinde) Durum Tetikleyici ret komutunun işletilmesi IRET in { D_icode, E_icode, M_icode } Yükle/Kullan Riski E_icode in { IMRMOVQ, IPOPQ } && E_dstM in { d_srcA, d_srcB } Hatalı tahmin edilmiş dallanma E_icode = IJXX & !e_Cnd Condition F D E M W ret komutunun işletilmesi durdurma kabarcık normal Yükle/Kullan Riski Hatalı tahmin edilmiş dallanma
47
Pipeline Özeti Veri Riskleri (Data Hazards) Kontrol Riskleri
Çoğu risk iletme (forwarding) ile çözülür Performansa olumsuz etkisi bulunmaz Yükle/kullan riski 1 saat palsliğine durdurma gerektirir Kontrol Riskleri Hatalı tahmin edilmiş dallanma durumunda belli komutlar iptal edilir 2 saat palslik süre boşa gider ret komutu pipeline’dan geçerken, decode, execute ve memory aşamalarındayken, fetch aşamasına durdurma (stall) uygulanır. 3 saat palslik süre boşa gider Kontrol Kombinasyonları Çok dikkatli analiz edilmelidirler Finalde risklerin kombinasyonlarından sorumlu değilsiniz.
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.