Article View: pl.comp.programming
Article #205096Re: Podpis cyfrowy większej ilości podmiotów
From: M.M.
Date: Thu, 18 Apr 2013 09:04
Date: Thu, 18 Apr 2013 09:04
93 lines
4997 bytes
4997 bytes
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/83731BB65DA783F6EA92AB7576B7B.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
Technical Details
Message-ID:
<5929d4d4-0b3a-44ad-a01c-1a83056fd347@googlegroups.com>Path:
mbox-mo1.pugleaf.net!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!hg5ni16271wib.1!nntp.google.com!gp5no228248qab.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mailReferences:
<kkdqot$5rl$1@node2.news.atman.pl> <kkdtr5$9n9$1@node1.news.atman.pl> <2795af88-99c6-4f35-8a9d-22bda8af2925@googlegroups.com> <kkec03$n4h$1@node2.news.atman.pl> <a9253e59-21f5-43b5-853a-c60cb43c1f15@googlegroups.com> <kkfd89$o9b$1@news.task.gda.pl> <0fff07bc-e341-49a0-810c-333536e2901a@googlegroups.com> <kkh42k$81t$1@news.task.gda.pl> <b177dfc7-88f3-4cd7-9075-2acdd76f9662@googlegroups.com> <kkhr56$a62$1@news.task.gda.pl> <30021d10-a471-4cae-8f17-61eb36cb775e@googlegroups.com> <kkkjpe$b54$1@news.task.gda.pl> <8b53662c-8c31-4fc3-b82b-8173d9cf4f6f@googlegroups.com> <47d7734e-680b-4e13-995e-c0a2407217c3@googlegroups.com> <cdced490-b579-41ee-a123-afb12010cc12@googlegroups.com> <kkmvfc$hu3$2@news.task.gda.pl> <d936ef81-4b63-4dcb-8771-cc2a1faab4e1@googlegroups.com> <d4359f15-51e4-438a-9057-b46d93bfc70c@googlegroups.com> <9f8703e3-4731-4da6-9e7a-0bf564f5896e@googlegroups.com> <18cc0918-5abe-49a6-bb42-afdaa0700533@googlegroups.com>Show Full Headers
Complete Article Headers
X-Received: by 10.180.92.202 with SMTP id co10mr6967644wib.1.1366275858924; 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: mbox-mo1.pugleaf.net!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!hg5ni16271wib.1!nntp.google.com!gp5no228248qab.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: pl.comp.programming Date: Thu, 18 Apr 2013 02:04:18 -0700 (PDT) In-Reply-To: <18cc0918-5abe-49a6-bb42-afdaa0700533@googlegroups.com> Complaints-To: groups-abuse@google.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> <2795af88-99c6-4f35-8a9d-22bda8af2925@googlegroups.com> <kkec03$n4h$1@node2.news.atman.pl> <a9253e59-21f5-43b5-853a-c60cb43c1f15@googlegroups.com> <kkfd89$o9b$1@news.task.gda.pl> <0fff07bc-e341-49a0-810c-333536e2901a@googlegroups.com> <kkh42k$81t$1@news.task.gda.pl> <b177dfc7-88f3-4cd7-9075-2acdd76f9662@googlegroups.com> <kkhr56$a62$1@news.task.gda.pl> <30021d10-a471-4cae-8f17-61eb36cb775e@googlegroups.com> <kkkjpe$b54$1@news.task.gda.pl> <8b53662c-8c31-4fc3-b82b-8173d9cf4f6f@googlegroups.com> <47d7734e-680b-4e13-995e-c0a2407217c3@googlegroups.com> <cdced490-b579-41ee-a123-afb12010cc12@googlegroups.com> <kkmvfc$hu3$2@news.task.gda.pl> <d936ef81-4b63-4dcb-8771-cc2a1faab4e1@googlegroups.com> <d4359f15-51e4-438a-9057-b46d93bfc70c@googlegroups.com> <9f8703e3-4731-4da6-9e7a-0bf564f5896e@googlegroups.com> <18cc0918-5abe-49a6-bb42-afdaa0700533@googlegroups.com> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <5929d4d4-0b3a-44ad-a01c-1a83056fd347@googlegroups.com> Subject: Re: Podpis cyfrowy większej ilości podmiotów From: "M.M." <mmarszik@gmail.com> Injection-Date: Thu, 18 Apr 2013 09:04:18 +0000 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit