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.