Friday, January 28th, 2022

Yazılım Optimizasyonu

Bir derleyicinin ön ucu genellikle kaynak programın bir ara temsilini oluşturmaktan sorumludur, oysa derleyicinin arka ucu, ara gösterimden ve sembol tablosundaki bilgilerden istenen hedef programı oluşturur. Ara kod derleyicinin arka ucuna iletilmeden önce, daha iyi hedef kodun ortaya çıkması için ara kodun iyileştirilmesi gerekir. Bir derleyicideki kod optimizasyon aşaması, çıktısını değiştirmeden veya yan etkiler olmadan hedef kodu iyileştirmeye çalışır.

Günümüzde derleyici araştırmalarının çoğu optimizasyon aşamasında yapılmaktadır. Birçok klasik teknik vardır (örn.

Kod optimizasyonunda kullanılan ortak alt ifadelerin ortadan kaldırılması, Ölü Kod ortadan kaldırılması, Sabit Katlama vb. Bununla birlikte, yazılım ürünlerinin artan boyutu ve karmaşıklığı ve bu ürünlerin gömülü, web tabanlı ve mobil sistemlerde kullanılması, kaynak kodunun daha optimize edilmiş sürümlerine olan talebi doğurmaktadır. Bu araştırma makalesi, bu tür sistemler için kod optimizasyonunun içerdiği zorlukları ve kod optimizasyonunda son zamanlarda geliştirilen bazı teknikleri tartışmaktadır.

Kod Optimizasyonu, daha verimli hedef kod üretmek için bir kaynak kod parçasını dönüştürme işlemidir. Verimlilik hem zaman hem de mekan açısından ölçülür. Optimizasyon genellikle bir dizi optimizasyon dönüşümleri, yani bir parça kaynak kodu alan ve daha az kaynak kullanan semantik olarak eşdeğer bir çıktı kodu üretmek için dönüştüren algoritmalar kullanılarak gerçekleştirilir. Optimizasyon tekniklerinin çoğu, nesne kodundaki gereksiz talimatları ortadan kaldırarak veya bir talimat dizisini daha hızlı başka bir talimat dizisiyle değiştirerek hedef kodu iyileştirmeye çalışır.

Optimizasyon, bir Derleyicideki en önemli aşamalardan biridir. Kod optimizasyonu, daha iyi hedef kodun elde edilmesi için kaynak kodu iyileştirmeye çalışır. Genellikle daha iyi bir hedef kod, zaman ve mekan açısından daha iyi olandır. Bununla birlikte, daha az güç tüketen hedef kod gibi kodun iyiliğini ölçmek için başka hedefler de düşünülebilir. Modern zamanlarda, işlemci mimarileri daha karmaşık hale geliyor. Çalıştırmak için daha az alan ve güç tüketen daha hızlı bir hedef kod gerektiren çok çekirdekli ve gömülü sistemlerin kullanıma sunulmasıyla. Bir derleyicideki kod optimizasyon aşaması, bu sorunları çözmeye çalışır ve istenen çıktıyı değiştirmeden daha iyi hedef kod üretir.

1.3 Derleyici Mimarisinde Optimizasyon aşamasının varlığı

Kod optimizasyonu, kaynak kodun ara temsilinde veya hedef makine kodunun optimize edilmemiş versiyonunda gerçekleştirilebilir. Ara gösterime uygulanırsa, kod optimizasyon aşaması, Soyut Sözdizimi Ağacının veya Üç Adres Kodu talimatlarının boyutunu küçültür. Aksi takdirde, son kod üretiminin bir parçası olarak uygulanırsa, kod optimizasyon aşaması hangi talimatların yayınlanacağını, kayıtların nasıl tahsis edileceğini ve ne zaman döküleceğini vb. seçmeye çalışır.

2. OPTİMİZASYON TEKNİKLERİ

Son on yıldan beri kod optimizasyonunda kullanılan birçok klasik optimizasyon tekniği vardır. Bu tekniklerin bazıları kaynak koddaki temel bloklara, diğerleri ise tüm fonksiyona uygulanır. Son zamanlarda yapılan araştırmalar sonucunda birçok yeni optimizasyon tekniği tanıtılmıştır. Bu araştırma makalesinde, kod optimizasyonunun yeni teknikleri üzerinde durulacaktır; bununla birlikte, klasik tekniklere kısa bir genel bakış da sunulmuştur.

2.1 Klasik Optimizasyon Teknikleri

Kod optimizasyonu için klasik teknikler şu şekilde kategorize edilebilir:

1. Yerel Optimizasyon

2. Küresel Optimizasyon

3. Prosedürler Arası Optimizasyon

2.1.1 Yerel Optimizasyon

Bir derleyicideki kod optimizasyon aşaması, üç adresli komut dizilerinin temel bloklara bölünmesiyle başlar. Bu temel bloklar, bir akış grafiğinin düğümleri haline gelir. Her temel blok içinde yerel optimizasyon gerçekleştirilir. Her bir temel blok içinde kendi başına yerel optimizasyon gerçekleştirerek kodun çalışma süresinde genellikle önemli bir gelişme elde edebiliriz. Temel blokların kontrol akışı olmadığından, bu optimizasyonlar çok az analiz gerektirir.

Yerel optimizasyon aşağıdaki teknikler kullanılarak gerçekleştirilebilir-

(I) Yerel ortak alt ifadeleri ortadan kaldırmak,

(ii) Ölü kod Eliminasyonu

(iii) Cebirsel kimliklerin kullanımı-

(a) Aritmetik kimliklerin kullanımı

(b) Güçte yerel azalma, yani daha pahalı bir operatörün daha ucuz bir operatörle değiştirilmesi.

(c) Sabit Katlama

(iv) Birbirine bağlı olmayan ifadeleri yeniden sıralamak.

2.1.2 Global Optimizasyon (Prosedür İçi Yöntemler)

Global optimizasyon teknikleri tüm fonksiyonlara etki eder. Global optimizasyonda iyileştirme, temel bloklarda neler olduğunu hesaba katar.

Çoğu küresel optimizasyon tekniği, veri akışı analizine dayanır. Veri akışı analizinin sonuçlarının tümü aynı forma sahiptir: programdaki her talimat için, o talimatın her çalıştırılışında tutması gereken bazı özellikleri belirtirler.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.