SORU
21 HAZİRAN 2011, Salı


Neden't GCC*****a (**)*(**) optimize değil mi?

Bilimsel bir uygulama üzerinde bazı sayısal optimizasyon yapıyorum. Ben fark bir şey olduğunu GCC will optimize çağrı pow(a,2) derleme içine a*a, ancak arama pow(a,6) değil optimize edilmiş ve aslında çağrı kütüphane fonksiyonu pow, hangi büyük ölçüde yavaşlatır performans. (Buna karşılık, Intel C Compiler çalıştırılabilir icc,*.* 7) kütüphane aramayı ortadan kaldıracaktır

Merak ediyorum ne zaman a*a*a*a*a*a pow(a,6) GCC 4.5.1 ve seçenekleri kullanarak yerine "-O3 -lm -funroll-loops -msse4", 5 mulsd talimatları kullanır:

movapd  %xmm14, %xmm13
mulsd   %xmm14, %xmm13
mulsd   %xmm14, %xmm13
mulsd   %xmm14, %xmm13
mulsd   %xmm14, %xmm13
mulsd   %xmm14, %xmm13

eğer (a*a*a)*(a*a*a), yazarsam süre üretecek

movapd  %xmm14, %xmm13
mulsd   %xmm14, %xmm13
mulsd   %xmm14, %xmm13
mulsd   %xmm13, %xmm13

3 ile çarpın talimatları sayısını azaltır. icc benzer davranışlar vardır.

Neden bu Derleyiciler optimizasyon hile tanımaz?

CEVAP
21 HAZİRAN 2011, Salı


Floating Point Math is not Associative çünkü. İşaret çarpma kayan işlenen grup şekilde cevap sayısal doğruluğu üzerinde bir etkisi var.

Sonuç olarak, çoğu derleyici cevap aynı kalacak emin olabilir sürece yeniden kayan nokta hesaplamaları hakkında çok muhafazakar, ya da onları söylemezsen sayısal doğruluk umurunda değil. Örneğin: gcc kayan nokta işlemleri ya da hızlı karşı hassasiyeti daha da saldırgan bir bileşim sağlar -ffast-math seçeneği bile iyileştirmek için izin verir gcc the -fassociative-math option.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ciaran Blumenfeld

    Ciaran Blume

    20 NİSAN 2009
  • Microsoft Help & Training Videos

    Microsoft He

    31 Mart 2009
  • Tracy Hairston

    Tracy Hairst

    22 Mayıs 2009