eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingPodpis cyfrowy większej ilości podmiotówRe: Podpis cyfrowy większej ilości podmiotów
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!news.task.gda.pl!not-for-mail
    From: Edek <e...@g...com>
    Newsgroups: pl.comp.programming
    Subject: Re: Podpis cyfrowy większej ilości podmiotów
    Date: Wed, 17 Apr 2013 23:33:46 +0000 (UTC)
    Organization: CI TASK http://www.task.gda.pl/
    Lines: 78
    Message-ID: <kknbgp$8t3$1@news.task.gda.pl>
    References: <kkdqot$5rl$1@node2.news.atman.pl> <kkh42k$81t$1@news.task.gda.pl>
    <b...@g...com>
    <kkhr56$a62$1@news.task.gda.pl>
    <3...@g...com>
    <kkkjpe$b54$1@news.task.gda.pl>
    <8...@g...com>
    <4...@g...com>
    <c...@g...com>
    <6...@g...com>
    <1...@g...com>
    <a...@g...com>
    <0...@g...com>
    <kkmb61$qln$2@news.task.gda.pl> <kkmbce$qln$3@news.task.gda.pl>
    <f...@g...com>
    <kkmh2f$qln$5@news.task.gda.pl>
    <9...@g...com>
    <f...@g...com>
    <kkmvov$hu3$3@news.task.gda.pl>
    <c...@g...com>
    NNTP-Posting-Host: 178-36-247-220.adsl.inetia.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: 8bit
    X-Trace: news.task.gda.pl 1366241626 9123 178.36.247.220 (17 Apr 2013 23:33:46 GMT)
    X-Complaints-To: a...@n...task.gda.pl
    NNTP-Posting-Date: Wed, 17 Apr 2013 23:33:46 +0000 (UTC)
    User-Agent: Pan/0.139 (Sexual Chocolate; GIT bf56508 git://git.gnome.org/pan2)
    Xref: news-archive.icm.edu.pl pl.comp.programming:202635
    [ ukryj 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: