-
21. Data: 2014-07-23 06:59:08
Temat: Re: szybki logarytm
Od: Borneq <b...@a...hidden.pl>
W dniu 2014-07-22 22:41, bartekltg pisze:
> Pętla kręci się nieco, ale wyraźnie wolniej, ale czy to oznacza,
> że koprocesor jest dokłądnie o tyle wolniejszy ciężko powiedzieć.
To dziwne, że koprocesor jest wolniejszy od emulacji koprocesora
-
22. Data: 2014-07-23 07:54:46
Temat: Re: szybki logarytm
Od: Wojciech Muła <w...@g...com>
On Tuesday, July 22, 2014 2:31:22 PM UTC+2, bartekltg wrote:
> Coś źle kompilowałem, czy logarytm jest lekko niedopieszczony?
> A może mój algorytm pomija coś potrzebnego do komfortowego
> uniwersalnego działania, co jest tak obciążające?
> Dodanie if (x<=0) return nan(""); praktycznie nic nie zmienia.
Nie sprawdzasz klasy liczby, tzn. czy to NaN lub +/-Inf.
Lecz poza tym funkcje biblioteczne pewnie korzystają z FPU,
na którym muszą używać dramatycznie wolnego rozkazu fly2x
(ok 100 cykli opóźnienia).
w.
-
23. Data: 2014-07-23 11:33:08
Temat: Re: szybki logarytm
Od: firr <p...@g...com>
W dniu wtorek, 22 lipca 2014 21:40:32 UTC+2 użytkownik feldmarszałek tusk napisał:
> trochę zboczyliśmy z tematu...
>
>
>
> pytanie jest takie, jak uzyskać równomierny rozkład punktów na osi x,
>
> gdy skala jest logarytmiczna...
>
>
>
> nie wiem czy Ktoś mnie zrozumie, ale może...
to jest podstawowka (moze liceum, nie pamietam):
jesli masz np liczby z zakresu 32bit czyli do okolo 2G, logarytm okresla jakby
dlugosc zapisu pozycyjnego
log 1 = 0
log 10 = 1
log 100 = 2
log 1000 = 3
log 1 000 000 000 = 9
nie wiem czy posiadasz liczby z zakresow 0-1
lub mniejsze od zera ale pewnie nie wiec mozna ich nie rozwazac *
masz wiec na osi x 10 kratek od 0 do 10
odpowiadajace liczbom 1-10 000 000 000
(mozna to przeskalowac - rozciagnac by bylo
dluzse ale na osi x oznaczalbym kreseczki 0,1,2,3,4,5,6,7,8,9,10;
dla danego punktu - bierzesz np 3.7 i liczysz
10 do potegi 3.7 (okolo 5011) czyli odpowiadajacy temu punktowi 3.7 jest x= 5011
jesli rysujesz wykres y=f(x) w tej skali to robisz cos takkiego
for(float x = 0; x < 10; x += 10./width)
{
y = f( pow(10,x) );
Setpixel(x*width/10., y*height/maxy);
}
jesli z kolei chcesz wstawic dane (np z tablicy) na wykres to robisz cos w stylu
SetPixel(log(x)*width/10, y*height/maxy)
* log ma ta ceche ze dla liczb z zakresu 0-1
podeje ujemne wartosci to jest troche sprzeczne z tym zastosowaniem tutaj - gdzie
bardziej by pasowalo by np liczby od 0-1 dawaly wartosci tez od 0 do 1 (odpowiadajace
koncepcji tej dlugosci zapisu) w tym sensie
chyba nalezaloby dobrac jakas lekko inna funkcje niz czysty logarytm ale nie wiem co
by to bylo
-
24. Data: 2014-07-23 12:18:23
Temat: Re: szybki logarytm
Od: firr <p...@g...com>
ps nie wiem czy powinienem o tym wspominac ;/
ale tak wogole mowiac to wypowiedzi tusk i broneq sa czasem mega lamerskie - z jednej
strony to nie jest cos z czego uwazam powinno sie
robic zarzut (jako ze kazdy byl poczatkujacym i
wlasciwie kazdy dalej jest poczatkujacym w
wiekszosci dziedzin), [a przynajmniej pisane jest na temat itp] ale z drugiej strony
to lamerstwo
troche uderza (w sumie tyczy mz to tez A/L.a
ktory ma sporo niekompetentnych wypowiedzi,
choc nie az tak]
-
25. Data: 2014-07-23 12:48:22
Temat: Re: szybki logarytm
Od: firr <p...@g...com>
W dniu środa, 23 lipca 2014 06:59:08 UTC+2 użytkownik Borneq napisał:
> W dniu 2014-07-22 22:41, bartekltg pisze:
>
> > Pętla kręci się nieco, ale wyraźnie wolniej, ale czy to oznacza,
>
> > że koprocesor jest dokłądnie o tyle wolniejszy ciężko powiedzieć.
>
>
>
> To dziwne, że koprocesor jest wolniejszy od emulacji koprocesora
nie jest to ani koprocesor ani emulacja ani nie jest to koniecznie wlniejsze ani nie
jest to koniecznie dziwne - calosciowo jest to naprawde glupawa wypowiedz - tak ze
proponuje sie zastanowic przed pisaniem tego typu glupawych wypowiedzi - bo bycie
poczatkujacym byciem poczatkujacym ale umyslowe 'lamerstwo' to cos innego
-
26. Data: 2014-07-23 16:20:07
Temat: Re: szybki logarytm
Od: bartekltg <b...@g...com>
On 23.07.2014 07:54, Wojciech Muła wrote:
> On Tuesday, July 22, 2014 2:31:22 PM UTC+2, bartekltg wrote:
>> Coś źle kompilowałem, czy logarytm jest lekko niedopieszczony?
>> A może mój algorytm pomija coś potrzebnego do komfortowego
>> uniwersalnego działania, co jest tak obciążające?
>> Dodanie if (x<=0) return nan(""); praktycznie nic nie zmienia.
>
> Nie sprawdzasz klasy liczby, tzn. czy to NaN lub +/-Inf.
Chyba to to. Dodając warunek isnormal(x) (i robiąc odpowiednią
obsługę pozostałych liczb, ale to ma mniejsze znaczenie, bo testuje
tylko na 'normalnych') wyniki są jak 24:28, niewiele, a jest bardo
wrażliwe na ułożenie kolejności drabinki ifów, więc pewnie ręczna
wersja działa ciut szybciej u mnie, ale niekoniecznie dla każdej
maszyny.
Wcześniej dodałem warunek na x>0 i to praktycznie nie zmieniło
wyniku, stąd nie spodziewałem się takiej różnicy przy
filtrach na pozostałe warunki.
> Lecz poza tym funkcje biblioteczne pewnie korzystają z FPU,
> na którym muszą używać dramatycznie wolnego rozkazu fly2x
> (ok 100 cykli opóźnienia).
Gdzieś w wątku podawałem firowi kod asm.
http://pastebin.com/BZpVhHGb
Nie używa fpu, też liczy jakąś funkcję wymierną. Ciąg działań
mnożenia i dodawania, na koniec jedno divds.
pozdrawiam
bartekltg
-
27. Data: 2014-07-23 17:10:07
Temat: Re: szybki logarytm
Od: firr <p...@g...com>
W dniu środa, 23 lipca 2014 16:20:07 UTC+2 użytkownik bartekltg napisał:
> On 23.07.2014 07:54, Wojciech Muła wrote:
>
> > On Tuesday, July 22, 2014 2:31:22 PM UTC+2, bartekltg wrote:
>
> >> Coś źle kompilowałem, czy logarytm jest lekko niedopieszczony?
>
> >> A może mój algorytm pomija coś potrzebnego do komfortowego
>
> >> uniwersalnego działania, co jest tak obciążające?
>
> >> Dodanie if (x<=0) return nan(""); praktycznie nic nie zmienia.
>
> >
>
> > Nie sprawdzasz klasy liczby, tzn. czy to NaN lub +/-Inf.
>
>
>
> Chyba to to. Dodając warunek isnormal(x) (i robiąc odpowiednią
>
> obsługę pozostałych liczb, ale to ma mniejsze znaczenie, bo testuje
>
> tylko na 'normalnych') wyniki są jak 24:28, niewiele, a jest bardo
>
> wrażliwe na ułożenie kolejności drabinki ifów, więc pewnie ręczna
>
> wersja działa ciut szybciej u mnie, ale niekoniecznie dla każdej
>
> maszyny.
>
>
>
> Wcześniej dodałem warunek na x>0 i to praktycznie nie zmieniło
>
> wyniku, stąd nie spodziewałem się takiej różnicy przy
>
> filtrach na pozostałe warunki.
>
>
>
>
>
> > Lecz poza tym funkcje biblioteczne pewnie korzystają z FPU,
>
> > na którym muszą używać dramatycznie wolnego rozkazu fly2x
>
> > (ok 100 cykli opóźnienia).
>
>
>
> Gdzieś w wątku podawałem firowi kod asm.
>
> http://pastebin.com/BZpVhHGb
>
> Nie używa fpu, też liczy jakąś funkcję wymierną. Ciąg działań
>
> mnożenia i dodawania, na koniec jedno divds.
>
>
>
nietrafione ify sa bardzo drogie (podobno okolo 30 razy drozsze niz trafione (jesli
to by mialobyc ze 30 cykli to by moglo podchodzic pod koszt porowywalny z dzieleniem
(ostatnio jak optymalizowalem rasteryzer to nie bralem tego pod uwage myslalem ze ify
sa tansze i rozbilem na spore drzewo z rzedu 30ma galeziami aby zaoszczedzic na
kopiowaniach ramu a widze ze chyba to byl blad ),
pozatym skoki sa mniej ale tez drogie (pare cykli) dlatego takie procedury podobno
nalezy przepisywac tak by bylo statystycznie jak najmniej nietrafionych ifow i by te
trafione raczej kontynuowaly liniowo wykonanie a nie skakaly branchem gdzies w bok,
(dla odmiany podobno wlasnie taki trafiony if
bez skoku jest szybki)
-
28. Data: 2014-07-23 17:44:15
Temat: Re: szybki logarytm
Od: bartekltg <b...@g...com>
On 23.07.2014 17:10, firr wrote:
> pozatym skoki sa mniej ale tez drogie (pare cykli) dlatego takie
> procedury podobno nalezy przepisywac tak by bylo statystycznie jak
> najmniej nietrafionych ifow i by te trafione raczej kontynuowaly
> liniowo wykonanie a nie skakaly branchem gdzies w bok,
W tamtym przypadku, czyli jednej preferowanej ścieżki,
nieźle sprawdza się zestaw
-fprofile-generate
-fprofile-use
pzdr
bartekltg
-
29. Data: 2014-07-23 18:35:02
Temat: Re: szybki logarytm
Od: firr <p...@g...com>
W dniu środa, 23 lipca 2014 17:44:15 UTC+2 użytkownik bartekltg napisał:
> On 23.07.2014 17:10, firr wrote:
>
>
>
> > pozatym skoki sa mniej ale tez drogie (pare cykli) dlatego takie
>
> > procedury podobno nalezy przepisywac tak by bylo statystycznie jak
>
> > najmniej nietrafionych ifow i by te trafione raczej kontynuowaly
>
> > liniowo wykonanie a nie skakaly branchem gdzies w bok,
>
>
>
> W tamtym przypadku, czyli jednej preferowanej ścieżki,
>
> nieźle sprawdza się zestaw
>
>
>
> -fprofile-generate
>
> -fprofile-use
>
>
>
no niewykluczone, mogloby pomoc
narazie nie uzywalem tego, moze kiedys indziej sprawdze -
wystarczy tylko skompilowac z tymi flagami ruchomic i jeszcze raz skompilowac i
wszystko?
Na razie nie przygladalem sie nawet swoim kodam pod katem tych 'szybkich sciezek'
chyba zreszta z poziomu c nie da sie tego w pelni zrobic
-
30. Data: 2014-07-24 20:54:31
Temat: Re: szybki logarytm
Od: feldmarszałek tusk <N...@g...pl>
dzięki, coś takiego obijało mi się po głowie, ale nie mogło się
wykrystalizować ;o)
a czy Ktoś tu zna jakiś algorytm podnoszenia 10 do potęgi?