[plain]

Table of contents

Table of contentsContents

Introduction

Several kinds of parallelismIn several cases, parallelism can be expressed with high level schemes:

The kind of data and actions on these data can also be a source of parallelism:

Sklml goalsThe Sklml framework addresses the following problems:

Sklml simple skeletons

Sklml skeleton kindsAs described above, Sklml provides three kinds of skeletons to express parallelism:

Complex skeletons are built by composing skeletons. A basic domain decomposition skeleton and a if-then-else skeleton has been written using this technique. Those composite skeletons are available in the library sklml_extra

Data parallel skeletons

The farm skeletonThe farm skeleton performs the same action on a set of data.


=0ptpn 8ar 700 750 100 100 0 6.28319pa 1325 500pa 2075 500pa 2075 0pa 1325 0pa 1325 500fp=.5ex by 0.250in 1.700into 0ptFpa 1325 1500pa 2075 1500pa 2075 1000pa 1325 1000pa 1325 1500fp=.5ex by 1.250in 1.700into 0ptFar 2700 750 100 100 0 6.28319pa 0 750pa 600 750da 0.050=1exby -1 by 2 by .5ex by 0.750in 0.300into 0ptxpa 2800 750pa 3400 750da 0.050=1exby -1 by 2 by .5ex by 0.750in 3.100into 0ptF(x)sh 1.000pn 1pa 1235 301pa 1325 250pa 1270 337pa 1235 301fppn 8pa 800 750pa 1253 319fpsh 1.000pn 1pa 2545 663pa 2600 750pa 2510 699pa 2545 663fppn 8pa 2075 250pa 2528 681fpsh 1.000pn 1pa 1270 1163pa 1325 1250pa 1235 1199pa 1270 1163fppn 8pa 800 750pa 1253 1181fpsh 1.000pn 1pa 2510 801pa 2600 750pa 2545 837pa 2510 801fppn 8pa 2075 1250pa 2528 819fpdepth1.500in width0pt height 0pt3.400in
1em
Figure : farm F skeleton graph

The product skeletonThe ***, or product, skeleton applies a pair of functions to a pair of values in parallel.


=0ptpn 8ar 700 750 100 100 0 6.28319pa 1325 500pa 2075 500pa 2075 0pa 1325 0pa 1325 500fp=.5ex by 0.250in 1.700into 0ptFpa 1325 1500pa 2075 1500pa 2075 1000pa 1325 1000pa 1325 1500fp=.5ex by 1.250in 1.700into 0ptGar 2700 750 100 100 0 6.28319pa 0 750pa 600 750da 0.050=1exby -1 by 2 by .5ex by 0.750in 0.300into 0pt(x,y)pa 2800 750pa 3800 750da 0.050=1exby -1 by 2 by .5ex by 0.750in 3.300into 0pt(F(x),G(y))sh 1.000pn 1pa 1235 301pa 1325 250pa 1270 337pa 1235 301fppn 8pa 800 750pa 1253 319fpsh 1.000pn 1pa 2545 663pa 2600 750pa 2510 699pa 2545 663fppn 8pa 2075 250pa 2528 681fpsh 1.000pn 1pa 1270 1163pa 1325 1250pa 1235 1199pa 1270 1163fppn 8pa 800 750pa 1253 1181fpsh 1.000pn 1pa 2510 801pa 2600 750pa 2545 837pa 2510 801fppn 8pa 2075 1250pa 2528 819fpdepth1.500in width0pt height 0pt3.800in
1em
Figure : F *** G skeleton graph

Instruction parallel skeletons

The pipe skeleton The |||, or pipe, skeleton is the simplest instruction parallel skeleton: it implements the parallel composition of functions.


=0ptpn 8pa 0 250pa 500 250da 0.050=1exby -1 by 2 by .5ex by 0.250in 0.250into 0ptxar 600 250 100 100 0 6.28319sh 1.000pn 1pa 900 225pa 1000 250pa 900 275pa 900 225fppn 8pa 700 250pa 900 250fppa 1000 500pa 1500 500pa 1500 0pa 1000 0pa 1000 500fp=.5ex by 0.250in 1.250into 0ptFsh 1.000pn 1pa 1700 225pa 1800 250pa 1700 275pa 1700 225fppn 8pa 1500 250pa 1700 250fppa 1800 500pa 2300 500pa 2300 0pa 1800 0pa 1800 500fp=.5ex by 0.250in 2.050into 0ptGsh 1.000pn 1pa 2500 225pa 2600 250pa 2500 275pa 2500 225fppn 8pa 2300 250pa 2500 250fpar 2700 250 100 100 0 6.28319pa 2800 250pa 3500 250da 0.050=1exby -1 by 2 by .5ex by 0.250in 3.150into 0ptG(F(x))depth0.500in width0pt height 0pt3.500in
1em
Figure : The F ||| G skeleton graph

Control skeletons

The loop skeleton The loop skeleton is a control skeleton: it computes the fixpoint of a function (composing a function until some predicate becomes false).


=0ptpn 8ar 700 250 100 100 0 6.28319sh 1.000pn 1pa 1200 225pa 1300 250pa 1200 275pa 1200 225fppn 8pa 800 250pa 1200 250fppa 1300 500pa 2050 500pa 2050 0pa 1300 0pa 1300 500fp=.5ex by 0.250in 1.675into 0ptFsh 1.000pn 1pa 2450 225pa 2550 250pa 2450 275pa 2450 225fppn 8pa 2050 250pa 2450 250fpar 2650 250 100 100 0 6.28319ar 1675 1250 200 200 0 6.28319=.5ex by 1.250in 1.675into 0ptPsh 1.000pn 1pa 675 450pa 700 350pa 725 450pa 675 450fppn 8pa 1475 1250pa 700 1250pa 700 360spsh 1.000pn 1pa 1975 1275pa 1875 1250pa 1975 1225pa 1975 1275fppn 8pa 2650 350pa 2650 1250pa 1885 1250sppa 0 250pa 600 250da 0.050=1exby -1 by 2 by .5ex by 0.250in 0.300into 0ptxpa 2750 250pa 3350 250da 0.050=1exby -1 by 2 by .5ex by 0.250in 3.050into 0ptFn(x)depth1.450in width0pt height 0pt3.350in
1em
Figure : loop (P, F) skeleton graph

Full example

Simple skeleton example Let’s define the skeleton computing the function (x, y)↦ H(F(x), G(y)).




let sk = (F *** G) ||| H;;

Compiling and running programs

Compiling

Compiling with sklmlc Sklml provides a compiler to compile programs either in parallel or sequential mode. This compiler wraps the relevant options to ultimately call the OCaml compiler.

The -mode option specifies the desired compiling mode.




$ sklmlc -mode seq -o hello.out hello.ml

Running

Running Sklml programs Running sequential programs is as simple as running any program:


$ ./hello.out


Sklml provides the sklmlrun helper to run parallel programs:


$ sklmlrun ./hello.out


This document was translated from LATEX by HEVEA.