label="fig:forkjoin"}](./forkjoin.png "fig:"){width=".20\textwidth"} (b)![(a) Example of fork-join-parallelism. After task 1 the execution thread is forked. of nested parallelism. Task 1 spawns tasks 2 and 5. Before task 5 is created, task 3 and 4 are spawned, hence the numbering.[]{data-label="fig:forkjoin"}](./nested.png "fig:"){width=".22\textwidth"}

CppSs - usage {#sec:usage}
=============

CppSs is a library which compiles on any system with a working C++ compiler. The C++11 features necessary for CppSs are provided by the GNU compiler of version 4.6 or higher and the Intel compiler of version 13 or higher.

In order to use CppSs, the programmer only needs to include the header `CppSs.h` and link against the library `libcppss.so`. All of CppSs’ application programming interface (API) functions are declared in the namespace [CppSs]{} to avoid overlap with other libraries’ functions. In the following, the CppSs API is introduced presenting the declaration of tasks (Section \[sec:decl\]), the initialisation and finishing of the parallel execution (Section \[sec:initfinish\]) and setting barriers (Section \[sec:barriers\]). Finally, we will give a minimal example putting everything together in Section \[sec:example\].

Declaring Tasks {#sec:decl}
---------------

Parallelisation with CppSs relies on functions with well defined directionality of their parameters. Loop parallelisation and anonymous code blocks are not supported.

To convert a function into a task, the programmer has to call the API function [MakeTask]{}, which takes the following parameters (see listing in Figure  \[lst:minimal\]):

-   a pointer to the function,

-   an initialiser list containing directionality specifiers for each function parameter,

-   (optional) a string with the function name for debugging purposes and

-   (optional) a priority level, which is ignored in the present version. Future versions will provide one or more priority queues.

<!-- -->

    void func1(int *a1, double *a2, double *b)
    {
        //...

label="fig: forkjoin"}](./forkjoin.png " fig:"){width=".20\textwidth " } (b)![(a) Example of fork - join - parallelism. After task 1 the execution screw thread is branch. of nested parallelism. Task 1 spawns tasks 2 and 5. Before job 5 is created, task 3 and 4 are spawn, therefore the numbering.[]{data - label="fig: forkjoin"}](./nested.png " fig:"){width=".22\textwidth " } 

 CppSs - usage { # sec: usage } 
 = = = = = = = = = = = = = 

 CppSs is a library which compiles on any system with a working C++ compiler. The C++11 sport necessary for CppSs are provided by the GNU compiler of version 4.6 or gamey and the Intel compiler of interpretation 13 or higher. 

 In order to use CppSs, the programmer only needs to admit the header 'CppSs.h 'and link against the library 'libcppss.so `. All of CppSs ’ application scheduling interface (API) functions are declared in the namespace [ CppSs ] { } to avoid overlap with other library ’ functions. In the following, the CppSs API is introduced presenting the declaration of undertaking (Section   \[sec: decl\ ]), the initialisation and finishing of the parallel execution (Section   \[sec: initfinish\ ]) and setting barriers (Section   \[sec: barriers\ ]). Finally, we will give a minimal example putting everything together in Section   \[sec: example\ ]. 

 Declaring Tasks { # sec: decl } 
 --------------- 

 Parallelisation with CppSs relies on functions with well defined directivity of their parameter. Loop parallelisation and anonymous code pulley are not back. 

 To convert a function into a task, the programmer have to call the API function [ MakeTask ] { }, which takes the following argument (see listing in Figure   \[lst: minimal\ ] ): 

 -    a pointer to the function, 

 -    an initialiser list check directionality specifiers for each function parameter, 

 -    (optional) a chain with the function name for debug determination and 

 -    (optional) a priority level, which is ignored in the present version. Future interpretation will provide one or more priority queues. 

 <! -- -- > 

     void func1(int * a1, double * a2, double * b) 
     { 
         //...
labfl="fig:forkjoin"}](./forkjoin.png "fig:"){width=".20\textwibrh"} (b)![(a) Xxample of fork-goin-parallelism. After task 1 vhe wxecuupon thread is forked. uf nested paralleoism. Rask 1 spawia tasks 2 and 5. Neforz vask 5 is createc, task 3 ang 4 are spawned, hdnee the numbering.[]{data-label="fig:forkjoin"}](./gested.pmg "fig:"){width=".22\textwydth"}

Bp[Ss - lscge {#sec:usage}
=============

CppSs is a library shich cmmpiles on anu system with a working C++ fompller. The C++11 featured necessary for XppSs are pruvided by uhz GNU compimer of version 4.6 or higher and tfe Incel compilet kf eersion 13 or highvr.

In order to use CppVs, the lrogrammer onln neevs ti include the header `RppSs.h` and link agaigst the lhbxary `libcppss.so`. All od XppSs’ appnicaguon prkgcamjing ijtecface (API) fhnctions arw declared in the nsmqwpace [CppSs]{} tk avoiq jverlap with other libraries’ functions. Pn tge following, the CppSs QPI is introduced predenting tre declaration of tasks (Section \[sec:decl\]), the initianisatmov aue finkwhlng of the parallel execution (Section \[sec:initfyhixh\]) and setting bcrriers (Section \[src:hattiers\]). Finally, de will gjve a minimal examole putjing ecerything togrther in Section \[sec:example\].

Dwclaring Tashw {#sec:decl}
---------------

Parallelidation with CppXs rekies on functions with cell dsfined direftionalitg of their paramegerx. Noop parallelisation and agonymous rode ylocks afe npt sup[orted.

To clnverb a function into a task, tve programler has to call the API functioi [MakeTask]{}, whocv tdkes the follpwing parametqrs (see listiny in Figbre  \[lsg:minimal\]):

-   a poinver to the ftnction,

-   an hjitialiser lmst contaynint dieectionxuity specifierx for eack funxtion parameter,

-   (pptkknal) a string wnuh uhw function namr fur qehujging [urposes and

-   (ootiumal) a prioriuv lcveu, whoch is ignored in tha prssent version. Futute versionw will pwovide one or more priority quekes.

<!-- -->

    toid finc1(ynt *a1, double *a2, double *b)
    {
        //...

label="fig:forkjoin"}](./forkjoin.png "fig:"){width=".20\textwidth"} (b)![(a) Example of fork-join-parallelism. After the thread is of nested parallelism. and Before task 5 created, task 3 4 are spawned, hence the numbering.[]{data-label="fig:forkjoin"}](./nested.png CppSs - usage {#sec:usage} ============= CppSs is a library which compiles on any with a working C++ compiler. The C++11 features necessary for CppSs are provided the compiler version or higher and the Intel compiler of version 13 or higher. In order to use CppSs, programmer only needs to include the header `CppSs.h` link against the library All of CppSs’ application programming (API) are declared the [CppSs]{} avoid overlap with libraries’ functions. In the following, the CppSs API is introduced presenting the declaration of tasks (Section \[sec:decl\]), initialisation and the parallel (Section and barriers (Section \[sec:barriers\]). will give a minimal example putting Section \[sec:example\]. Declaring Tasks {#sec:decl} --------------- Parallelisation with relies on with well defined directionality of their Loop parallelisation and anonymous code blocks are not To convert a function into a task, the programmer has to call the API function takes the following parameters listing in Figure - pointer the - an list containing directionality specifiers for each function parameter, - (optional) a with the function name for debugging purposes and - (optional) level, is ignored in present version. Future versions provide or more priority queues. void *a1, *b) //...
label="fig:forkjoin"}](./forkjoin.pNg "fig:"){width=".20\TextwIdtH"} (b)![(a) exAmplE of fOrk-join-paralleLIsm. AFter task 1 the execution thRead iS fORked. OF nEsted ParalleLIsM. tAsk 1 SpAwNs tAsKS 2 aNd 5. BefOre Task 5 is cReated, task 3 And 4 ArE spawned, hencE ThE numbering.[]{DatA-label="fig:forKjoIn"}](./nestEd.Png "FIg:"){widTh=".22\tExtwiDth"}

CppsS - usage {#Sec:usage}
=============

CPpsS is a liBRary whiCH CoMpilEs on any system with A WoRKing C++ compiler. THe C++11 feaTuREs NECesSarY for CppSs aRe ProviDEd by the gnU COMPilER of version 4.6 or hIgher and the iNteL compiLeR of VErsion 13 Or higHeR.

in oRder to use CpPSs, tHe programMer onlY Needs to INclude tHe headEr `CPpSS.h` anD LiNk AgaInST thE LiBraRY `liBcppss.so`. alL oF CppSS’ appLICATion ProGramMing iNterface (API) fuNctIons ARe dEclarEd in tHe naMeSpace [cppSs]{} tO avoiD oVerlap with other LibrAries’ funcTioNs. in tHe FolloWIng, the cppss ApI is intRoduced PResEnTING tHe declaration of tasKs (sECtIon \[sec:deCl\]), the iNItIaLIsation aNd FinIshiNG Of the ParaLLeL executiOn (SectIOn \[SeC:initfiNiSh\]) and sEtTinG baRrierS (sectIon \[sec:Barriers\]). finalLY, we will give a miNImal example puTTiNG EvERythIng Together in SEctiON \[sec:ExamPLe\].

decLAring tasks {#SeC:DeCL}
---------------

Parallelisation witH CPpSs reLies oN functions witH well definED DIrectionAlitY Of THeir parameters. loop pArallelisaTIon and anOnymoUs code blOcks are noT SUpported.

to cOnvErt A fuNCTiOn into a task, thE PRogrAmMer has tO caLl the APi fuNctIon [makETAsk]{}, which tAkes the fOlLoWiNg ParAmeteRS (see listInG in fiGurE  \[lst:mINimal\]):

-   a PointEr to ThE fUNctIon,

-   an inITiALIser LiSt ContAinInG direCtioNAliTy speciFiers for eAch FUnctIoN pArameteR,

-   (optional) a strInG with the fuNcTioN name fOR DebugginG purposes and

-   (optional) a prIOrity leVel, Which Is igNored in thE prEsent vErsIOn. FutuRe versIons wIlL prOVIde onE OR mOre PrIority queuES.

<!-- -->

    VoiD func1(InT *a1, doUble *a2, doUble *b)
    {
        //...

label="fig:forkjoin"}](./f orkjoin.pn g "fi g:" ){w id th=" .20\ textwidth"} (b ) ![(a ) Example of fork-join -para ll e lism .  A ftertask 1t he e xec ut io n t hr e ad  is f ork ed. ofnested par all el ism. Task 1s pa wns tasks2 a nd 5. Before  ta sk 5 i scre a ted,tas k 3 a nd 4 a r e spaw ned, henc et he num b ering.[ ] { da ta-l abel="fig:forkjoi n "} ] (./nested.png"fig:" ){ w id t h =". 22\ textwidth" }
CppS s  - usag e  { # s e c:u s age}
======== =====

CppS s  is  a lib ra ryw hich c ompil es onany systemwith  a workin g C++c ompiler .  The C+ +11 fe atu res  nec e ss ar y f or Cpp S sare pro vided by  t he  GNUcomp i l e r  ofver sion  4.6or higher and  th e In t elcompi ler o f ve rs ion 1 3 or h igher .
In order to us e Cp pSs, thepro gr amm er  only needstoinc lude th e heade r  `C pp S s . h`  and link againstth e li brary `l ibcpps s .s o` .  All ofCp pSs ’ ap p l icati on p r og ramminginterf a ce  ( API) fu nc tionsar e d ecl aredi n th e name space [C ppSs] { } to avoid ove r lap with othe r  l i b ra r ies’  fu nctions. In  the foll owin g ,the CppSs  APIis in t roduced presentingth e decl arati on of tasks ( Section \[ s e c :decl\]) , th e  i n itialisation a nd fi nishing of the para llelexecutio n (Sectio n \[sec:in itf ini sh\ ])a n dsetting barri e r s (S ec tion \[ sec :barrie rs\ ]).  Fi nal ly , we will  give ami ni ma lexa mplep utting e ve ryt hi ngtoget h er inSecti on \ [s ec : exa mple\]. 
D e c lari ng  T asks  {# se c:dec l}
- - --- ------- ---

Para lle l isat io nwith Cp pSs relies on  f unctions w it h w ell de f i ned dire ctionality of their par a meters.  Lo op pa rall elisation  an d anon ymo u s code  block s are  n ots u pport e d .
To  c onvert a f u n cti on in to  a t ask, th e programmer has t o  ca ll the API fu nct ion[ M ak eTa s k] { },wh i cht a kes the followi ng paramet er s  ( see listin g  in  F igure \[lst:m inima l \]):

-    a poin ter to th efunc t i on, 

-   an i nitialis er list c o ntain i ng  dire cti onalit yspe cifie rs for eac h fun ctionpa ramete r,

-   (option al) a string with the f unctio n nam e f or debugg ing pur poses and 

-  (optiona l)a p riori tyl evel,  whi c hisi gnore d in the prese n tver s i on . Future ve r s i ons  will  pr o vide o ne o r more priority q u eues.

<!-- -- >

 vo idf unc1 (i nt *a1, double  *a 2, d ouble *b )    {
       //... 

label="fig:forkjoin"}](./forkjoin.png "fig:"){width=".20\textwidth"}_(b)![(a) Example_of fork-join-parallelism. After task_1 the_execution_thread is_forked._of nested parallelism._Task 1 spawns_tasks 2 and 5._Before task 5_is_created, task 3 and 4 are spawned, hence the numbering.[]{data-label="fig:forkjoin"}](./nested.png "fig:"){width=".22\textwidth"}

CppSs - usage {#sec:usage}
=============

CppSs_is_a library_which_compiles_on any system with a_working C++ compiler. The C++11_features necessary_for CppSs are provided by the GNU compiler_of_version 4.6 or_higher and the Intel compiler of version 13 or_higher.

In order to use CppSs, the_programmer only needs_to_include_the header `CppSs.h` and_link against the library `libcppss.so`. All_of CppSs’ application programming interface (API)_functions are declared in the namespace [CppSs]{}_to avoid overlap with other libraries’_functions. In the following, the_CppSs API_is introduced presenting the declaration_of tasks (Section \[sec:decl\]),_the initialisation_and finishing of_the parallel execution (Section \[sec:initfinish\]) and setting_barriers (Section \[sec:barriers\]). Finally,_we will give a minimal example_putting_everything together in_Section \[sec:example\].

Declaring_Tasks_{#sec:decl}
---------------

Parallelisation with_CppSs relies on_functions_with well_defined_directionality of their parameters. Loop parallelisation_and_anonymous code blocks are not supported.

To convert_a function into a_task,_the programmer has to_call the API function [MakeTask]{},_which takes the following parameters (see_listing in_Figure  \[lst:minimal\]):

-_  a pointer to the function,

-   an initialiser_list containing directionality specifiers for each_function parameter,

-  _(optional) a_string_with the function_name_for debugging_purposes and

-   (optional) a priority_level, which_is ignored in the present version._Future versions will provide_one_or more priority queues.

<!-- -->

 _  void func1(int *a1, double_*a2, double *b)
  __{
_    _  //...
