Pipeline (Boru hattı) Uygulaması - II BIL-304: Bilgisayar Mimarisi

Slides:



Advertisements
Benzer bir sunumlar
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Advertisements

BİLGİSAYAR MİMARİLERİ 11.Hafta: Pipeline Sorunları
Algoritma.  Algoritma, belirli bir görevi yerine getiren sonlu sayıdaki işlemler dizisidir.  Başka bir deyişle; bir sorunu çözebilmek için gerekli olan.
Hat Dengeleme.
2 Yatırım Karlılık Analizleri Finansal Analizler Basit Yöntemler İndirgenmiş Yöntemler Karlılık Yöntemi Geri Ödeme Süresi Yöntemi Net Bugünkü Değer Yöntemi.
% A10 B20 C30 D25 E15 Toplam100.  Aynı grafik türü (Column-Sütun) iki farklı veri grubu için de kullanılabilir. 1. Sınıflar2. Sınıflar A1015 B20 C3015.
BÖLÜM 1 TEMEL KAVRAMLAR. BÖLÜM 1 TEMEL KAVRAMLAR.
Veri Toplama ve Değerlendirme Sistemi Tanıtım Toplantısı.
Ağ Anahtarı (Switch) Çeşitleri
KISIM 3 Bilişsel Gelişimi Arttırma BÖLÜM 8 Problem Çözme ve Eleştirel Düşünme.
BİLGİSAYAR PROGRAMLAMA Ders 11: İşaretçi (Pointer) Kullanımı Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
Örnek 1 Kullanıcının girdiği bir sayının karesini hesaplayan bir program yazınız.
BULUŞ YOLUYLA ÖĞRETİM JEROME BRUNER.
SOLUNUM VE GEVŞEME EGZERSİZLERİ İLE ETKİLİ MÜZİK EĞİTİMİ AYŞEN ÜMİT İSTANBUL BİLİM VE SANAT MERKEZİ Müzik Mentoru.
İSTATİSTİK II BAĞIMSIZLIK TESTLERİ VE İYİ UYUM TESTLERİ “ c2 Kİ- KARE TESTLERİ “
DÖNEMSONU UYGULAMALARI
ÖTÖ 451 Okul Yönetiminde Bilgisayar Uygulamaları R. Orçun Madran.
YÖNLENDİRME. Yönlendirme ● Statik ● Dinamik ● Kaynakta yönlendirme ● Hop by hop yönlendirme.
ÇAĞRI MERKEZİ CRM YAZILIMI İÇERİK ÖRNEĞİ
BİLGİSAYAR PROGRAMLAMA DERSİ
İnternet'e Bağlanmak İçin Neler Gereklidir?
İndeksi Niçin Kullanırız?
GARSON/VALE ÇAĞRI SİSTEMLERİ KURULUM
LD/LDI LD X0 LDI X0 X0 Y0 X0 Y1 Temel Komutlar
KDV BEYANNAMESİ / MUHTASAR BEYANNAME / KURUMLAR VERGİSİ BEYANNAMESİ / GEÇİCİ VERGİ BEYANNAMESİ’NDE ORTAK ÖZELLİKLER F5 PENCERESİ Beyannamelerde yer alacak.
PROGRAMLI ÖĞRETİM Tanımı:
ISTATİSTİK I FIRAT EMİR DERS II.
Çiti Kilim Örme.
Mikroişlemciler Temel I/O Arayüzleri.
Yapay Sinir Ağı Modeli (öğretmenli öğrenme) Çok Katmanlı Algılayıcı
PROGRAMLAMA TEMELLERİ
HAZIRLAYAN SEDA KALKANDELEN
Mikroişlemciler Temel I/O Arayüzleri.
FİNANSAL PLANLAMA.
Bilgi ve İletişim Teknolojileri
GELECEK PİYASASI İŞLEMLERİ
STORAGE BÜŞRA KARADENİZ
Hayvancılık İşletmelerinde Sürü Yönetimi
ZEE ZİHİN ENGELLİLERE BECERİ VE KAVRAM ÖĞRETİMİ
İŞLETİM SİSTEMLERİ Bilişim Teknolojileri Araçlarında
MATEMATİK DERSİ ÖĞRETİM PROGRAMI
GAZİ ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ
Düz hatlar, makaslar & kruvazmanlar için ivmelenme izleme sistemi
NeTIRail-INFRA Bilgilendirme Toplantısı, Ankara, Türkiye
BENZETİM Prof.Dr.Berna Dengiz 13. Ders Çıktı Analizi
Meriç ÇETİN Pamukkale Üniversitesi Bilgisayar Mühendisliği Bölümü
MBT-303 özel öğretim yöntemleri-ı
Bilgisayar Mühendisliğine Giriş
LD/LDI LD X0 LDI X0 X0 Y0 X0 Y1 Temel Komutlar
Benzetim 11. Ders İmalat Yönetimde Benzetim.
MİKROİŞLEMCİLER VE MİKROBİLGİSAYARLAR
Prof. Dr. Eşref ADALI Doç. Dr. Şule Gündüz Öğüdücü Sürüm-B
Akreditasyon ve Yeterlilikler Çerçevesinde
B+-Ağaçları.
ÜNİVERSİTEDE YABANCI DİL ÖĞRETİMİNDE İNTERNET KULLANIMINA İLİŞKİN ÖĞRENCİ GÖRÜŞLERİ Mehmet AKSÜT Nihat ÇAKIN 
Doğrusal Mantık Yapısı İle Problem Çözme
MOTOR KONTROL VE MOTOR PROGRAMLAR
Defter Beyan Sistemi Başvurusu
Bilgisayar Bilimi Koşullu Durumlar.
Bilgi Teknolojileri Hafta 01
NİŞANTAŞI ÜNİVERSİTESİ
6. DÖNGÜ (TEKRARLAMA) DEYİMLERİ
İşlemciler.
Ürün ve Hizmetler İçin Kapasite Planlaması
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
Önbellek Hafızalar BIL-304: Bilgisayar Mimarisi
Bilimsel Araştırma Yöntemleri
Sunum transkripti:

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: http://csapp.cs.cmu.edu/ Adapted from slides of the textbook: http://csapp.cs.cmu.edu/

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

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

Kısıtlamalar: Kaydedicilerle gelen zaman problemi Gecikme= 420 ps, Throughput = 14.29 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: 16.67% 6- aşama pipeline: 28.57% Modern işlemcilerin yüksek hızlarda çalışabilmesi, çok aşamalı pipeline ile sağlanır

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

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

İş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ı

Kontrol akışı bağımlılığı (Control flow dependency) loop: subq %rdx, $rbx jne target irmovq $10, %rdx jmp loop target: halt

Ö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?

SEQ Donanımı Aşamalar dizi halindedir Herhangi bir anda sadece bir iş yapılmaktadır

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

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

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

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

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

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

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

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

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

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

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_

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

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

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

Hatalı Return Örneği ret’i takip eden 3 komut işletilmemesi gerekirken işletiliyor

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

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_

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

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

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

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

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

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

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

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 0 + 3 = 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

İ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

İ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

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

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

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

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

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

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

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

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

Ö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

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.