-
Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
From: " kenobi" <f...@W...gazeta.pl>
Newsgroups: pl.comp.programming
Subject: Re: normalize na fpu
Date: Mon, 13 Aug 2012 16:08:31 +0000 (UTC)
Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
Lines: 117
Message-ID: <k0b8pv$k0f$1@inews.gazeta.pl>
References: <k07u5f$930$1@inews.gazeta.pl>
<a...@k...googlegroups.com>
NNTP-Posting-Host: localhost
Content-Type: text/plain; charset=ISO-8859-2
Content-Transfer-Encoding: 8bit
X-Trace: inews.gazeta.pl 1344874111 20495 172.20.26.234 (13 Aug 2012 16:08:31 GMT)
X-Complaints-To: u...@a...pl
NNTP-Posting-Date: Mon, 13 Aug 2012 16:08:31 +0000 (UTC)
X-User: fir
X-Forwarded-For: 31.61.129.240
X-Remote-IP: localhost
Xref: news-archive.icm.edu.pl pl.comp.programming:199265
[ ukryj nagłówki ]bartekltg <b...@g...com> napisał(a):
> On 12 Sie, 11:48, " kenobi" <f...@g...pl> wrote:
>
> > 90 cykli - i tak szybciej niz to co wyprodukowal moj
> > kompiletor (150) =A0[dokladnie nie wiem nawet czemu
> > moze przez to ze ta funkcja jest okrojona tj nie
> > sprawdza czy nie ma dzielenia przez 0 ;-)
>
> Sprzed kt=F3rej wojny to kompilator?
> ******
> void norm(double &a, double &b, double &c)
> {
> double dl =3D sqrt(a*a+b*b+c*c);
> a/=3Ddl;
> b/=3Ddl;
> c/=3Ddl;
> }
> ******
> g++ bla.cpp -O2 -S --verbose-asm -g
> as -alhnd bla.s > bla.lst
> *****
> 10:bla.cpp **** double dl =3D sqrt(a*a+b*b+c*c);
> 61 .loc 1 10 0
> 62 0004 F20F101F movsd (%rdi), %xmm3 # *a_1(D),
> *a_1(D)
> 63 0008 F20F1016 movsd (%rsi), %xmm2 # *b_5(D),
> tmp96
> 64 000c 660F28C3 movapd %xmm3, %xmm0 # *a_1(D),
> tmp82
> 65 0010 F20F100A movsd (%rdx), %xmm1 # *c_10(D),
> tmp94
> 66 0014 F20F59D2 mulsd %xmm2, %xmm2 # tmp96, tmp96
> 67 0018 F20F59C3 mulsd %xmm3, %xmm0 # *a_1(D),
> tmp82
> 68 001c F20F59C9 mulsd %xmm1, %xmm1 # tmp94, tmp94
> 69 0020 F20F58C2 addsd %xmm2, %xmm0 # tmp96, tmp82
> 70 0024 F20F58C1 addsd %xmm1, %xmm0 # tmp94, tmp82
> 71 0028 F20F51C8 sqrtsd %xmm0, %xmm1 # tmp82, tmp77
> 72 002c 660F2EC9 ucomisd %xmm1, %xmm1 # tmp77, tmp77
> 73 0030 7A25 jp .L6 #,
> 74 .LVL1:
> 75 .L2:
> 11:bla.cpp **** a/=3Ddl;
> 76 .loc 1 11 0
> 77 0032 F20F5ED9 divsd %xmm1, %xmm3 # tmp77, tmp88
> 78 0036 F20F111F movsd %xmm3, (%rdi) # tmp88,
> *a_1(D)
> 12:bla.cpp **** b/=3Ddl;
> 79 .loc 1 12 0
> 80 003a F20F1006 movsd (%rsi), %xmm0 # *b_5(D),
> tmp90
> 81 003e F20F5EC1 divsd %xmm1, %xmm0 # tmp77, tmp90
> 82 0042 F20F1106 movsd %xmm0, (%rsi) # tmp90,
> *b_5(D)
> 13:bla.cpp **** c/=3Ddl;
> 83 .loc 1 13 0
> 84 0046 F20F1002 movsd (%rdx), %xmm0 # *c_10(D),
> tmp92
> 85 004a F20F5EC1 divsd %xmm1, %xmm0 # tmp77, tmp92
> 86 004e F20F1102 movsd %xmm0, (%rdx) # tmp92,
> *c_10(D)
> 87 .LBE2:
> 14:bla.cpp ****
> 15:bla.cpp **** }
>
>
> Na oko wr=EAcz szybciej:)
>
>
> > =A0chcialbym to poprawic, czy ktos zna jakies zasady
> > 'polepszania' takich funkcji ? i moglby zaproponowac
> > poprawki?
>
> 1. gcc/visual studio.
> 2. Jaka=B6 wyspecjalizowana biblioteka, je=B6li tych oblicze=F1 wi=EAcej.
>
> 3. Je=B6li nie musisz mie=E6 dok=B3adno=B6ci, to spr=F3buj to,
> http://en.wikipedia.org/wiki/Fast_inverse_square_roo
t#Overview_of_the_code
> 100 lat temu zastosowanie kilku iteracji Newtona by=B3o szybsze ni=BF
> sqrt z koprocesora, ale dzi=B6 nie musi to by=E6 prawd=B1.
>
w danym momencie zalezy mi na treningu asma a nie wynikach
kompilacji, do sse jeszcze nie dojechalem
- bardzo zle napisana procedura, nie ma sprawdzenia czy nie
ma dzielenie przez 0 (co prawda takie podejscie jest
wydajniejsze bo np w moim raytracerku zerowe wektory sie
akurat nie trafiały) i nie pisz4e sie trzech dzielen tylko
cos w stylu
double inv_d = 1.0/sqrt(a*a+b*b+c*c);
a*=inv_d;
b*=inv_d;
c*=inv_d;
nie wiem jak na najnowszysch prockach ale na
moim jedno dzielenie to kilka/kilkanascie mnozeni
i dodawan, czyli to jest blisko 3 razy szybszew,
gcc jak widac tego zreszta nie zoptymalizowal i wstawil
te trzy dzielenia, w sumie fajnie popatrzec na
wynik jego produkcji - popatrze jeszcze na to - imo
jakos specjalnie to sie chyba nie spisal, normalny
kod spod sztancy tak jak i w bcc32
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Następne wpisy z tego wątku
- 13.08.12 18:46 bartekltg
- 13.08.12 19:01 kenobi
- 13.08.12 19:30 bartekltg
- 13.08.12 20:07 Michoo
- 13.08.12 20:24 kenobi
- 13.08.12 22:21 bartekltg
- 13.08.12 22:54 kenobi
Najnowsze wątki z tej grupy
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
Najnowsze wątki
- 2024-12-02 Usiłowanie zabójstwa
- 2024-12-01 Rambo 2024. Co z radio-stopem
- 2024-12-01 Pijani kierowcy
- 2024-12-01 "Chciałem zamówić kurs tym"
- 2024-11-30 Windykatorzy ścigają spadkobierców z mandat nieboszczyka za przekroczenie prędkości???
- 2024-11-30 Łódź => Technical Artist <=
- 2024-11-30 Lublin => Inżynier Serwisu Sprzętu Medycznego <=
- 2024-11-30 Warszawa => Microsoft Dynamics 365 Business Central Developer <=
- 2024-11-30 Bieruń => Team Lead / Tribe Lead FrontEnd <=
- 2024-11-30 Zielona Góra => Senior PHP Symfony Developer <=
- 2024-11-30 Gdańsk => Specjalista ds. Sprzedaży <=
- 2024-11-30 Lublin => Spedytor międzynarodowy <=
- 2024-11-30 Warszawa => Mid IT Recruiter <=
- 2024-11-30 Warszawa => Fullstack Developer <=
- 2024-11-30 Żerniki => Dyspozytor Międzynarodowy <=