Derleme sürecinin GCC'ye paralelleştirilmesi için destek ekleme projesi

Bir araştırma projesinin parçası olarak Paralel GCC GCC'ye, derleme sürecinin birkaç paralel iş parçacığına bölünmesine olanak tanıyan bir özelliğin eklenmesine yönelik çalışmalar başlatıldı. Şu anda, çok çekirdekli sistemlerde derleme hızını artırmak için make yardımcı programı, her biri ayrı bir kod dosyası oluşturan ayrı derleyici işlemlerinin başlatılmasını kullanıyor. Yeni proje, çok çekirdekli sistemlerde performansı potansiyel olarak artıracak derleyici düzeyinde paralelleştirme sağlamayı deniyor.

Test için tarafından hazırlanan iş parçacığı sayısını ayarlamak için yeni bir "—param=num-threads=N" parametresi sunan GCC'nin ayrı bir paralelleştirme dalı. İlk aşamada, prosedürler arası optimizasyonların, her işlev için döngüsel olarak çağrılan ve kolayca paralelleştirilebilen ayrı iş parçacıklarına aktarılmasını gerçekleştirdik. İşlevlerin birbirleriyle etkileşimini değerlendiren donanımdan bağımsız optimizasyonlardan sorumlu GIMPLE işlemleri ayrı iş parçacıklarına yerleştirilir.

Bir sonraki aşamada, donanım platformunun özellikleri dikkate alınarak prosedürler arası RTL optimizasyonlarının ayrı iş parçacıklarına taşınması da planlanıyor. Bundan sonra, çağrının özelliklerine bakılmaksızın fonksiyon içindeki koda uygulanan prosedür içi optimizasyonların (IPA) paralelleştirilmesini uygulamayı planlıyoruz. Şimdilik sınırlayıcı bağlantı, çok iş parçacıklı modda çalışırken çöp toplama işlemlerini devre dışı bırakan genel bir kilit ekleyen çöp toplayıcıdır (gelecekte çöp toplayıcı, GCC'nin çok iş parçacıklı yürütülmesi için uyarlanacaktır).

Performanstaki değişiklikleri değerlendirmek için 100 binden fazla kod satırı ve 1700 fonksiyon içeren gimple-match.c dosyasını bir araya getiren bir test paketi hazırlandı. 5 fiziksel çekirdekli ve 8250 sanal (Hyperthreading) Intel Core i4-8U CPU'ya sahip bir sistem üzerinde yapılan testler, Intra Prosedürel GIMPLE optimizasyonlarının yürütme süresinde 7 iş parçacığı çalıştırırken 4'den 2 saniyeye ve 3 iş parçacığı çalıştırırken 4 saniyeye bir azalma gösterdi. iplikler, yani Söz konusu montaj aşamasının hızında sırasıyla 1.72 ve 2.52 kat artış sağlandı. Testler ayrıca Hyperthreading ile sanal çekirdeklerin kullanılmasının performansın artmasını sağlamadığını da gösterdi.

Derleme sürecinin GCC'ye paralelleştirilmesi için destek ekleme projesi

Genel derleme süresi yaklaşık %10 oranında azaldı, ancak tahminlere göre RTL optimizasyonlarının paralelleştirilmesi, bu aşamanın derleme sırasında önemli ölçüde daha fazla zaman alması nedeniyle daha somut sonuçlara ulaşılmasına olanak tanıyacak. Yaklaşık RTL paralelleştirme sonrasında toplam montaj süresi 1.61 kat azalacaktır. Bundan sonra IPA optimizasyonlarını paralel hale getirerek yapım süresini %5-10 daha azaltmak mümkün olacak.

Derleme sürecinin GCC'ye paralelleştirilmesi için destek ekleme projesi

Kaynak: opennet.ru

Yorum ekle