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

  • Bach Vlogs

    Bach Vlogs

    18 HAZİRAN 2011
  • DroidModderX ROOT Master

    DroidModderX

    14 ŞUBAT 2011
  • rtisticsdev

    rtisticsdev

    31 Mayıs 2012