• Ingen resultater fundet

 7 8%  %9  7 8%  %9  !  % !  %  %  )   ,   " -%    %          ' (% %   &  2  # $  $  "%  !  " 

N/A
N/A
Info
Hent
Protected

Academic year: 2022

Del " 7 8%  %9  7 8%  %9  !  % !  %  %  )   ,   " -%    %          ' (% %   &  2  # $  $  "%  !  " "

Copied!
16
0
0

Indlæser.... (se fuldtekst nu)

Hele teksten

(1)

!"

#$$"%

&

'(%%

)

! %

(2)

*

!+"

,"-

% %

!+"

,%(((/%0

"%1$$ %-

2

" (%3%%%

(4156

%

" (%%

%((

78%%9

(3)

.

!+"

:%::(% %" (%

:::(% " (%

::;:(% ;<" (%

::(: (4

:::% ;<" %%%

:: 7=

:%:( $(((>%

::( 7 (((>%

8%9

:%:%( $%(%

::%( 7 %(%

8%9

::= %=7

::=7 " %("=77%

!+"

&%-

void omp_set_num_threads(int num_threads) int omp_get_num_threads(void)

int omp_get_max_threads(void) int omp_get_thread_num(void) int omp_get_num_procs(void) int omp_in_parallel(void)

void omp_set_dynamic(int dynamic_threads) int omp_get_dynamic(void)

void omp_set_nested(int nested) int omp_get_nested(void)

double omp_get_wtime(void)

double omp_get_wtick(void)

(4)

.?

?<!+"

:%:%( %%(

::%( %(

::(: ;<" $"(%

:%:;:$:$% %" %($%

::;:$:$% " %($%

::$ %%$

::%:(: %(( % (%/($

:::%@ %@%/($

::$:$ %" %1

$%(%

!+"

A% :::(%89$%

::;:(%89-

// get the number of threads

threads = omp_get_max_threads();

// get the number of threads

threads = omp_get_num_threads();

#pragma omp parallel {

#pragma omp master

{ threads = omp_get_num_threads(); } } // end parallel

%$ :BA:,!#04)

%$ (%

%%(

(5)

.C

!+"

%-

%%% =7%

789%(A

(%D

double ts, te;

ts = omp_get_wtime();

do_work();

te = omp_get_wtime() - ts;

printf(“Elapsed time: %lf\n”, te);

#$E"%

$#$E"%

(6)

..

#$E"%

:BA:,!#04)F

%%;< (%8( -9

:)#4A+#F%(G17H

%(-G%I((I(H

7-%@ 7%8 -G3IIH9

B-%(3 %D

:4JB0FG,!A#I&0+)#H :B#),#4FG,!A#I&0+)#H

?<#$E"%

:),0K)L#F%@G'IKIIMH

%%%@ %7 (%

( -K"%

:N0,:+JF$I%%$

%"$ ((%

$-5%(%61<<%%

%%$-(%%

:0O:0,E#:+#E#+)F

(7)

.*

?<#$E"%

:0O:0,E#:+#E#+)F %;<$ %(

%

:,!#04:+,F

%%;" (%

#$E"%

)%/$"%-

)ABN::N0!BFG,!A#I&0+)#H

%%%=%1<<=2%

(%1<<<

)ABN::,!:4+#FG)BI)+##8t9H

"$ ((%

t %8%(%3%(%( - C%9((%%" % #;<-)ABN::,!:4+#F)+##8C%9

?<-%:N0,:+JD

(8)

#$E"%

),0K)L#FB

%%%7%@ (87"%9 ( -BF *1<< "%

?<-%:),0K)L#

)ABN::0O:B#),#4:+#E#+)F

?<-%:0O:0,E#:+#E#+)

)ABN::MA4#4:N#M,FO

= ((%(

( -OF<

#$E"%

B%-

0( %$"$ )

<

,;<" (%%(

" %%%8%9

%%<,%"("%

:4JB0&0+)#" =

=%<

7=(1=

( % (

%1<<1M1<<<<

(9)

?

(

+$ -

%%1<<:(%8<<<9

"%1<<:%::(%8<<<9

? $$"%1<<:BA:,!#04)

&(((%%%%

%/%7(

<

&

%((;%%-

%<<<

(10)

C

!"

#$%#$%#$%#

$%#$%

#$%#$%#

$%#$%

#$%#$%#

$%!!!#

$%!!#!$!%#

$%#$%#

$%!!#!$!%#

$%#$%#

$%!!#!$!%#

$%#$%"!"&

"'(((((((((((("&

")")"'"&"*"+","-

")"&"*"&"+"&",

!!! ! ! ! ! ! ! . $ ///

&-0%

%"!".""!

!!!!

!#$%#$%!!#!$

!%!!#!$!%#$

%#$%#$

%#$%#$

%#$%!!#!$

!%!!#!$!%#$

%#$%#$

%#$%#$

%#$%!!#!$

!%!!#!$!%#$

%#$%#$

%#$%!

!!!!!

!!!

"

!!!!

!!#######$#$#$#%

#%#%####!###$!#$#%!

#%#######$#$#%#%

01111&)22 !1111

!

( 33 01111&)22 !1111

! !

&-0%

$"=))(%

P%1=

%%= (

%;$%%%%

%%%</%=1 7$%"=:%(

%%(;%

%((8((P7

?<9

(11)

.

&

;%%(%%%(

0!'(1<<

;%%

"

("

7%1"(

;(

%%%8<<MA%9 <<<

-'(%%

N(%

=(

(12)

*

-'(%%

#define MAX_SIZE 8000000 int main() {

double GlobSum; /* A global variable */

double array[MAX_SIZE];

int nthreads;

int i;

/* Initialize things */

for (i=0; i<MAX_SIZE; i++) array[i] = i;

GlobSum = 0;

nthreads = omp_get_max_threads();

printf("Threads: %d\n", nthreads );

#pragma omp parallel for private(i) \ reduction(+ : GlobSum) for(i=0; i<MAX_SIZE;i++)

GlobSum = GlobSum + array[i];

return(EXIT_SUCCESS);

}

-'(%%

A%(

((%=;%(%<

,( %

1(""%

$%$%8$%9<

(13)

*

-'(%%

int main() { ...

int i;

_omp_initialize();

for (i = 0; i < 8000000; i++) array[i] = i;

GlobSum = 0;

nthreads = omp_get_max_threads();

printf("Threads: %d\n", nthreads);

/* #pragma omp parallel for private(i) reduction(+: GlobSum) */

{

_OMP_PARALLEL_DECL_VARSTRUCT(main_parallel_0);

_OMP_PARALLEL_INIT_VAR(main_parallel_0, GlobSum);

_OMP_PARALLEL_INIT_VAR(main_parallel_0, array);

_omp_create_team((-1), _OMP_THREAD, main_parallel_0, (void *) &main_parallel_0_var); /* create team of

* threads */

_omp_destroy_team(_OMP_THREAD->parent);

}

return 0;

}

-'(%%

void *main_parallel_0(void *_omp_thread_data){

int _omp_dummy = _omp_assign_key(_omp_thread_data);

double (*array)[8000000] = &_OMP_VARREF(main_parallel_0,array);

{

int i;

double GlobSum = 0;

int _omp_start, _omp_end, _omp_incr, _omp_last_iter = 0;

int _omp_for_id = _omp_module.for_ofs + 0;

int (*_omp_sched_bounds_func) (int, int, int, int,

int, int *, int *, int, int, int *);

/* static with chunksize or runtime */

int _omp_init_start, _omp_nchunks, _omp_c = 0, _omp_chunksize;

_omp_incr = (1);

_omp_init_directive(_OMP_FOR, _omp_for_id, 0, _omp_incr, 0, 115);

_omp_sched_bounds_func = _omp_static_bounds;

_omp_static_bounds_default(8000000, 0, _omp_incr, &_omp_start, &_omp_end);

...

(14)

*?

-'(%%

...

while ((*_omp_sched_bounds_func) (8000000, 0, _omp_for_id, _omp_incr, -1, &_omp_start, &_omp_end, 1, 0, &_omp_c)) { if (_omp_start < (8000000) && _omp_end == (8000000))

_omp_last_iter = 1;

for (i = _omp_start; i < _omp_end; i++) { GlobSum = GlobSum + (*(array))[i];

} /* for */

}

if (_omp_last_iter) { /* lastprivate assignments */ } /* reduction operation (+:GlobSum) */

othread_set_lock(&_omp_module.reduction_lock[0]);

_OMP_VARREF(main_parallel_0, GlobSum) += GlobSum;

othread_unset_lock(&_omp_module.reduction_lock[0]);

}

return 0;

}

$%)O(%

main() {

int i,retval;

pthread_t tid;

/* Initialize things */

pthread_attr_init(&attr);

pthread_mutex_init (&my_mutex, NULL);

pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);

for (i=0; i<MAX_SIZE; i++) array[i] = i;

GlobSum = 0;

for(i=0;i<ThreadCount;i++) { index[i] = i;

retval = pthread_create(&tid,&attr,SumFunc, (void *)index[i]);

thread_id[i] = tid;

}

for(i=0;i<ThreadCount;i++)

retval = pthread_join(thread_id[i],NULL);

}

0%%")O(%%-

(15)

*C

$%)O(%

void *SumFunc(void *parm){

int i,me,chunk,start,end;

double LocSum;

/* Decide which iterations belong to me */

me = (int) parm;

chunk = MAX_SIZE / ThreadCount;

start = me * chunk;

end = start + chunk; /* C-Style - actual element + 1 */

if ( me == (ThreadCount-1) ) end = MAX_SIZE;

/* Compute sum of our subset*/

LocSum = 0;

for(i=start;i<end;i++ ) LocSum = LocSum + array[i];

/* Update the global sum and return */

pthread_mutex_lock (&my_mutex);

GlobSum = GlobSum + LocSum;

pthread_mutex_unlock (&my_mutex);

}

B-E"(/%(%;D

)

)%

=%

(16)

*.

)

-(

)%

($%1% %1

$$"%

%1%5"6 %%-="%

=$"(

P(PPPA%

! %

A% N"%%-

-33===<<3 -33===<<3

,%-

-33===<<<(3=C3

=C:::$(<(

-33===<<$33%33

%-

)-% -33(%<%<3

-%-33<3

Referencer

RELATEREDE DOKUMENTER

- Der udarbejdes en mail med en lille præsentation af medlemmerne, hvor der ligeledes opfordres til at de sender en beskrivelse retur på mail eller til bestyrelsen. - Det

Studerende, som i mange tilfælde aldrig tidligere har sat foden på SDU og måske ligefrem heller ikke har læst på et univer- sitet, men som lige har et spørgsmål til

Fri fra Fødslen, konfirmeret 8/7 1804. 4/9 1818 Myndigshedsbevilling under Kuratel af Købmand Caspar F. 1821 levede hun sam ­ men med Planteren, Kolonialadjutant, Kaptajn

6 Machetto, Vinterlandskab 7 Aage Jessen, Interiør.. 8 Rasmus Sørensen, Fra Furesøen 9 Machetto,

Kolonne 7: Interpoleret nedbørsværdi for gridcellen (millimeter) Kolonne 8 Antal stationer, der indgår i beregningen af gridcellen Kolonne 9-. Kolonne x: Stationer der indgår

JACOBS KAMP MED ENGLEN. Jensen: Bræen).. JAGTEN

Session 7: 24.10 Workshop 2 og midtvejsevaluering Finn Holst Session 8: 31.10 Professionsdidaktik i relation til musikfaget Finn Holst Session 9: 07.11 Komparativ

1 Systemer opfylder ikke gældende MedCom standarder 10 8 6 24 Showstopper: Nødvendigt med en &#34;oprydningsrunde&#34; nu. 7 Transmission af EDI for langsom 9 2 10 21 Det er i