İndüksiyon değişkeni - Induction variable

İçinde bilgisayar Bilimi, bir indüksiyon değişkeni alan bir değişkendir arttı veya bir döngünün her yinelemesinde sabit bir miktar azaltılır veya doğrusal fonksiyon başka bir indüksiyon değişkeninin.[1]

Örneğin, aşağıdaki döngüde, ben ve j indüksiyon değişkenleridir:

için (ben = 0; ben < 10; ++ben) {    j = 17 * ben;}

Mukavemet azaltma uygulaması

Ortak derleyici optimizasyonu indüksiyon değişkenlerinin varlığını tanımak ve onları daha basit hesaplamalarla değiştirmektir; örneğin, yukarıdaki kod, bir sabitin eklenmesinin çarpmadan daha ucuz olacağı varsayımıyla derleyici tarafından aşağıdaki şekilde yeniden yazılabilir.

j = -17;için (ben = 0; ben < 10; ++ben) {    j = j + 17;}

Bu optimizasyon özel bir durumdur güç azalması.

Kayıt basıncını azaltmak için uygulama

Bazı durumlarda, bir tümevarım değişkenini koddan tamamen çıkarmak için bu optimizasyonu tersine çevirmek mümkündür. Örneğin:

dış int toplam;int foo(int n) {    int ben, j;    j = 5;    için (ben = 0; ben < n; ++ben) {        j += 2;        toplam += j;    }    dönüş toplam;}

Bu fonksiyonun döngüsünün iki tümevarım değişkeni vardır: ben ve j. Biri diğerinin doğrusal bir işlevi olarak yeniden yazılabilir; bu nedenle, derleyici bu kodu yazılmış gibi optimize edebilir

dış int toplam;int foo(int n) {    int ben;    için (ben = 0; ben < n; ++ben) {        toplam += 5 + 2 * (ben + 1);    }    dönüş toplam;}

İndüksiyon değişken ikamesi

İndüksiyon değişken ikamesi Çevreleyen döngülerin indislerinin fonksiyonları olarak ifade edilebilen değişkenleri tanımak ve bunları döngü indekslerini içeren ifadelerle değiştirmek için bir derleyici dönüşümdür.

Bu dönüşüm, değişkenler ve döngü indeksleri arasındaki ilişkiyi açık hale getirir, bu da diğer derleyici analizlerine yardımcı olur. bağımlılık analizi.

Misal:

Giriş kodu:

int c, ben;c = 10;için (ben = 0; ben < 10; ben++) {    c = c + 5; // c, her döngü yinelemesi için 5 artar}

Çıkış kodu

int c, ben;c = 10;için (ben = 0; ben < 10; ben++) {    c = 10 + 5 * (ben + 1);  // c açıkça döngü dizininin bir işlevi olarak ifade edilir}

Doğrusal olmayan indüksiyon değişkenleri

Aynı optimizasyonlar, döngü sayacının zorunlu olarak doğrusal fonksiyonları olmayan tümevarım değişkenlerine de uygulanabilir; örneğin döngü

j = 1;için (ben = 0; ben < 10; ++ben) {    j = j << 1;}

dönüştürülebilir

için (ben = 0; ben < 10; ++ben) {    j = 1 << (ben+1);}

Ayrıca bakınız

Referanslar

  1. ^ Steven Muchnick; Muchnick and Associates (15 Ağustos 1997). Gelişmiş Derleyici Tasarım Uygulaması. Morgan Kaufmann. ISBN  978-1-55860-320-2. indüksiyon değişkeni.

daha fazla okuma