Hitmap 1.3
 All Data Structures Namespaces Files Functions Variables Typedefs Friends Macros Groups Pages
hit_com.h
Go to the documentation of this file.
1 
15 /*
16  * <license>
17  *
18  * Hitmap v1.2
19  *
20  * This software is provided to enhance knowledge and encourage progress in the scientific
21  * community. It should be used only for research and educational purposes. Any reproduction
22  * or use for commercial purpose, public redistribution, in source or binary forms, with or
23  * without modifications, is NOT ALLOWED without the previous authorization of the copyright
24  * holder. The origin of this software must not be misrepresented; you must not claim that you
25  * wrote the original software. If you use this software for any purpose (e.g. publication),
26  * a reference to the software package and the authors must be included.
27  *
28  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS" AND ANY
29  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
30  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
31  * THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
32  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
33  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
34  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
35  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37  *
38  * Copyright (c) 2007-2015, Trasgo Group, Universidad de Valladolid.
39  * All rights reserved.
40  *
41  * More information on http://trasgo.infor.uva.es/
42  *
43  * </license>
44 */
45 
46 #ifndef _HitCom_
47 #define _HitCom_
48 
49 #include <stdio.h>
50 
51 #include "hit_mpi.h"
52 #include "hit_error.h"
53 #include "hit_tile.h"
54 #include "hit_layout.h"
55 #include "hit_allocP.h"
56 
57 #ifdef __cplusplus
58  extern "C" {
59 #endif
60 /* Hit MPI ERROR TEST */
62 #define hit_mpiTestError(ok,cad) \
63  if ( ok != MPI_SUCCESS ) { \
64  fprintf(stderr,"Hit MPI RunTime-Error, Rank %d: %s - %d\n", hit_Rank, cad, ok); fflush(stderr); \
65  exit(-1); \
66  }
67 
68 /* Hit MPI BASE TYPES EQUIVALENCE */
70 typedef MPI_Datatype HitType;
72 #define HIT_CHAR MPI_CHAR
73 
74 #define HIT_INT MPI_INT
75 
76 #define HIT_FLOAT MPI_FLOAT
77 
78 #define HIT_DOUBLE MPI_DOUBLE
79 
80 #define HIT_BOOL MPI_BOOL
81 
82 typedef MPI_Aint HitAint;
83 
85 extern HitType HIT_SHAPE_SIG;
86 
87 /* HitCOM TYPES (They are private) */
89 #define HIT_COMTYPE_NULL 0
90 
91 #define HIT_SENDRECV 3
92 
93 #define HIT_REDUCE 4
94 
95 #define HIT_ALLREDUCE 5
96 
97 #define HIT_ALLTOALL 6
98 
99 #define HIT_ALLTOALLV 7
100 
101 #define HIT_BROADCAST 8
102 
103 #define HIT_SENDRECV_REPLACE 9
104 
105 #define HIT_SPARSE_UPDATE 10
106 
107 #define HIT_SPARSE_SCATTER 11
108 
109 #define HIT_ALLDISTRIBUTE 12
110 
111 #define HIT_SPARSE_SCATTER_ROWS 13
112 
113 #define HIT_ALLGATHERV 14
114 
115 
116 /* HitCOM OPERATION TYPES */
118 typedef MPI_Op HitOp;
120 typedef MPI_User_function HitReduceFunction;
121 
122 /* Hit PREDEFINED REDUCTION OPERATORS ON Tile TYPES */
123 extern HitOp HIT_OP_SUM_INT;
124 extern HitOp HIT_OP_MIN_INT;
125 extern HitOp HIT_OP_MAX_INT;
126 extern HitOp HIT_OP_SUM_DOUBLE;
127 extern HitOp HIT_OP_MIN_DOUBLE;
128 extern HitOp HIT_OP_MAX_DOUBLE;
129 
130 
132 #define HIT_ANY_TAG 0
133 
135 #define HIT_COM_MYSELF -100
136 
137 
138 /* Hit BASIC RANKS AND COMMUNICATOR GLOBAL DEFINITIONS */
140 #define hit_Rank (HIT_TOPOLOGY_INFO->selfRank)
141 
142 #define hit_NProcs (HIT_TOPOLOGY_INFO->numProcs)
143 
144 //#define hit_Comm ((MPI_Comm *) HIT_TOPOLOGY_INFO.lowLevel)
145 #define hit_Comm (HIT_TOPOLOGY_INFO->comm)
146 
147 
148 /* Hit MPI INITIALIZATION FUNCTION */
154 void hit_comInit(int *pargc, char **pargv[]);
155 
156 /* Hit MPI FINALIZATION FUNCTION */
160 void hit_comFinalize();
161 
162 
163 /* Hit COM TYPES: CONSTRUCTOR */
170 HitType hit_comType(const void *varP, HitType baseType);
171 
178 HitType hit_comTypeRec(const void *varP, HitType baseType);
179 
181 #define HIT_TYPE_NULL MPI_DATATYPE_NULL
182 
183 /* Hit COM TYPES: FREE */
187 #define hit_comFreeType(type) if (type!=HIT_TYPE_NULL) MPI_Type_free( &type );
188 
189 
190 
208 #define hit_comTypeStruct(new_type,Nstruct,n, ...) hit_comTypeStruct##n(new_type,Nstruct,__VA_ARGS__)
209 #include "hit_comTypeStruct.h"
210 
211 
212 
213 /* Hit COMMUNICATION STRUCTURE */
214 /*
215 struct HitCom;
216 struct HitComAlltoallv;
217 struct HitComSparse;
218 */
219 
225 typedef struct {
226  int commType;
227  int myself;
228  int sendTo;
229  int recvFrom;
230  int tag;
231  HitType typeSend;
232  HitType typeRecv;
233  void *dataSend;
234  void *dataRecv;
235  MPI_Comm comm;
236  MPI_Request requestSend;
237  MPI_Request requestRecv;
238  MPI_Status statusSend;
239  MPI_Status statusRecv;
240  HitOp operation;
242  int count;
245 } HitCom;
246 
247 
252 typedef struct HitComAlltoallv {
253 
254  int *sendcnts;
255  int *sdispls;
256  int *recvcnts;
257  int *rdispls;
259  struct HitComSparse * sparse;
262 
267 typedef struct HitComSparse {
268 
270  void * originData;
272  int * recv;
273  int * send;
274  int nsend;
275  int nrecv;
277  size_t baseExtent;
279  int * rows;
281 } HitComSparse;
282 
283 
284 
285 
286 
288 extern HitCom HIT_COM_NULL;
290 /* @arturo: A change in the internal representation of Request/Status object in
291  * MPICH version 3.0.2. It come back to the previous representation in
292  * later versions
293  */
294 /* @javfres: Struct initialization following C99 syntax */
295 /*
296 #define HIT_COM_NULL_STATIC { HIT_COMTYPE_NULL, MPI_PROC_NULL, MPI_PROC_NULL, MPI_PROC_NULL, \
297  0, HIT_TYPE_NULL, HIT_TYPE_NULL, NULL, NULL, MPI_COMM_NULL, \
298  MPI_REQUEST_NULL, MPI_REQUEST_NULL, \
299  { 0,0,0,0,0,{0,0} }, { 0,0,0,0,0,{0,0} }, \
300  0, 0, NULL }
301  */
302 /*
303 #define HIT_COM_NULL_STATIC { HIT_COMTYPE_NULL, MPI_PROC_NULL, MPI_PROC_NULL, MPI_PROC_NULL, \
304  0, HIT_TYPE_NULL, HIT_TYPE_NULL, NULL, NULL, MPI_COMM_NULL, \
305  MPI_REQUEST_NULL, MPI_REQUEST_NULL, { 0,0,0,0,0 }, \
306  { 0,0,0,0,0 },0,0,NULL}
307 */
308 #define HIT_COM_NULL_STATIC { \
309  .commType = HIT_COMTYPE_NULL, \
310  .myself=MPI_PROC_NULL, \
311  .sendTo=MPI_PROC_NULL, \
312  .recvFrom=MPI_PROC_NULL, \
313  .tag=0, \
314  .typeSend=HIT_TYPE_NULL, \
315  .typeRecv=HIT_TYPE_NULL, \
316  .dataSend=NULL, \
317  .dataRecv=NULL, \
318  .comm=MPI_COMM_NULL, \
319  .requestSend=MPI_REQUEST_NULL, \
320  .requestRecv=MPI_REQUEST_NULL, \
321  .operation=0, \
322  .count=0, \
323  .alltoallv=NULL}
324 
325 
326 
330 #define HIT_COM_ALLTOALLV_NULL_STATIC {NULL,NULL,NULL,NULL,NULL}
331 
335 #define HIT_COM_SPARSE_NULL_STATIC {HIT_SHAPE_NULL_STATIC, NULL, NULL, NULL, 0, 0, 0, NULL}
336 
337 
338 /* Hit COM: COMMIT COMMUNICATIONS IN SEVERAL FORMS */
339 /* GENERIC DOUBLE COMMUNICATION COMMIT */
340 
341 /* Constants for specifying if the selection is made with array or tile coordinates */
343 #define HIT_COM_TILECOORDS 0x43
344 
345 #define HIT_COM_ARRAYCOORDS 0x44
346 
358 #define hit_comSendRecv(lay, sendTo, tilePSend, receiveFrom, tilePRecv, baseType) hit_comSendRecvSelect(lay, sendTo, tilePSend, HIT_SHAPE_WHOLE, HIT_COM_TILECOORDS, receiveFrom, tilePRecv, HIT_SHAPE_WHOLE, HIT_COM_TILECOORDS, baseType)
359 
371 #define hit_comSendRecvTag(lay, sendTo, tilePSend, receiveFrom, tilePRecv, baseType, tag) hit_comSendRecvSelectTag(lay, sendTo, tilePSend, HIT_SHAPE_WHOLE, HIT_COM_TILECOORDS, receiveFrom, tilePRecv, HIT_SHAPE_WHOLE, HIT_COM_TILECOORDS, baseType, tag)
372 
387 #define hit_comSendRecvSelect(lay, sendTo, tilePSend, selectionSend, modeSelectSend, receiveFrom, tilePRecv, selectionRecv, modeSelectRecv, baseType) hit_comSendRecvSelectTag(lay, sendTo, tilePSend, selectionSend, modeSelectSend, receiveFrom, tilePRecv, selectionRecv, modeSelectRecv, baseType, HIT_ANY_TAG)
388 
404 HitCom hit_comSendRecvSelectTag(HitLayout lay, HitRanks sendTo, const void *tilePSend, HitShape selectionSend, int modeSelectSend, HitRanks receiveFrom, const void *tilePRecv, HitShape selectionRecv, int modeSelectRecv, HitType baseType, int tag);
405 
406 /* EXPLICIT SEND, RECV */
419 #define hit_comSendSelectTag(lay, sendTo, tileP, selection, modeSelect, baseType, tag) hit_comSendRecvSelectTag(lay, sendTo, tileP, selection, modeSelect, HIT_RANKS_NULL, &HIT_TILE_NULL, HIT_SHAPE_WHOLE, HIT_COM_TILECOORDS, baseType, tag)
420 
430 #define hit_comSendTag(lay, sendTo, tileP, baseType, tag) hit_comSendRecvSelectTag(lay, sendTo, tileP, HIT_SHAPE_WHOLE, HIT_COM_TILECOORDS, HIT_RANKS_NULL, &HIT_TILE_NULL, HIT_SHAPE_WHOLE, HIT_COM_TILECOORDS, baseType, tag)
431 
442 #define hit_comSendSelect(lay, sendTo, tileP, selection, modeSelect, baseType) hit_comSendRecvSelect(lay, sendTo, tileP, selection, modeSelect, HIT_RANKS_NULL, &HIT_TILE_NULL, HIT_SHAPE_WHOLE, HIT_COM_TILECOORDS, baseType)
443 
452 #define hit_comSend(lay, sendTo, tileP, baseType) hit_comSendRecvSelect(lay, sendTo, tileP, HIT_SHAPE_WHOLE, HIT_COM_TILECOORDS, HIT_RANKS_NULL, &HIT_TILE_NULL, HIT_SHAPE_WHOLE, HIT_COM_TILECOORDS, baseType)
453 
466 #define hit_comRecvSelectTag(lay, receiveFrom, tileP, selection, modeSelect, baseType, tag) hit_comSendRecvSelectTag(lay, HIT_RANKS_NULL, &HIT_TILE_NULL, HIT_SHAPE_WHOLE, HIT_COM_TILECOORDS, receiveFrom, tileP, selection, modeSelect, baseType, tag)
467 
477 #define hit_comRecvTag(lay, receiveFrom, tileP, baseType, tag) hit_comSendRecvSelect(lay, HIT_RANKS_NULL, &HIT_TILE_NULL, HIT_SHAPE_WHOLE, HIT_COM_TILECOORDS, receiveFrom, tileP, HIT_SHAPE_WHOLE, HIT_COM_TILECOORDS, baseType, tag)
478 
489 #define hit_comRecvSelect(lay, receiveFrom, tileP, selection, modeSelect, baseType) hit_comSendRecvSelect(lay, HIT_RANKS_NULL, &HIT_TILE_NULL, HIT_SHAPE_WHOLE, HIT_COM_TILECOORDS, receiveFrom, tileP, selection, modeSelect, baseType)
490 
499 #define hit_comRecv(lay, receiveFrom, tileP, baseType) hit_comSendRecvSelect(lay, HIT_RANKS_NULL, &HIT_TILE_NULL, HIT_SHAPE_WHOLE, HIT_COM_TILECOORDS, receiveFrom, tileP, HIT_SHAPE_WHOLE, HIT_COM_TILECOORDS, baseType)
500 
509 #define hit_comUpdateSendTile(comm, sendTile) comm.dataSend=sendTile.data
510 
519 #define hit_comUpdateRecvTile(comm, recvTile) comm.dataRecv=recvTile.data
520 
529 #define hit_comUpdateSendTo(comm, topo, SendTo) comm.sendTo=hit_topRankInternal(topo,SendTo)
530 
539 #define hit_comUpdateRecvFrom(comm, topo, RecvFrom) comm.recvFrom=hit_topRankInternal(topo,RecvFrom)
540 
549 //#define hit_comUpdateDimSendTo(comm, dim, SendTo) comm.sendTo=SendTo.rank[dim]
550 #define hit_comUpdateDimSendTo(comm, dim, SendTo) comm.sendTo=SendTo
551 
560 //#define hit_comUpdateDimRecvFrom(comm, dim, RecvFrom) comm.recvFrom=RecvFrom.rank[dim]
561 #define hit_comUpdateDimRecvFrom(comm, dim, RecvFrom) comm.recvFrom=RecvFrom
562 
570 #define hit_comUpdateTag(comm, Tag) comm.tag=Tag
571 
572 
579 void hit_comUpdateOriginData(HitCom * com, const void * tileP);
580 
581 
587 #define hit_comAllowDims(lay) {\
588  int hit_i;\
589  for (hit_i=0;hit_i<hit_layNumDims(lay); hit_i++) hit_comAllowDim(&lay,hit_i); \
590  }
591 
592 
600 void hit_comAllowDim(HitLayout * lay, int dim);
601 
602 
603 
604 /* SHIFT DATA ACROSS PROCESSORS: EVERYONE SENDS AND RECEIVES */
619 #define hit_comShiftDimSelect(lay, dim, shift, tileP, selection, modeSelect, baseType, tag) hit_comSendRecvReplaceSelectTag(lay, hit_layNeighbor(lay,dim,shift), tileP, selection, modeSelect, hit_layNeighbor(lay,dim,-shift), baseType, tag)
620 
633 HitCom hit_comSendRecvReplaceSelectTag(HitLayout lay, HitRanks sendTo, const void *tileP, HitShape selection, int modeSelect, HitRanks receiveFrom, HitType baseType, int tag);
634 
646 #define hit_comShiftDim(lay, dim, shift, tileP, baseType) hit_comShiftDimSelect(lay, dim, shift, tileP, HIT_SHAPE_WHOLE, HIT_COM_TILECOORDS, baseType, HIT_ANY_TAG)
647 
661 #define hit_comShiftDimAsync(lay, dim, shift, tileSend, tileRecv, baseType, tag) hit_comSendRecvTag(lay, hit_layNeighbor( lay, dim, shift ), tileSend, hit_layNeighbor( lay, dim, -shift ), tileRecv, baseType, tag)
662 
663 
673 #define hit_comBroadcast(lay, root, tile, baseType) hit_comBroadcastSelect(lay, root, tile, HIT_SHAPE_WHOLE, HIT_COM_TILECOORDS, baseType)
674 
685 HitCom hit_comBroadcastSelect(HitLayout lay, HitRanks root, const void *tile, HitShape selection, int modeSelect, HitType baseType);
696 #define hit_comBroadcastDim(lay, dim, root, tile, baseType) hit_comBroadcastDimSelect(lay, dim, root, tile, HIT_SHAPE_WHOLE, HIT_COM_TILECOORDS, baseType)
697 
709 HitCom hit_comBroadcastDimSelect(HitLayout lay, int dim, int root, const void *tile, HitShape selection, int modeSelect, HitType baseType);
710 
711 // NOTE: If HitRanks is NULL -> AllReduce
712 
725 #define hit_comReduce(lay, root, tilePSend, tilePRecv, baseType, operation) hit_comReduceSelect(lay, root, tilePSend, HIT_SHAPE_WHOLE, HIT_COM_TILECOORDS, tilePRecv, HIT_SHAPE_WHOLE, HIT_COM_TILECOORDS, baseType, operation)
726 
742 HitCom hit_comReduceSelect(HitLayout lay, HitRanks root, const void * tilePSend, HitShape selectionSend, int modeSelectSend, const void * tilePRecv, HitShape selectionRecv, int modeSelectRecv, HitType baseType, HitOp operation);
756 #define hit_comReduceDim(lay, dim, root, tilePSend, tilePRecv, baseType, operation) hit_comReduceDimSelect(lay, dim, root, tilePSend, HIT_SHAPE_WHOLE, HIT_COM_TILECOORDS, tilePRecv, HIT_SHAPE_WHOLE, HIT_COM_TILECOORDS, baseType, operation)
757 
774 HitCom hit_comReduceDimSelect(HitLayout lay, int dim, HitRanks root, const void * tilePSend, HitShape selectionSend, int modeSelectSend, const void * tilePRecv, HitShape selectionRecv, int modeSelectRecv, HitType baseType, HitOp operation);
775 
785 #define hit_comAlltoall(lay, tilePSend, tilePRecv, baseType, count) hit_comAlltoallSelect(lay, tilePSend, HIT_SHAPE_WHOLE, HIT_COM_TILECOORDS, tilePRecv, HIT_SHAPE_WHOLE, HIT_COM_TILECOORDS, baseType, count)
786 
800 HitCom hit_comAlltoallSelect(HitLayout lay, const void * tilePSend, HitShape selectionSend, int modeSelectSend, const void * tilePRecv, HitShape selectionRecv, int modeSelectRecv, HitType baseType, int count);
801 
812 #define hit_comAlltoallv(lay, tilePSend, selectionSend, tilePRecv, selectionRecv, baseType) hit_comAlltoallSelectv(lay, tilePSend, selectionSend, HIT_COM_TILECOORDS, tilePRecv, selectionRecv, HIT_COM_TILECOORDS, baseType)
813 
825 HitCom hit_comAlltoallSelectv(HitLayout lay, const void * tilePSend, HitShape * selectionSend, int modeSelectSend, const void * tilePRecv, HitShape * selectionRecv, int modeSelectRecv, HitType baseType);
826 
827 
838 HitCom hit_comSparseUpdate(HitLayout lay, const void * tileP, HitType baseType);
839 HitCom hit_comSparseUpdateCSR(HitLayout lay, const void * tileP, HitType baseType);
840 HitCom hit_comSparseUpdateBitmap(HitLayout lay, const void * tileP, HitType baseType);
841 
852 #define hit_comSparseScatter(lay, tilePSend, tilePRecv, baseType) hit_comSparseScatterInternal(lay, tilePSend, tilePRecv, baseType, __FILE__, __LINE__)
853 HitCom hit_comSparseScatterInternal(HitLayout lay, const void * tilePSend, const void * tilePRecv, HitType baseType, const char * file, int line);
854 
863 #define hit_comSparseScatterRows(lay, tilePSend, tilePRecv, baseType) hit_comSparseScatterRowsInternal(lay, tilePSend, tilePRecv, baseType, __FILE__, __LINE__)
864 HitCom hit_comSparseScatterRowsInternal(HitLayout lay, const void * tilePSend, const void * tilePRecv, HitType baseType, const char * file, int line);
865 
866 
879 // @arturo: TEST, redistribute function that internally allocates and substitutes tile by new buffer
880 HitCom hit_comAllDistribute(HitLayout lay, const void * tilePSend, int * count, const void * tilePRecv, HitType baseType);
881 
882 
891 #define hit_comAllGatherv(lay, tilePSend, tilePRecv, baseType) hit_comAllGathervInternal(lay, tilePSend, tilePRecv, baseType, __FILE__, __LINE__)
892 HitCom hit_comAllGathervInternal(HitLayout lay, const void * tilePSend, const void * tilePRecv, HitType baseType, const char * file, int line);
893 
894 
895 /* Hit COM: FREE COMMUNICATION ISSUE */
900 void hit_comFree(HitCom issue);
901 //#define hit_comFree( issue ) { hit_comFreeType( (issue).typeSend ); hit_comFreeType( (issue).typeRecv ); }
902 
903 
904 /* Hit COM: DECLARE TAGS */
909 #define hit_comTagSet( ... ) enum { __VA_ARGS__ }
910 
911 
912 /* Hit COM ACTIVATE/WAIT FOR COMMUNICATION */
917 void hit_comStartSend(HitCom *issue);
922 void hit_comEndSend(HitCom *issue);
927 void hit_comDoSend(HitCom *issue);
928 
933 void hit_comDoRecv(HitCom *issue);
938 void hit_comStartRecv(HitCom *issue);
943 void hit_comEndRecv(HitCom *issue);
944 
949 void hit_comDoSendRecvReplace(HitCom *issue);
950 
955 void hit_comDoAlltoall(HitCom *issue);
960 void hit_comDoAlltoallv(HitCom *issue);
965 void hit_comDoReduce(HitCom *issue);
970 void hit_comDoBroadcast(HitCom *issue);
971 
976 void hit_comDoSparseUpdate(HitCom *issue);
977 
978 
983 #define hit_comDoSendRecv( comm ) { \
984  hit_comStartSend( &(comm) ); \
985  hit_comDoRecv( &(comm) ); \
986  hit_comEndSend( &(comm) ); \
987 }
988 
989 
990 /* Hit MPI COMM DO A COMPLETE COMM. ISSUE */
996 void hit_comDo(HitCom *issue);
997 
998 /* Hit MPI COMM DO A COMPLETE COMM. ISSUE, AND FREE THE COMM OBJECT */
1003 #define hit_comDoOnce( com ) { HitCom __HIT_COM__ = com; hit_comDo( & __HIT_COM__ ); hit_comFree( __HIT_COM__ ); }
1004 
1005 
1006 #undef hit_error
1007 
1012 #define hit_error(name,file,numLine) \
1013  { \
1014  fprintf(stderr,"Hit Programmer, RunTime-Error Rank(%d): %s, in %s[%d]\n", hit_Rank, name, file, numLine); \
1015  MPI_Finalize(); \
1016  exit( HIT_ERR_USER ); \
1017  }
1018 
1019 
1020 /* Com Barrier, use the active communicator in layout */
1025 // @arturo Mar 2013
1026 //#define hit_comBarrier( lay ) MPI_Barrier( *(MPI_Comm *) lay.pTopology[0].lowLevel )
1027 #define hit_comBarrier( lay ) MPI_Barrier( lay.pTopology[0]->comm )
1028 
1029 
1030 /* REDUCE HIT OPERATIONS */
1036 #define hit_comOp(function,operation) MPI_Op_create((HitReduceFunction *)function, 1, &(operation) );
1037 
1042 #define hit_comOpNoCommutative(function,operation) MPI_Op_create(function, 0, &(operation) );
1043 
1048 #define hit_comOpFree( operation ) MPI_Op_free( &(operation) );
1049 
1055 void hit_comOpSumDouble (void *, void *, int *, HitType *);
1056 
1062 void hit_comOpMaxDouble (void *, void *, int *, HitType *);
1063 
1069 void hit_comOpMinDouble (void *, void *, int *, HitType *);
1070 
1076 void hit_comOpSumInt (void *, void *, int *, HitType *);
1082 void hit_comOpMinInt (void *, void *, int *, HitType *);
1088 void hit_comOpMaxInt (void *, void *, int *, HitType *);
1089 
1090 
1092 typedef void (*HitComOpFunction) (void *, void * );
1093 
1098 void hit_comOpGenericAnyType( void * in, void * inout, HitType datatype, int offset, size_t tam, HitComOpFunction f );
1099 
1100 
1122 #ifdef __cplusplus
1123 }
1124 #endif
1125 
1126 /* END OF HEADER FILE _HitCom_ */
1127 #endif
void hit_comDoSend(HitCom *issue)
Definition: hit_com.c:2073
HitCom hit_comSparseUpdateBitmap(HitLayout lay, const void *tileP, HitType baseType)
Definition: hit_com.c:1324
HitOp HIT_OP_MIN_DOUBLE
Definition: hit_com.c:67
void hit_comDoReduce(HitCom *issue)
Definition: hit_com.c:2126
MPI_Comm comm
Definition: hit_com.h:235
MPI_Op HitOp
Definition: hit_com.h:118
HitType hit_comTypeRec(const void *varP, HitType baseType)
Definition: hit_com.c:290
struct HitComSparse * sparse
Definition: hit_com.h:259
int * send
Definition: hit_com.h:273
HitCom hit_comSparseUpdate(HitLayout lay, const void *tileP, HitType baseType)
Definition: hit_com.c:1084
HitComAlltoallv HIT_COM_ALLTOALLV_NULL
Definition: hit_com.c:59
void hit_comOpSumDouble(void *, void *, int *, HitType *)
Definition: hit_com.c:2665
MPI_Request requestSend
Definition: hit_com.h:236
HitOp HIT_OP_MAX_DOUBLE
Definition: hit_com.c:68
HitComSparse HIT_COM_SPARSE_NULL
Definition: hit_com.c:60
HitOp HIT_OP_SUM_INT
Definition: hit_com.c:63
HitCom hit_comBroadcastSelect(HitLayout lay, HitRanks root, const void *tile, HitShape selection, int modeSelect, HitType baseType)
Definition: hit_com.c:731
HitCom hit_comAllGathervInternal(HitLayout lay, const void *tilePSend, const void *tilePRecv, HitType baseType, const char *file, int line)
Definition: hit_com.c:996
void hit_comOpMaxInt(void *, void *, int *, HitType *)
Definition: hit_com.c:2687
void hit_comDoSendRecvReplace(HitCom *issue)
Definition: hit_com.c:2116
void hit_comEndRecv(HitCom *issue)
Definition: hit_com.c:2104
HitOp HIT_OP_MIN_INT
Definition: hit_com.c:64
void hit_comFree(HitCom issue)
Definition: hit_com.c:1995
HitCom hit_comSendRecvSelectTag(HitLayout lay, HitRanks sendTo, const void *tilePSend, HitShape selectionSend, int modeSelectSend, HitRanks receiveFrom, const void *tilePRecv, HitShape selectionRecv, int modeSelectRecv, HitType baseType, int tag)
Definition: hit_com.c:450
void hit_comDo(HitCom *issue)
Definition: hit_com.c:2408
int count
Definition: hit_com.h:242
HitType HIT_SHAPE_SIG
Definition: hit_com.c:71
MPI_Status statusRecv
Definition: hit_com.h:239
void hit_comStartRecv(HitCom *issue)
Definition: hit_com.c:2094
HitCom hit_comSparseScatterInternal(HitLayout lay, const void *tilePSend, const void *tilePRecv, HitType baseType, const char *file, int line)
Definition: hit_com.c:1543
HitCom hit_comReduceSelect(HitLayout lay, HitRanks root, const void *tilePSend, HitShape selectionSend, int modeSelectSend, const void *tilePRecv, HitShape selectionRecv, int modeSelectRecv, HitType baseType, HitOp operation)
Definition: hit_com.c:585
MPI_User_function HitReduceFunction
Definition: hit_com.h:120
HitType typeSend
Definition: hit_com.h:231
HitCom hit_comAllDistribute(HitLayout lay, const void *tilePSend, int *count, const void *tilePRecv, HitType baseType)
Definition: hit_com.c:1651
HitCom hit_comSparseUpdateCSR(HitLayout lay, const void *tileP, HitType baseType)
Definition: hit_com.c:1109
MPI_Request requestRecv
Definition: hit_com.h:237
int * rows
Definition: hit_com.h:279
void * dataSend
Definition: hit_com.h:233
void hit_comEndSend(HitCom *issue)
Definition: hit_com.c:2062
HitCom hit_comAlltoallSelectv(HitLayout lay, const void *tilePSend, HitShape *selectionSend, int modeSelectSend, const void *tilePRecv, HitShape *selectionRecv, int modeSelectRecv, HitType baseType)
Definition: hit_com.c:896
void * originData
Definition: hit_com.h:270
int * sendcnts
Definition: hit_com.h:254
void hit_comOpSumInt(void *, void *, int *, HitType *)
Definition: hit_com.c:2683
int * recvcnts
Definition: hit_com.h:256
int sendTo
Definition: hit_com.h:228
void(* HitComOpFunction)(void *, void *)
Definition: hit_com.h:1092
void hit_comDoAlltoallv(HitCom *issue)
Definition: hit_com.c:2165
void hit_comDoAlltoall(HitCom *issue)
Definition: hit_com.c:2155
int * recv
Definition: hit_com.h:272
HitCom hit_comBroadcastDimSelect(HitLayout lay, int dim, int root, const void *tile, HitShape selection, int modeSelect, HitType baseType)
Definition: hit_com.c:779
void hit_comUpdateOriginData(HitCom *com, const void *tileP)
Definition: hit_com.c:1985
int * sdispls
Definition: hit_com.h:255
struct HitComAlltoallv HitComAlltoallv
HitType hit_comType(const void *varP, HitType baseType)
Definition: hit_com.c:189
int commType
Definition: hit_com.h:226
int recvFrom
Definition: hit_com.h:229
int * rdispls
Definition: hit_com.h:257
Hitmap functions to allocate memory.
int tag
Definition: hit_com.h:230
MPI_Datatype HitType
Definition: hit_com.h:70
MPI_Aint HitAint
Definition: hit_com.h:82
struct HitComSparse HitComSparse
void hit_comOpMinInt(void *, void *, int *, HitType *)
Definition: hit_com.c:2691
struct HitComAlltoallv * alltoallv
Definition: hit_com.h:243
HitCom hit_comAlltoallSelect(HitLayout lay, const void *tilePSend, HitShape selectionSend, int modeSelectSend, const void *tilePRecv, HitShape selectionRecv, int modeSelectRecv, HitType baseType, int count)
Definition: hit_com.c:834
HitShape shape
Definition: hit_com.h:269
HitOp HIT_OP_SUM_DOUBLE
Definition: hit_com.c:66
void hit_comInit(int *pargc, char **pargv[])
Definition: hit_com.c:111
void hit_comDoBroadcast(HitCom *issue)
Definition: hit_com.c:2143
void hit_comOpMaxDouble(void *, void *, int *, HitType *)
Definition: hit_com.c:2671
size_t baseExtent
Definition: hit_com.h:277
void * dataRecv
Definition: hit_com.h:234
HitCom HIT_COM_NULL
Definition: hit_com.c:58
int myself
Definition: hit_com.h:227
HitCom hit_comSendRecvReplaceSelectTag(HitLayout lay, HitRanks sendTo, const void *tileP, HitShape selection, int modeSelect, HitRanks receiveFrom, HitType baseType, int tag)
Definition: hit_com.c:393
void hit_comOpGenericAnyType(void *in, void *inout, HitType datatype, int offset, size_t tam, HitComOpFunction f)
Definition: hit_com.c:2552
HitCom hit_comSparseScatterRowsInternal(HitLayout lay, const void *tilePSend, const void *tilePRecv, HitType baseType, const char *file, int line)
Definition: hit_com.c:1764
HitType typeRecv
Definition: hit_com.h:232
void hit_comDoSparseUpdate(HitCom *issue)
Definition: hit_com.c:2259
HitCom hit_comReduceDimSelect(HitLayout lay, int dim, HitRanks root, const void *tilePSend, HitShape selectionSend, int modeSelectSend, const void *tilePRecv, HitShape selectionRecv, int modeSelectRecv, HitType baseType, HitOp operation)
Definition: hit_com.c:660
void hit_comAllowDim(HitLayout *lay, int dim)
Definition: hit_com.c:367
HitLayout lay
Definition: heat.c:107
HitOp operation
Definition: hit_com.h:240
#define tag(dir)
Definition: mg.c:191
MPI_Status statusSend
Definition: hit_com.h:238
HitOp HIT_OP_MAX_INT
Definition: hit_com.c:65
void hit_comFinalize()
Definition: hit_com.c:159
void hit_comOpMinDouble(void *, void *, int *, HitType *)
Definition: hit_com.c:2677
void hit_comDoRecv(HitCom *issue)
Definition: hit_com.c:2084
void hit_comStartSend(HitCom *issue)
Definition: hit_com.c:2051