• Nenhum resultado encontrado

1 // All needed includes

2 #include <comet.hpp>

3 #include <omp.h>

4 #include <BlockArray2D.hpp>

5

6 // Note:

7 // BlockArray2D is an opaque type defined by a partitionned-data plugin

8

9 // Generated structures

10 namespace itfGen

11 {

12 struct SampleMt

13 {

14 struct Fragments

15 {

16 BlockArray2D::Fragment inout;

17 };

18

19 virtual void compute(const Fragments&) = 0;

20 };

21 }

22

23 // Note:

24 // - in L²C, a use port is a pointer to a provide port (object interface)

25 // - A provide port can be obtained using class inheritance

26

27 // A glue component called "comet_metatask_section_SampleMt"

28 struct comet_metatask_section_SampleMt : public comet::go

29 {

30 // A partitionning port (use port) of the component

31 BlockArray2D* part_p0_use;

32

33 // A compute port (use port) of the component

34 itfGen::SampleMt* compute_use;

35 36

37 // Method called by the section to generate tasks for this metatask

38 void go()

39 {

40 // Retrieve the number of tasks to submit

41 const int taskCount = part_p0_use->fragmentCount();

42

43 // Submit all the tasks

44 for(int i=0 ; i<taskCount ; ++i)

45 {

46 // Build the list of the fragment need for the task to be executed

47 itfGen::SampleMt::Fragments fragments;

48

49 // Retrieve all the fragments from the partitionning components

50 // (only one fragment here)

51 fragments.inout = part_p0_use->getFragment(i);

52

53 // Retrieve the dependency pointer then transmitted to the OpenMP runtime

54 char* dep_inout = (char*)(part_p0_use->getDependency(i));

55

56 // Most OpenMP compilers generate wrong code without copying 'this'

57 // Indeed, 'this' is not implicitly copied by most compilers

58 // So, the code crash at runtime without it (bug to be reported)

59 comet_metatask_section_SampleMt* thisComponent= this;

60

61 // Submit the task and copy the fragments

B.8. ASSEMBLAGES HALLEYDES CAS D’UTILISATION ÉVALUÉS 177

62 // (the copy is safe since fragments must be defined as a POD type)

63 #pragma omp task \

64 depend(inout: dep_inout[0]) \

65 firstprivate(fragments) \

66 firstprivate(localParent)

67 thisComponent->compute_use->compute(fragments);

68 }

69 }

70 }

71

72 // Some annotations to declare the component to Comet

73 COMET_COMPO(comet_metatask_section_SampleMt)

74 COMET_PROVIDE(comet::Go, go);

75 COMET_USE(BlockArray2D, part_p0_use);

76 COMET_USE(itfGen::SampleMt, compute_use);

77 COMET_END

Figure B.7 – Exemple de code d’un composant glu généré issu d’un type de métatâche SampleMt utilisant le langage de relations identity et possédant un unique port de donnéesinout d’entrée-sortie.

B.8 Assemblages Halley des cas d’utilisation éva- lués

B.8.1 Cas d’utilisation EP

1 <?xml version="1.0" encoding="UTF-8"?>

2

3 <cmta xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

4 xsi:noNamespaceSchemaLocation="comet-cmta.xsd">

5 <mpiProcess>

6 <entryPoint instance="epMaster" port="go"/>

7

8 <componentInstance id="epMaster" type="EpMaster">

9 <use port="sectionCtl">

10 <endPoint instance="section" port="control"/>

11 </use>

12 <attribute id="dataSizeX" type="uint64">8192</attribute>

13 <attribute id="dataSizeY" type="uint64">8192</attribute>

14 <attribute id="maxIter" type="uint64">20</attribute>

15 </componentInstance>

16

17 <componentInstance id="impl" type="Impl"/>

18

19 <dataflowSectionInstance id="section">

20 <metataskInstance id="epMt1" type="EpMt">

21 <parameter id="dataSizeX">8192</parameter>

22 <parameter id="dataSizeY">8192</parameter>

23 <parameter id="blockSizeX">1024</parameter>

