SORU
16 EKİM 2012, Salı


Neden yok't üstel bir artış içine derleyici optimize etmek için bir kayan nokta *2?

Genellikle yürütülebilir vardiya halinde gcc dönüştürme çarpımları fark ettim. Benzer bir çarpma ne zaman int float. Örneğin, 2 * f, sadece 1, bazı devir tasarruf artırmak f üs olabilir. Bu derleyici, bir istekleri belki de onları bu yüzden (-ffast-math) gibi), genel olarak, bunu yapmak?

Derleyiciler genellikle yapacak kadar zeki bu, ya da bunu yapmak için gereken scalb*() ldexp()/frexp() fonksiyon aileyi kendim kullanıyor muyum?

CEVAP
16 EKİM 2012, Salı


Örnek, 2 * f, sadece 1 f üs artış olabilir, bazı devir tasarruf.

Bu kesinlikle doğru değil.

İlk sıfır, sonsuzluk, Nan, ve denormals gibi çok köşeli durumlar var. Sonra performans sorunu var.

Yanlış anlama üs artan bir çarpma yaparak daha hızlı değildir.

Eğer donanım talimatları bakarsanız, artırmak için doğrudan bir yol üs yok. Bunun yerine yapmanız gereken budur:

  1. Bit tamsayı dönüştürmek.
  2. Artım üs.
  3. Ina geri kayan nokta dönüştürmek.

Genellikle tamsayı ve kayan nokta yürütme birimleri arasında veri taşımak için büyük gecikme için bir araç var. Yani sonunda, "optimizasyon" basit bir kayan nokta çarpma. çok daha kötü olur bu

Derleyici yapmaz neden bu kadar nedeni bu "iyileştirme" değil, çünkü daha hızlı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • NLthomas21

    NLthomas21

    20 Mayıs 2008
  • SerienTrailerMP

    SerienTraile

    7 HAZİRAN 2012
  • FusioNGamiing

    FusioNGamiin

    10 Temmuz 2007

İLGİLİ SORU / CEVAPLAR