Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

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

Benzer bir sunumlar


... konulu sunumlar: "Komut, işcik ve bellek düzeyinde paralelliğe yönelik derleyici teknikleri Ali Üllenoğlu 504061502."— Sunum transkripti:

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

2 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

3 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.

4 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.

5 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ı.

6 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

7 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ı.

8 Örnek (Saklayıcı Kullanımı)
(a + b) + c + (d + e) için r1 = *a r2 = *b r1 = r1 + r2 r2 = *c r2 = *d r3 = *e r2 = r2 + r3 r1 = r1 + e2

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

10 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.

11 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

12 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ı.

13 Veri Bağımlılık Grafı

14 Sonuç Kod

15 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ı.

16 Örnek Kod

17 Derlenmiş Örnek Kod

18 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.

19 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.

20 Yazılım İş Hatları Örnek Döngü: Üretilen Kod:
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 = &B MUL R7, R5, R6 nop ADD R8, R7, R4 // R4 = c ST 0(R3++), R8 BL R10, L // R3 = &D, R10 = n-1

21 Döngü Açma 1 LD 2 LD 3 MUL LD 4 LD 5 MUL LD 6 ADD LD 7 MUL LD
8 ST ADD LD 9 MUL LD 10 ST ADD LD MUL 12 ST ADD 13 ST ADD 15 ST

22 Yazılım İş Hattı Optimizasyonu
1 LD 2 LD 3 MUL LD 4 LD 5 MUL LD 6 ADD LD 7 L: MUL LD 8 ST ADD LD BL (L) MUL 10 ST ADD 11 ST ADD 13 ST

23 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.

24 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.

25 İşç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.

26 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.

27 Otomatik Döngü İşçikleri Oluşturma
Orjinal Program Kodu subroutine serial(a, b, c) integer, dimension(100) :: a, b, c do i=1,100 a(i) = a(i) + b(i) * c(i) enddo end subroutine serial

28 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 end subroutine parallel

29 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.

30 İş 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.

31 İş 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.

32 İş Hattı Yöntemi (Sonuç)

33 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

34 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

35 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.

36 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

37 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.

38 Örnek (Kod)

39 Örnek (Çalışma)

40 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

41 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.

42 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”, 3. “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, Proceedings International Conference on Volume , Issue , 2001 Page(s):292 – 303 7. “Memory Level Parallelism”, 8. “Code Transformations to Improve Memory Parallelism”, Vijay S. Pait, Sarita Advel


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

Benzer bir sunumlar


Google Reklamları