🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.programming
Article #205096

Re: Podpis cyfrowy większej ilości podmiotów

#205096
From: M.M.
Date: Thu, 18 Apr 2013 09:04
93 lines
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-mail
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>

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