embarrassingly parallel computations processes …….. input data results each process requires...

21
Embarrassingly Parallel Computations processes …….. Input data results Each process requires different data and produces results from its input without any results from other processes

Upload: deirdre-irma-briggs

Post on 04-Jan-2016

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Embarrassingly Parallel Computations processes …….. Input data results Each process requires different data and produces results from its input without

Embarrassingly Parallel Computations

processes ……..

Input data

results

Each process requires different data and produces results from its input without any results from other processes

Page 2: Embarrassingly Parallel Computations processes …….. Input data results Each process requires different data and produces results from its input without

Embarrassingly Parallel Computations

……..

Collect results

send initial dataslaves

recv()

send()

spawn()send()

recv()

Master

Page 3: Embarrassingly Parallel Computations processes …….. Input data results Each process requires different data and produces results from its input without

Geometrical Transformations of images

(a) Shift

yyy

xxx

'

'

(b) Scaling

y

x

ySy

xSx

'

'

© Rotation

sincos

sincos'

'

yxy

yxx

(d) Clipping

hl

hl

yyy

xxx

'

'

Page 4: Embarrassingly Parallel Computations processes …….. Input data results Each process requires different data and produces results from its input without

Geometrical Transformations of images

640

480

80

80

process

map

Page 5: Embarrassingly Parallel Computations processes …….. Input data results Each process requires different data and produces results from its input without

Geometrical Transformations of images

640

480

process

10

Page 6: Embarrassingly Parallel Computations processes …….. Input data results Each process requires different data and produces results from its input without

Geometrical Transformations of images

Master for(i=0, row; i<48 ; i++, row = row +10) send(row, Pi);

for(i=0 ; i<480 ; i++) for(j=0 ; j<640 ; j++) temp_map[i][j] = 0;

for(i=0 ; I<(640*480) ; i++){ recv(oldrow, oldcol, newcol, Pany); if(!((newrow<0)||(newrow>=480)||(new<0)||(new>=640))) temp_map[newrow][newcol]=map[oldrow][oldcol];}

for(i=0 ; i<480 ; i++) for(j=0 ; j<640 ; j++) map[i][j] = temp_map[i][j];

Page 7: Embarrassingly Parallel Computations processes …….. Input data results Each process requires different data and produces results from its input without

Geometrical Transformations of images

Slave recv(row, Pmaster);

for(oldrow = row ; oldrow<(row+10) ; oldrow++) for(oldcol=0 ; oldcol<640 ; oldcol++){ newrow = oldrow + delta_x; newcol = newcol + delta_y; send(oldrow, oldcol, newrow, newcol, Pmaster);}

Page 8: Embarrassingly Parallel Computations processes …….. Input data results Each process requires different data and produces results from its input without

Geometrical Transformations of images

Analysis

)()(4)2( 22 npOttnttpt datastartupdatastartupcomm

communication

computation )/()(2 2

2

pnOp

ntcomp

Page 9: Embarrassingly Parallel Computations processes …….. Input data results Each process requires different data and produces results from its input without

Mandelbrot Set

czz kk 2

1

22 bazlength

imagimagrealimag

realimagrealreal

czzz

czzz

abibaz

2

222

222

Page 10: Embarrassingly Parallel Computations processes …….. Input data results Each process requires different data and produces results from its input without

Mandelbrot Set

int cal_pixel(complex c){ int count, max; complex z; float temp, lengthsq; max = 256; z.real = 0; z.imag = 0; count = 0; do{ temp = z.real *z.real - z.imag * z.imag; z.real = temp; lengthsq = z.real * z.real + z.imag * z.imag; count++; }while((length<4.0)&&(count<max)); return count; }

struct complex{ float real; float imag;};

Sequential code

Page 11: Embarrassingly Parallel Computations processes …….. Input data results Each process requires different data and produces results from its input without

Mandelbrot Set

Sequential codec.real = real_min + x * (real_max - real_min) / disp_height;c.imag = imag_min + y * (imag_max - imag_min) / disp_width;

scale_real = (real_max - real_min) / disp_height;scale_imag = (imag_max - imag_min) / disp_width;

for(x=0 ; x < disp_width ; x++) for(y=0 ; y < disp_height ; y++){ c.real = real_min + ((float) x * scale_real); c.imag = imag_min + ((float) y * scale_imag); color = cal_pixel(c); display(x, y, color);}

Page 12: Embarrassingly Parallel Computations processes …….. Input data results Each process requires different data and produces results from its input without

Mandelbrot Set

Static Task Assignment

Master :for(i=0, row=0 ; i<48 ; i++, row = row + 10) sned(&row, Pi)for(i=0 ; i < (480*640) ; i++){ recv(&c, &color, Pany); display(c, color);}

Slaverecv(&row, Pmaster);for( x=0 ; x< disp_width ; x++) for(y=0 ; y < (row+10) ; y++){ c.real = min_real + ((float)x*scale_real); c.imag = min_imag + ((float)y*scale_imag); color = cal_pixel(c); send(&c, &color, Pmaster);}

Page 13: Embarrassingly Parallel Computations processes …….. Input data results Each process requires different data and produces results from its input without

Mandelbrot Set

Dynamic Task Assignment

Work pool.(xa, ya)

.(xb, yb) .(xc, yc)

.(xd, yd)

.(xe, ye)

………….

Page 14: Embarrassingly Parallel Computations processes …….. Input data results Each process requires different data and produces results from its input without

Mandelbrot Set

Dynamic Task Assignment

Master:

recv(&slave, &r, color, Pany, result_tag)count--;if( row<disp_height ){ sned(&row, Pslave, data_tag); row++; count++; }else send(&row, Pslave, terminator_tag);row_recv++;disply(r, color);}while(count>0);

Slave:

recv(y, Pmaster, ANYTAG, source_tag);while( source_tag == data_tag){ c.imag = imag_min + ((float)y*scale_imag); for(x=0 ; x<width ; x++){ c.real = real_min + ((float)x*scale_real); color[x] = cal_pixel(c); } send(&i, &y, color, Pmaster, result_tag); recv(y, Pmaster, source_tag);};

Page 15: Embarrassingly Parallel Computations processes …….. Input data results Each process requires different data and produces results from its input without

Mandelbrot Set

Dynamic Task Assignment

terminate Row returneddecrement

Row sentincrement disp_height

Page 16: Embarrassingly Parallel Computations processes …….. Input data results Each process requires different data and produces results from its input without

Mandelbrot Set

nts max

)(1 datastartupcomm ttst

s

ntcomp

max

)(2 datastartupcomm tts

nt

))((max

datastartupp ttss

n

s

nt

Phase I

Phase II

Phase III

Page 17: Embarrassingly Parallel Computations processes …….. Input data results Each process requires different data and produces results from its input without

Monte Carlo Methods

2

2

422

)1( 2

squareofArea

circleofArea

Page 18: Embarrassingly Parallel Computations processes …….. Input data results Each process requires different data and produces results from its input without

Monte Carlo Methods

1

1

x

21 xy 21 rr xy

41

1

0

2 dxx

Page 19: Embarrassingly Parallel Computations processes …….. Input data results Each process requires different data and produces results from its input without

Monte Carlo Methods

2

1 1

21 )()( limx

x

N

ir

N

xfN

xxdxxfArea

2

1

)3( 2x

xdxxxI

sum=0;for(i=0; i<N ; i++) xr = rand_v(x1, x2); sum = sum + xr * xr – 3 * xr;}Area = sum / N;

Sequential Code

Page 20: Embarrassingly Parallel Computations processes …….. Input data results Each process requires different data and produces results from its input without

Monte Carlo Methods

Parallel Code

Master

Slaves Slaves

Partial sumPartial sum

random number process

Masterfor(i=0 ; i<N/n ; i++){ for(j=0 ; j< n ; j++) xr[j] = rand(); recv(Pany, reg_tag, Psource); send(xr, &n, Psource, compute_tag);}

for(i=0 ; i<slave_no ; i++){ recv(Pi, reg_tag); send(Pi, stop_tag);}

sum=0;reduce_add(&sum, Pgroup);

Page 21: Embarrassingly Parallel Computations processes …….. Input data results Each process requires different data and produces results from its input without

Monte Carlo Methods

Parallel CodeMaster

Slaves Slaves

Partial sumPartial sum

random number process

Slave

sum=0;send(Pmaster, reg_tag);recv(xr, &n, Pmaster, source_tag);while(source_tag == compute_tag){ for(i=0 ; i<n ; i++) sum = sum + xr[i] * xr[i] - 3 * xr[i]; send(Pmaster, reg_tag); recv(xr, &n, Pmaster, source_tag);};

reduce_add(&sum, Pgroup);