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

  • MrOctopi

    MrOctopi

    6 Aralık 2010
  • New Challenger - Game Reviews

    New Challeng

    20 Temmuz 2006
  • Videojug

    Videojug

    25 EKİM 2006