24 <parameter id="blockSizeY">16</parameter>

25 <compute instance="impl" port="compute"/>

26 </metataskInstance>

27

28 <metataskInstance id="epMt2" type="EpMt">

29 <parameter id="dataSizeX">8192</parameter>

30 <parameter id="dataSizeY">8192</parameter>

31 <parameter id="blockSizeX">1024</parameter>

32 <parameter id="blockSizeY">16</parameter>

33 <compute instance="impl" port="compute"/>

34 </metataskInstance>

35

36 <dataConnection>

37 <from instance="epMaster" port="inout"/>

38 <to instance="epMt1" port="inout"/>

39 </dataConnection>

40 <dataConnection>

41 <from instance="epMt1" port="inout"/>

42 <to instance="epMt2" port="inout"/>

43 </dataConnection>

44 <dataConnection>

45 <from instance="epMt2" port="inout"/>

46 <to instance="epMaster" port="inout"/>

47 </dataConnection>

48 </dataflowSectionInstance>

49 </mpiProcess>

50 </cmta>

Figure B.8 – Code XML de l’assemblage du cas d’utilisation EP. La valeur des paramètres (p. ex. taille des donnée et des blocs) est fixée arbitrairement en guise d’exemple étant donné que les valeurs peuvent varier entre les expériences.

B.8.2 Cas d’utilisation ST

1 <?xml version="1.0" encoding="UTF-8"?>

2

3 <cmta xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

4 xsi:noNamespaceSchemaLocation="comet-cmta.xsd">

5 <mpiProcess>

6 <entryPoint instance="epMaster" port="go"/>

7

8 <componentInstance id="epMaster" type="EpMaster">

9 <use port="sectionCtl">

10 <endPoint instance="section" port="control"/>

11 </use>

12 <attribute id="dataSizeX" type="uint64">8192</attribute>

13 <attribute id="dataSizeY" type="uint64">8192</attribute>

14 <attribute id="maxIter" type="uint64">20</attribute>

15 </componentInstance>

16

17 <componentInstance id="impl" type="Impl"/>

18

19 <dataflowSectionInstance id="section">

20 <metataskInstance id="epMt1" type="EpMt">

21 <parameter id="dataSizeX">8192</parameter>

22 <parameter id="dataSizeY">8192</parameter>

23 <parameter id="blockSizeX">1024</parameter>

24 <parameter id="blockSizeY">16</parameter>

25 <compute instance="impl" port="compute"/>

26 </metataskInstance>

27

28 <metataskInstance id="epMt2" type="EpMt">

29 <parameter id="dataSizeX">8192</parameter>

30 <parameter id="dataSizeY">8192</parameter>

31 <parameter id="blockSizeX">1024</parameter>

32 <parameter id="blockSizeY">16</parameter>

33 <compute instance="impl" port="compute"/>

34 </metataskInstance>

B.8. ASSEMBLAGES HALLEYDES CAS D’UTILISATION ÉVALUÉS 179

35

36 <dataConnection>

37 <from instance="epMaster" port="inout"/>

38 <to instance="epMt1" port="inout"/>

39 </dataConnection>

40 <dataConnection>

41 <from instance="epMt1" port="inout"/>

42 <to instance="epMt2" port="inout"/>

43 </dataConnection>

44 <dataConnection>

45 <from instance="epMt2" port="inout"/>

46 <to instance="epMaster" port="inout"/>

47 </dataConnection>

48 </dataflowSectionInstance>

49 </mpiProcess>

50 </cmta>

Figure B.9 – Code XML de l’assemblage du cas d’utilisation ST. La valeur des paramètres (p. ex. taille des donnée et des blocs) est fixée arbitrairement en guise d’exemple étant donné que les valeurs peuvent varier entre les expériences.

B.8.3 Cas d’utilisation EP-EP

1 <?xml version="1.0" encoding="UTF-8"?>

2

3 <cmta xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

4 xsi:noNamespaceSchemaLocation="comet-cmta.xsd">

5 <mpiProcess>

6 <entryPoint instance="epMaster" port="go"/>

7

8 <componentInstance id="epMaster" type="EpMaster">

9 <use port="sectionCtl">

10 <endPoint instance="section" port="control"/>

11 </use>

12 <attribute id="dataSizeX" type="uint64">8192</attribute>

13 <attribute id="dataSizeY" type="uint64">8192</attribute>

14 <attribute id="maxIter" type="uint64">20</attribute>

15 </componentInstance>

16

17 <componentInstance id="impl" type="Impl"/>

18

19 <dataflowSectionInstance id="section">

20 <metataskInstance id="mt1" type="EpMt">

21 <parameter id="dataSizeX">8192</parameter>

22 <parameter id="dataSizeY">8192</parameter>

23 <parameter id="blockSizeX">1024</parameter>

24 <parameter id="blockSizeY">64</parameter>

25 <compute instance="impl" port="compute"/>

26 </metataskInstance>

27

28 <metataskInstance id="mt2" type="EpMt">

29 <parameter id="dataSizeX">8192</parameter>

30 <parameter id="dataSizeY">8192</parameter>

31 <parameter id="blockSizeX">2048</parameter>

32 <parameter id="blockSizeY">32</parameter>

33 <compute instance="impl" port="compute"/>

34 </metataskInstance>

35

36 <dataConnection>

37 <from instance="epMaster" port="inout"/>

38 <to instance="mt1" port="inout"/>

39 </dataConnection>

40 <dataConnection>

41 <from instance="mt1" port="inout"/>

42 <to instance="mt2" port="inout"/>

43 </dataConnection>

44 <dataConnection>

45 <from instance="mt2" port="inout"/>

46 <to instance="epMaster" port="inout"/>

47 </dataConnection>

48 </dataflowSectionInstance>

49 </mpiProcess>

50 </cmta>

Figure B.10 – Code XML de l’assemblage du cas d’utilisation EP-EP. La valeur des paramètres (p. ex. taille des donnée et des blocs) est fixée arbitrairement en guise d’exemple étant donné que les valeurs peuvent varier entre les expériences.

B.8.4 Cas d’utilisation ST-ST

1 <?xml version="1.0" encoding="UTF-8"?>

2

3 <cmta xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

4 xsi:noNamespaceSchemaLocation="comet-cmta.xsd">

5 <mpiProcess>

6 <entryPoint instance="stencilMaster" port="go"/>

7

8 <componentInstance id="stencilMaster" type="StencilMasterCompo">

9 <use port="sectionCtl">

10 <endPoint instance="section" port="control"/>

11 </use>

12 <attribute id="dataSizeX" type="uint64">8192</attribute>

13 <attribute id="dataSizeY" type="uint64">8192</attribute>

14 <attribute id="maxIter" type="uint64">20</attribute>

15 </componentInstance>

16

17 <componentInstance id="impl" type="Impl"/>

18

19 <dataflowSectionInstance id="section">

20 <metataskInstance id="mt1" type="StencilMt">

21 <parameter id="dataSizeX">8192</parameter>

22 <parameter id="dataSizeY">8192</parameter>

23 <parameter id="blockSizeX">1024</parameter>

24 <parameter id="blockSizeY">64</parameter>

25 <compute instance="impl" port="compute"/>

26 </metataskInstance>

27

28 <dataBufferInstance id="tmpData"/>

29 <dataBufferConnection instance="mt1" port="out" data="tmpData"/>

30

31 <metataskInstance id="mt2" type="StencilMt">

32 <parameter id="dataSizeX">8192</parameter>

33 <parameter id="dataSizeY">8192</parameter>

34 <parameter id="blockSizeX">2048</parameter>

35 <parameter id="blockSizeY">32</parameter>

36 <compute instance="impl" port="compute"/>

37 </metataskInstance>

38

39 <dataConnection>

40 <from instance="stencilMaster" port="inout"/>

41 <to instance="mt1" port="in"/>

B.8. ASSEMBLAGES HALLEYDES CAS D’UTILISATION ÉVALUÉS 181

42 </dataConnection>

43 <dataConnection>

44 <from instance="mt1" port="out"/>

45 <to instance="mt2" port="in"/>

46 </dataConnection>

47 <dataConnection>

48 <from instance="mt2" port="out"/>

49 <to instance="stencilMaster" port="inout"/>

50 </dataConnection>

51 </dataflowSectionInstance>

52 </mpiProcess>

53 </cmta>

Figure B.11 – Code XML de l’assemblage du cas d’utilisation ST-ST. La valeur des paramètres (p. ex. taille des donnée et des blocs) est fixée arbitrairement en guise d’exemple étant donné que les valeurs peuvent varier entre les expériences.

B.8.5 Cas d’utilisation TRANSP

1 <?xml version="1.0" encoding="UTF-8"?>

2

3 <cmta xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

4 xsi:noNamespaceSchemaLocation="comet-cmta.xsd">

5 <mpiProcess>

6 <entryPoint instance="TranspMaster" port="go"/>

7

8 <componentInstance id="transpMaster" type="TranspMaster">

9 <use port="sectionCtl">

10 <endPoint instance="section" port="control"/>

11 </use>

12 <attribute id="dataSizeX" type="uint64">8192</attribute>

13 <attribute id="dataSizeY" type="uint64">8192</attribute>

14 <attribute id="maxIter" type="uint64">20</attribute>

15 </componentInstance>

16

17 <componentInstance id="computeTsk" type="Impl"/>

18

19 <componentInstance id="transposeTsk" type="Impl"/>

20

21 <dataflowSectionInstance id="section">

22 <metataskInstance id="computeMt1" type="ComputeMt">

23 <parameter id="dWidth">8192</parameter>

24 <parameter id="dHeight">8192</parameter>

25 <parameter id="bHeight">512</parameter>

26 <compute instance="computeTsk" port="computeLines"/>

27 </metataskInstance>

28

29 <metataskInstance id="transposeMt1" type="TransposeMt">

30 <parameter id="dWidth">8192</parameter>

31 <parameter id="dHeight">8192</parameter>

32 <parameter id="bSizeX">16</parameter>

33 <parameter id="bSizeY">16</parameter>

34 <compute instance="transposeTsk" port="computeTransposition"/>

35 </metataskInstance>

36

37 <metataskInstance id="computeMt2" type="ComputeMt">

38 <parameter id="dWidth">8192</parameter>

39 <parameter id="dHeight">8192</parameter>

40 <parameter id="bHeight">512</parameter>

41 <compute instance="computeTsk" port="computeLines"/>

42 </metataskInstance>

43

44 <metataskInstance id="transposeMt2" type="TransposeMt">

45 <parameter id="dWidth">8192</parameter>

46 <parameter id="dHeight">8192</parameter>

47 <parameter id="bWidth">16</parameter>

48 <parameter id="bHeight">16</parameter>

49 <compute instance="transposeTsk" port="computeTransposition"/>

50 </metataskInstance>

51

52 <dataConnection>

53 <from instance="transpMaster" port="inout"/>

54 <to instance="computeMt1" port="inout"/>

55 </dataConnection>

56 <dataConnection>

57 <from instance="computeMt1" port="inout"/>

58 <to instance="transposeMt1" port="inout"/>

59 </dataConnection>

60 <dataConnection>

61 <from instance="transposeMt1" port="inout"/>

62 <to instance="computeMt2" port="inout"/>

63 </dataConnection>

64 <dataConnection>

65 <from instance="computeMt2" port="inout"/>

66 <to instance="transposeMt2" port="inout"/>

67 </dataConnection>

68 <dataConnection>

69 <from instance="transposeMt2" port="inout"/>

70 <to instance="transpMaster" port="inout"/>

71 </dataConnection>

72 </dataflowSectionInstance>

73 </mpiProcess>

74 </cmta>

FigureB.12 – Code XML de l’assemblage du cas d’utilisation TRANSP. La valeur des paramètres (p. ex. taille des donnée et des blocs) est fixée arbitrairement en guise d’exemple étant donné que les valeurs peuvent varier entre les expériences.