eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingPodpis cyfrowy większej ilości podmiotówRe: Podpis cyfrowy większej ilości podmiotów
  • X-Received: by 10.49.109.41 with SMTP id hp9mr989216qeb.35.1366275858765; Thu, 18 Apr
    2013 02:04:18 -0700 (PDT)
    X-Received: by 10.49.109.41 with SMTP id hp9mr989216qeb.35.1366275858765; Thu, 18 Apr
    2013 02:04:18 -0700 (PDT)
    Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!goblin1!goblin.stu.neva.ru!19no101343601wie.1!news-out.google.com!hg5n
    i16271wib.1!nntp.google.com!gp5no228248qab.0!postnews.google.com!glegroupsg2000
    goo.googlegroups.com!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Thu, 18 Apr 2013 02:04:18 -0700 (PDT)
    In-Reply-To: <1...@g...com>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=213.195.164.27;
    posting-account=xjvq9QoAAAATMPC2X3btlHd_LkaJo_rj
    NNTP-Posting-Host: 213.195.164.27
    References: <kkdqot$5rl$1@node2.news.atman.pl> <kkdtr5$9n9$1@node1.news.atman.pl>
    <2...@g...com>
    <kkec03$n4h$1@node2.news.atman.pl>
    <a...@g...com>
    <kkfd89$o9b$1@news.task.gda.pl>
    <0...@g...com>
    <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>
    <kkmvfc$hu3$2@news.task.gda.pl>
    <d...@g...com>
    <d...@g...com>
    <9...@g...com>
    <1...@g...com>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <5...@g...com>
    Subject: Re: Podpis cyfrowy większej ilości podmiotów
    From: "M.M." <m...@g...com>
    Injection-Date: Thu, 18 Apr 2013 09:04:18 +0000
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: quoted-printable
    Xref: news-archive.icm.edu.pl pl.comp.programming:202642
    [ ukryj nagłówki ]

    Zmieniłem zarządzanie wątkami, gdy się używa do wątków OpenMP
    ma się praktycznie bez wysiłku kilka użytecznych opcji. Tak
    więc po zastosowaniu dynamicznego przydziału zadań do wątków z
    rozmiarem chunk=1 czas spadł do 14-15s.

    Tu efekt:
    https://thumbs.rapidshare.com/thumbs/1024/D0F/83731B
    B65DA783F6EA92AB7576B7B.jpg

    A tu kod rysujący/obliczający:
    http://pastebin.com/rvsBJpir


    On Thursday, April 18, 2013 10:42:37 AM UTC+2, firr kenobi wrote:
    > jesli zrezygnowac z testu z kwadratem
    > to tutaj ten kernel z trzema mnozeniami
    > mozna zamianic na wersje tylko z dowma
    > mnozeniami
    > for(n=0; n<=max_iter; n++)
    > {
    > reim2 = (re + re) * im;
    > re = (re - im) * (re + im) + cRe;
    > im = reim2 + cIm;
    > // if( fabs(re) > 2.0 ) break;
    > // if( fabs(im) > 2.0 ) break;
    > if( re > 2.0 || re < -2.0
    > && im > 2.0 || im < -2.0 ) break;
    > }
    > to zauwazylem ze szkoly a*a - b*b = (a+b)*(a-b) u mnie w wersji c to akurat
    > przyspiesza

    U mnie czas wykonania poniższej wersji wzrósł z 14.22s do 14.61s:

    static unsigned int computeColor( const double _x, const double _y, const unsigned
    int inf ) {
    double x=0, y=0;
    unsigned int i;
    for( i=0 ; i<inf ; i++ ) {
    const double tmp = (x+x)*y;
    x = (x-y)*(x+y)+_x;
    y = tmp + _y;
    if( std::fabs(y) > 2.0 || std::fabs(tmp) > 2.0 ) break;
    }
    if( i==inf )
    return 0;
    return i * 255 / (inf-1);
    }



    Kolejna wersja też minimalnie dłużej 14.55s:

    static unsigned int computeColor( const double _x, const double _y, const unsigned
    int inf ) { double x=0, y=0;
    unsigned int i;
    for( i=0 ; i<inf ; i++ ) {
    const double tmp = x*x - y*y + _x;
    y = 2.0 * x * y + _y;
    if( tmp < -2 || tmp > +2 || y < -2 || y > +2 ) break;
    x = tmp;
    }
    if( i==inf )
    return 0;
    return i * 255 / (inf-1);
    }


    > nie wiadomo jednak czy wersja z dwoma
    > mul i czterema cmp (statystycznie szczesliwie mniej ) bylaby szybsza
    > niz kernel z 3 mul i 1 cmp
    > nalezaloby sprawdzic ale to musialbym
    > znowu pogrzebac w asmie

    Ja raczej nie napiszę w ASM, większość dawno temu zapomniałem :) Czy
    mógłbyś podrzuć mi wersję tej procedury w asmie, tak żebym mógł ją
    skompilować GCC64 bity? Czyli musiałby to być jakiś asembler osadzony.

    Na razie u mnie najszybciej działa ta wersja:

    static unsigned int computeColor( const double _x, const double _y, const unsigned
    int inf ) {
    double x=0, y=0;
    unsigned int i;
    for( i=0 ; i<inf ; i++ ) {
    const double tmp = x*x - y*y + _x;
    y = 2.0 * x * y + _y;
    if( std::fabs(y) > 2.0 || std::fabs(tmp) > 2.0 ) break;
    x = tmp;
    }
    if( i==inf )
    return 0;
    return i * 255 / (inf-1);
    }

    Z 61s udało się zejść do 14s, ale głównie przez zastosowanie OpenMP.

    Pozdrawiam



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: