42
Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri Ali Üllenoğlu 504061502

Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

  • Upload
    didina

  • View
    59

  • Download
    4

Embed Size (px)

DESCRIPTION

Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri. Ali Üllenoğlu 504061502. Komut Düzeyinde Paralellik. Aynı anda kaç adet komut bir arada işletilebilir? Programdaki potansiyel paralellik İşlemcinin paralel işleme yeteneği - PowerPoint PPT Presentation

Citation preview

Page 1: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Ali Üllenoğlu504061502

Page 2: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Komut Düzeyinde Paralellik

Aynı anda kaç adet komut bir arada işletilebilir? Programdaki potansiyel paralellik İşlemcinin paralel işleme yeteneği Orjinal sıralı kodu paralelleştirme

yeteneğimiz Verilen kod sıralama kısıtlamaları

altında en iyi paralel kodu bulma yeteneğimiz

Page 3: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Komut Düzeyinde Paralellik Yöntemleri

İş hatları Komut yürütme işleminin safhalarını

paralel olarak yürütme. Birden fazla komut işleyebilme

Aynı anda birden fazla komut yürütebilme yeteneği.

Aynı anda bir aritmetik işlem, bir dallanma, bir bellekten yükleme, bir belleğe yazma komutu işlenebilir.

Page 4: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Kod Sıralama Yöntemi

Derleyici sıralı (sequential) çalışmak için yazılmış kodu paralel çalışması için tekrar düzenler.

Çeşitli kısıtlamalar mevcut.

Page 5: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Kod Sıralama Kısıtlamaları

Kontrol Bağımlılığı Orjinal programdaki tüm komutlar

optimize edilmiş programda da bulunmalı

Veri Bağımlılığı Optimize program, orjinal program ile

aynı sonuçları vermeli Kaynak Kısıtlamaları

Optimize program, orjinal programa göre çok fazla kaynak kullanmamalı.

Page 6: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Bellek Erişimleri Arasındaki Bağımlılıklar

Belleğin tam adresinin bilinmesine gerek yok. Aynı alanı gösterdiklerinin bilinmesi yeterli.

Farklı işaretçiler aynı bellek alanını gösteriyor olabilir. Dizi veri bağımlılığı analizi Prosedürler arası analiz İşaretçi analizi

Page 7: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Saklayıcı Kullanımı ve Parallellik Arasında Seçim Yapma

Derleyici, minimum sayıda saklayıcı kullanma eğiliminde.

Paralellik için maksimum sayıda saklayıcı kullanılmalı.

İkisi arasında bir anlaşma sağlanmalı.

Page 8: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Örnek (Saklayıcı Kullanımı)

(a + b) + c + (d + e) için

r1 = *ar2 = *br1 = r1 + r2r2 = *cr1 = r1 + r2r2 = *dr3 = *er2 = r2 + r3r1 = r1 + e2

Page 9: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Örnek (Paralellik)

Her değişken için bir saklayıcı İşlem 4 saat çevriminda

tamamlanabilir

r1 = *a r2 = *b r3 = *c r4 = *d r5 = *e r6 = r1 + r2 r7 = r4 + r5 r8 = r6 + r3 r9 = r8 + r7

Page 10: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Kontrol Bağımlılığı Analizi

if (a > t)b = a * a

d = a + c

b = a * a işlemi, a > t karşılaştırmasının sonucuna bağlı olarak işletilir

a > t karşılaştırması yapılırken, a * a işlemi spekülatif olarak yapılabilir. Çünkü yan etkisi yok.

Eğer karşılaştırma doğru çıkarsa hızlanma sağlanmış oldu. Yanlış çıkarsa yan etkisi olmadığı için sorun yok.

Page 11: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Temel Blok Sıralama

Örnek Mimari İşlemci 1 saat çevriminde 2 işlem

yapar. Birisi dallanma veya ALU

OP dst, src1, src2 İkincisi yükleme (load) veya yazma

(store) LD dst, addr ST addr, dst

Page 12: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Veri Bağımlılık Grafı

G = (N, E) grafı. N: Düğümler. Her komuta karşılık bir

düğüm. E: Düğümleri birleştiren kenarlar. Her

kenarın üzerindeki değer, birleştirdiği düğümlerin arasında geçmesi gereken saat çevrimi sayısı.

Page 13: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Veri Bağımlılık Grafı

Page 14: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Sonuç Kod

Page 15: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Global Kod Sıralama

Sadece temel blok içerisinde kod sıralama yetmez.

Bloklar arasında kod sıralama. Kısıtlamalar:

Orjinal programdaki tüm komutlar, optimize edilmiş programda da bulunmalı.

Yürütülecek spekülatif komutlar yan etkiye yol açmamalı.

Page 16: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Örnek Kod

Page 17: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Derlenmiş Örnek Kod

Page 18: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Optimize Kod

B3 bloğundaki işlemler B1’e taşınabilir. B2 bloğundaki LD işlemi spekülatif yürütülebilir. B2’deki ST işlemi yukarı taşınamayacağı için bir

dallanma daha açılır ve B3’teki ST kopyalanır.

Page 19: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Yazılım İş Hatları(Software Pipelining)

Donanımdaki iş hatlarının yazılımda gerçeklenişi.

Örnek Mimari: 1 saat çevriminde 1 LD, 1 ST, 1 ALU, 1 BR

işlemi yapabilir. BL R, L komutu ile R 1 azaltılır ve R=0

değilse L’ye dallanılır. R1++ şeklinde otomatik bellek adresleme

yöntemi var. Değer döndürülür ve 1 arttırılır. Aritmetik işlemler iş hatlıdır ve 2 saat

çevriminde sonuç verir. Diğer komutların sonuçları 1 saat çevriminde alınır.

Page 20: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Yazılım İş Hatları

Örnek Döngü:

for(i = 0; i < n; i++)D[i] = A[i] * B[i] + c;

Üretilen Kod:L: LD R5, 0(R1++) // R1 = &A

LD R6, 0(R2++) // R2 = &BMUL R7, R5, R6nopADD R8, R7, R4 // R4 = cnopST 0(R3++), R8 BL R10, L // R3 = &D, R10 = n-1

Page 21: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Döngü Açma

1 LD2 LD3 MUL LD4 LD5 MUL LD6 ADD LD7 MUL LD8 ST ADD LD9 MUL LD10 ST ADD LD11 MUL12 ST ADD1314 ST ADD1516 ST

Page 22: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Yazılım İş Hattı Optimizasyonu

1 LD2 LD3 MUL LD4 LD5 MUL LD6 ADD LD7 L: MUL LD8 ST ADD LD BL (L)9 MUL10 ST ADD1112 ST ADD1314 ST

Page 23: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Kısıtlamalar

Saklayıcı Kullanımı Bir indeks’teki değerlerin farklı indeksteki

iterasyonlarda kullanılması, saklayıcı kullanımında sorunlara yol açar.

Eğer aynı saklayıcı birden fazla döngüde kullanılıyorsa.

Genelde art arda gelen iterasyonlarda sorun çıkar.

Tek sayılı ve çift sayılı iterasyonlar farklı birer döngü haline getirerek çözülebilir.

Page 24: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Kısıtlamalar

Kaynak kısıtlamaları Toplam açılan döngüler, varolan

kaynaklardan fazlasını kullanamaz. Eğer kaynak kullanımı azsa döngü

birkaç kere daha açılabilir. Eğer kaynaklar tüketilmişse döngü

daha fazla açılamaz. Örneğin, Bir LD işlemi 2 saat çevrimi

sürdüğü için bir döngü 2 saat çevriminden az süremez.

Page 25: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

İşçik Seviyesinde Paralellik

Modern işlemciler çok çekirdekli. Her çekirdekte birden fazla işçik

çalıştırılabilir. Tek işçik olarak yazılmış program

derleyici tarafından çok işçiğe ayrılarak işlemcide paralel işleme sağlanır.

Page 26: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Otomatik Döngü İşçikleri Oluşturma(Automatic Loop Multithreading)

Intel derleyicilerinin kullandığı bir yöntem.

Pentium 4 ve Xeon tabanlı işlemcilerinde kullanılır.

Döngüler paralel çalışabilecek kısımlara ayrılır.

Page 27: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Otomatik Döngü İşçikleri Oluşturma

Orjinal Program Kodu

subroutine serial(a, b, c)integer, dimension(100) :: a, b, cdo i=1,100

a(i) = a(i) + b(i) * c(i)enddo

end subroutine serial

Page 28: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Otomatik Döngü İşçikleri Oluşturma

Derleyici tarafından 2 işçikli hale getirilmiş kod:

subroutine parallel(a, b, c)integer, dimension(100) :: a, b, c! Thread 1 do i=1,50

a(i) = a(i) + b(i) * c(i)enddo! Thread 2 do i=51,100

a(i) = a(i) + b(i) * c(i)enddo

end subroutine parallel

Page 29: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Otomatik Döngü İşçikleri Oluşturma Aşamaları

Programdaki döngüler belirlenir ve bir hiyerarşi oluşturulur.

Döngüler arasında veri bağımlılığı analizi yapılır. Paralelleştirilebilir döngüler belirlenir.

Önceden tahmin edilebilen döngülerin paralelleştirilmesinin getireceği performans kayıp/kazancı hesaplanır.

Önceden tahmin edilemeneyen döngülerin kazancını hesaplamak için simülasyon yapılır.

Page 30: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

İş Hattı Yöntemi

Bir döngüde farklı iterasyonlar arasında veri bağımlılığı varsa kullanılabilir.

Bağımlı olan veri bir adımda bir işlemcide işlenirken diğer adımda bir bitişiğindeki işlemcide işlenir.

Page 31: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

İş Hattı Yöntemi (Örnek)

for(i = 1; i <= m; i++)for(j = 1; j <=n; j++)

X[i] = X[i] + Y[i,j] X[i] işlemi;

Y[i, 0] Y[i, 1] Y[i, n] iterasyonlarında kullanılır.

Döngünün farklı iterasyonları arasında veri bağımlılığı var.

Page 32: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

İş Hattı Yöntemi (Sonuç)

Page 33: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Bellek Kullanımı Optimizasyonları

Bir işçiğe mümkün olduğunca aynı bellek alanı üzerinde işlem yapan komutlar aktarılır. Cep belleğin etkin kullanımı İşlemciler arasındaki haberleşme maliyeti

azaldı Bir işçiğin kullandığı değişkenler bellekte

birbirine yakın yerlere atanır. Yerellik artar İşlemci – bellek alanı atanması daha etkin

Page 34: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Bellek Düzeyinde Paralellik

Bellek gecikmeleri işlemcinin çalışması üzerinde negatif etkilere sahip Örnek: Cep bellek ıska durumu

(100’den fazla işlemci çevrimi sürer) Bellek gecikmelesi yaratan

komutları üst üste bindirme Bellek gecikmesi yaratan komutları

önceden işleme

Page 35: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Okuma Iska Gruplaması (Read Miss Clustering)

Bir komut penceresinde belli miktarda komut bulunur.

Bir okuma işlemi pencerenin başına geldiğinde cep ıskası olursa okuma işlemi bloke olur.

Bir işlem bloke iken penceredeki diğer komutlar çalıştırılabilir.

Diğer komutlar hızlı çalıştıkları için işlerini hemen bitirirler.

Page 36: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Okuma Iska Gruplaması

Tüm komutlar sırayla komut penceresinden çıkmak zorunda.

Komutların komut penceresinden çıkması için okuma komutunun sonlanması gerekli.

Bütün komutlar okuma komutunun sonlanması için bekleyecek.

Optimizasyon Gerekli

Page 37: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Okuma Iska Gruplaması

Okuma işlemlerinin aynı komut penceresine denk getirilmesine çalışılır.

Böylece birden fazla okuma işlemi sadece aynı zaman dilimi içerisinde bloke olur.

Toplam bloke kalma süresi azalmış oldu.

Page 38: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Örnek (Kod)

Page 39: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Örnek (Çalışma)

Page 40: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Kısıtlama

Aynı pencere içine yerleştirilecek okuma sayısı cep bellek satır sayısını aşmamalı.

Aksi durumda yerellik kötü etkilenir

Page 41: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Yazılımsal Önceden Getirme(Software Prefetching)

Analiz Safhası: Derleyici program kodu içerisinde bellek ıskası olacak komutları tahmin eder.

Örneğin bellek erişimlerinde, dizinin hangi elemanlarının hangi cep satırına geleceği hesaplanır.

Gerekli elemanı bellekten getirmek için komut yerleştirilir.

O eleman bellekten getirilirken cep satırının gerisine önceden hesaplanmış elemanlar doldurulur.

Page 42: Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri

Referanslar

1. Compilers: Principles, Techniques and Tools 2nd Edition. Alfred V. Aho, Ravi Sethi, and Jeffrey D. Ullman. Addison-Wesley, 2006

2. “Instruction Level Parallelism”, http://en.wikipedia.org/wiki/Instruction_level_parallelism

3. “Software Pipelining”, http://en.wikipedia.org/wiki/Software_pipelining

4. “Compiler Techniques for Concurrent Multithreading with Hardware Speculation Support”, Zhiyuan Li,Jenn-yuan Tsai,Xin Wang,Pen-chung Yew,Bess Zheng, 1996

5. “Exploiting Thread-Level and Instruction-Level. Parallelism for Hyper-Threading Technology”, Xinmin Tian, Aart Bik, Milind Girkar, Paul Grey, 2003

6. “Comparing and Combining Read Miss Clustering and Software Prefetching”, Vijay S. Pai, Sarita V. Adve, Parallel Architectures and Compilation Techniques, 2001. Proceedings. 2001 International Conference on Volume , Issue , 2001 Page(s):292 – 303

7. “Memory Level Parallelism”, http://en.wikipedia.org/wiki/Memory_level_parallelism

8. “Code Transformations to Improve Memory Parallelism”, Vijay S. Pait, Sarita Advel