eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingPodpis cyfrowy większej ilości podmiotówRe: Podpis cyfrowy większej ilości podmiotów
  • Data: 2013-04-18 01:33:46
    Temat: Re: Podpis cyfrowy większej ilości podmiotów
    Od: Edek <e...@g...com> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Dnia Wed, 17 Apr 2013 14:19:17 -0700 po głębokim namyśle firr kenobi
    rzekł:

    > 1.4 mld = 14 GFloatow (na 4 sekundy) = 3.5 GFloata na sekunde

    Ja widzę 1.4e9 na 2.5s czyli 560 M-iter/s. Licząc tak jak twój kod
    wychodzi 8GFlopów z grubsza.

    > zgadza sie - wzrosło o .5 GFloata z jakiegos powodu, moze dluzsze
    > itereacje kreca sie troche szybciej albo wyrzucenie setpixeli troche
    > przyspieszylo reszte

    Zgadza się tyle: mówisz że masz procek z 2 GFlop i wyciskasz 3.5GFlop.
    Jury nalicza dwa kółka wokół własnej osi przed metą za przekroczenie
    II prędkości sonicznej...

    > co do tego kodu
    >
    > vmulsd %xmm4, %xmm4, %xmm7
    > // re * re -> xmm7
    > vmovapd %xmm4, %xmm6 vmulsd %xmm3, %xmm3, %xmm5
    > //im*im -> xmm5
    > vaddsd %xmm5, %xmm7, %xmm4
    > // re*re+im*im -> xmm4
    > vucomisd %xmm0, %xmm4
    > // re*re+im*im > 4 ?
    > ja .L4
    >
    > // itd
    >
    > .L6:
    > addl $1, %eax vsubsd %xmm5, %xmm7, %xmm4
    > vcvtsi2sd %eax, %xmm5, %xmm5
    > vaddsd %xmm6, %xmm6, %xmm6 vaddsd %xmm1, %xmm4, %xmm4
    > vmulsd %xmm3, %xmm6, %xmm3 vaddsd %xmm2, %xmm3, %xmm3 vucomisd
    > %xmm5, %xmm0
    > ja .L7
    >
    > to jest nowoczesny kod kod na avx ale skalarny na doublach, reczne
    > przepisanie tego powinno przyspieszyc pewnie prawie 8 razy

    Mówisz o naiwnej wersji, tej pierwszej, 4.0s. W drugiej nie widzę
    tych instrukcji.

    W tej druga sprawa jest bardziej złożona:

    te pętle mają dużo zależności. Gdy się zmieni BY_N na dużo (64 powiedzmy)
    nagle obliczenia są zwektoryzowane, ale wolniejsze. Dla BY_N 12
    (jak w źródle) okazuje się, że wystarcza rejestrów na to, żeby nie
    wektoryzować i z jakiegoś powodu gcc nie wektoryzuje, i podejrzewam,
    że słusznie. Lepiej mieć małe bloki po wiele operacji niezależnych od
    siebie niż w jednym miejscu kod z wieloma zależnościami, bo tak
    się ten kod wektoryzuje (przez te if-y, rezultaty...).

    W dzisiejszych procesorach rejestry są na tyle niezależne, że wystarcza
    jednostek obliczeniowych na pokrycie równoległe wielu operacji na
    wielu nominalnych rejestrach i - może to zużywa więcej prądu, ale -
    prawdopodobnie wykonuje się podobnie do wektoryzacji, a w tej pętli
    nie liczy się przepustowość ale "latency" instrukcji, więc im mniej
    nagromadzenia zależnych przebiegów tym lepiej. Co za różnica,
    czy zrobi się 12 rejestrów po 4 double, czy 12 rejestrów i przeplot
    i stałe na szczycie stosu i operacje po jednym double. I tak
    po każdych obliczeniach trzeba zrobić if-a lub jakieś wektoryzowalne
    adc (żeby zmienić rezultat) i być może gcc tego nie umie a ręcznie
    się da.

    Jak mówisz, że to da się przyspieszyć 8 razy: show me. Na pewno
    pisząc assemblera da się to zrobić nie-wolniej i pewnie szybciej,
    ale coś wątpię w te 8 razy.

    PS. I dlaczego dkn muszę szukać tego wątku pod nazwą
    "Podpis cyfrowy...". Nie dało się zainteresować kogokolwiek w
    oryginalnym wątku?

    PS2. Wciągnął mnie chwilowo temat ;) NA stronie Intela jest
    implementacja w AVX
    --
    Edek

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: