• Aucun résultat trouvé

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

B.8. ASSEMBLAGES HALLEY DES 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ées inout 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>

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"/>

B.8. ASSEMBLAGES HALLEY DES 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"/>

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"/>

B.8. ASSEMBLAGES HALLEY DES 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>

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.