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

  • After Effects Tutorials w/ Mikey

    After Effect

    24 HAZİRAN 2009
  • inovationgmbh

    inovationgmb

    28 EYLÜL 2010
  • jeffisthecoolguy

    jeffisthecoo

    17 HAZİRAN 2013