80 static void mpi_error_handler(MPI_Comm *
comm,
int *err, ... ){
91 MPI_Initialized(&initialized);
94 MPI_Error_string(*err, array, &lenght);
101 printf(
"\x1b[31m %s \n \x1b[35m %s \x1b[0m",array,
get_gdb_trace());
103 printf(
"\x1b[31m %s \n",array);
114 int mpi_provided_thread;
115 int ok = MPI_Init_thread( pargc, pargv, MPI_THREAD_MULTIPLE, &mpi_provided_thread );
151 ok = MPI_Type_contiguous( HIT_MAXDIMS * HIT_SIG_NUM_FIELDS + 1, MPI_INT, &
HIT_SHAPE_SIG );
166 hit_warnInternal( __FUNCTION__,
"Not all topologies or layouts have been deallocted",
"", __FILE__, __LINE__);
192 int dim,numTypes, contiguous;
198 if (var.acumCard == var.origAcumCard[0]) {
201 if (MPI_SUCCESS != MPI_Type_contiguous(var.acumCard, baseType, &newType))
202 hit_error(
"MPI_Type_contiguous", __FILE__, __LINE__);
203 if (MPI_SUCCESS != MPI_Type_commit(&newType))
204 hit_error(
"MPI_Type_commit", __FILE__, __LINE__);
215 MPI_Type_extent(baseType, &baseExtent);
220 int partialAcumCard = 1;
222 for (dim=numTypes-1; dim >=0; dim-- ) {
226 printf(
"Contiguous type for dim %d, with %d total elements\n", dim, partialAcumCard); fflush(stdout);
229 if (MPI_SUCCESS != MPI_Type_contiguous(
hit_tileDimCard(var,dim), prevType,
231 hit_error(
"MPI_Type_contiguous", __FILE__, __LINE__);
235 if ( partialAcumCard != var.origAcumCard[dim]) contiguous = 0;
241 printf(
"Hvector type for dim %d, Card: %d, stride: %d\n", dim, var.card[dim], baseExtent*var.origAcumCard[dim+1]*
hit_tileDimStride(var,dim)
245 if (MPI_SUCCESS != MPI_Type_create_hvector(var.card[dim], 1,
246 baseExtent*var.origAcumCard[dim+1]*
hit_tileDimSig(var,dim).stride,
247 prevType, &(aux[dim])) )
248 hit_error(
"MPI_Type_create_hvector", __FILE__, __LINE__);
254 printf(
"freeing type resources\n"); fflush(stdout);
258 for (dim=numTypes-1; dim >0; dim-- ) {
263 printf(
"commited hit type %d\n",newType);
280 while ( var->hierDepth > 0 ) {
300 if ( var.memStatus == HIT_MS_NULL ||
hit_tileDims(var)==0 ){
302 printf(
"hit_comTypeRec: NULL type, Tile is NULL or dims == 0\n");
307 if( var.hierDepth > 0 ) {
309 hit_malloc(addresses, MPI_Aint, var.acumCard );
320 memcpy(max,var.card,(
size_t)
hit_tileDims(var) *
sizeof(
int));
324 printf(
"Multilevel Struct type for acumCard: %d\n", var.acumCard ); fflush(stdout);
326 for(i=0;i<var.acumCard;i++) {
329 offset+=ind[j]*var.qstride[j]*var.origAcumCard[j+1];
331 auxtile=(
HitTile *)( (
char *)var.data+offset*(int)var.baseExtent );
333 types[i]=auxtypes[i];
335 MPI_Get_address(data,&addresses[i]);
339 ind[j]=(ind[j]+1)%max[j];
341 }
while(j<
hit_tileDims(var) && ind[j-1]==0 && max[j]!=0);
343 for(i=var.acumCard-1;i>=0;i--) addresses[i]-=addresses[0];
344 MPI_Type_create_struct(var.acumCard,sizes,addresses,types,&newType);
345 MPI_Type_commit(&newType);
355 if (MPI_SUCCESS != MPI_Type_commit(&newType))
356 hit_error(
"Commit last type", __FILE__, __LINE__);
359 printf(
"commited hit type %d\n",newType);
370 HitPTopology *ptopo = NULL;
377 int colour=0, i, acum = 1;
379 if(i!=dim) colour+= acum * activeRanks.
rank[i];
422 if ( tile->memStatus == HIT_MS_NULL || tile->memStatus == HIT_MS_NOMEM ||
hit_tileDims(*tile)==0 )
return HIT_COM_NULL;
452 const void *tilePSend,
456 const void *tilePRecv,
487 printf(
"%d no sending\n",
hit_Rank); fflush(stdout);
489 newCom.
sendTo = MPI_PROC_NULL;
497 printf(
"[%d] Create Send Selection -- SendTo: %d\n",
hit_Rank, newCom.
sendTo); fflush(stdout);
502 if ( tileSend->memStatus == HIT_MS_NULL || tileSend->memStatus == HIT_MS_NOMEM ||
hit_tileDims(*tileSend)==0 )
return HIT_COM_NULL;
509 printf(
"send select out of boundary\n"); fflush(stdout);
530 printf(
"%d no reception\n",
hit_Rank); fflush(stdout);
539 printf(
"[%d] Create Recv Selection -- RecvFrom: %d\n",
hit_Rank, newCom.
recvFrom); fflush(stdout);
544 if ( tileRecv->memStatus == HIT_MS_NULL || tileRecv->memStatus == HIT_MS_NOMEM ||
hit_tileDims(*tileRecv)==0 )
return HIT_COM_NULL;
552 printf(
"recv select out of boundary\n"); fflush(stdout);
565 printf(
"[%d] communication created\n",
hit_Rank); fflush(stdout);
587 const void * tilePSend,
590 const void * tilePRecv,
620 if ( tileSend->memStatus == HIT_MS_NULL ) {
636 if ( tileRecv->memStatus == HIT_MS_NULL || tileRecv->memStatus == HIT_MS_NOMEM ||
hit_tileDims(*tileRecv)==0 )
return HIT_COM_NULL;
663 const void * tilePSend,
667 const void * tilePRecv,
696 if ( tileSend->memStatus == HIT_MS_NULL || tileSend->memStatus == HIT_MS_NOMEM ||
hit_tileDims(*tileSend)==0 )
return HIT_COM_NULL;
708 if ( tileRecv->memStatus == HIT_MS_NULL || tileRecv->memStatus == HIT_MS_NOMEM ||
hit_tileDims(*tileRecv)==0 )
return HIT_COM_NULL;
760 if ( tile->memStatus == HIT_MS_NULL || tile->memStatus == HIT_MS_NOMEM ||
hit_tileDims(*tile)==0 )
return HIT_COM_NULL;
789 if ( tile->memStatus == HIT_MS_NULL || tile->memStatus == HIT_MS_NOMEM ||
hit_tileDims(*tile)==0 )
return HIT_COM_NULL;
817 fprintf(stderr,
"Hit Warning: hit_comBroadcastDimSelect: Unknown constant for coordinate type\n");
835 const void * tilePSend,
838 const void * tilePRecv,
863 if ( tileSend->memStatus == HIT_MS_NULL || tileSend->memStatus == HIT_MS_NOMEM ||
hit_tileDims(*tileSend)==0 )
return HIT_COM_NULL;
875 if ( tileRecv->memStatus == HIT_MS_NULL || tileRecv->memStatus == HIT_MS_NOMEM ||
hit_tileDims(*tileRecv)==0 )
return HIT_COM_NULL;
888 newCom.
count = count;
897 const void * tilePSend,
900 const void * tilePRecv,
912 *(newCom.
alltoallv) = HIT_COM_ALLTOALLV_NULL;
954 for(i=0; i<numProcs; i++){
1007 *(newCom.
alltoallv) = HIT_COM_ALLTOALLV_NULL;
1047 for(i=0; i<numProcs; i++){
1090 switch(hit_tileClass(*tile)){
1096 hit_errInternal(__func__,
"Unsupported shape type",
"", __FILE__, __LINE__);
1104 #ifdef DEBUG_LAY_METIS
1105 #define debug(...) { if( hit_Rank == 0 ) { printf(__VA_ARGS__); fflush(stdout); }}
1106 #define debugall(...) { printf(__VA_ARGS__);}
1115 if(!lay.
active)
return newCom;
1119 *(newCom.
alltoallv) = HIT_COM_ALLTOALLV_NULL;
1167 if(part[i] == lay.
group){
1201 if( local[i] && part[i] != lay.
group){
1202 recvcnts[part[i]] ++;
1208 for(i=1;i<numProcs;i++){
1209 recvdispls[i] = recvdispls[i-1] + recvcnts[i-1];
1220 if( local[i] && part[i] != lay.
group){
1227 #ifdef DEBUG_LAY_METIS
1228 { sleep(
hit_Rank); debugall(
"I recv: [");
1230 for(p=0;p<numProcs;p++){
1231 debugall(
"p%d(%d): ",p,recvcnts[p]);
1232 for(i=0;i<recvcnts[p];i++){
1233 debugall(
"%d ",recv[ recvdispls[p] + i ]);
1251 int ok = MPI_Alltoall(recvcnts, 1, MPI_INT, sendcnts, 1, MPI_INT, comm);
1255 for(i=1;i<numProcs;i++){
1256 senddispls[i] = senddispls[i-1] + sendcnts[i-1];
1261 hit_malloc(send,
int, senddispls[numProcs-1] + sendcnts[numProcs-1] );
1266 MPI_Alltoallv(recv, recvcnts, recvdispls,
1267 MPI_INT, send, sendcnts,
1268 senddispls, MPI_INT, comm);
1272 #ifdef DEBUG_LAY_METIS
1273 { sleep(
hit_Rank); debugall(
"I send: [");
1275 for(p=0;p<numProcs;p++){
1276 debugall(
"p%d(%d): ",p,sendcnts[p]);
1277 for(i=0;i<sendcnts[p];i++){
1278 debugall(
"%d ",send[ senddispls[p] + i ]);
1329 if(!lay.
active)
return newCom;
1333 *(newCom.
alltoallv) = HIT_COM_ALLTOALLV_NULL;
1381 if(part[i] == lay.
group){
1416 if( local[i] && part[i] != lay.
group){
1417 recvcnts[part[i]] ++;
1423 for(i=1;i<numProcs;i++){
1424 recvdispls[i] = recvdispls[i-1] + recvcnts[i-1];
1435 if( local[i] && part[i] != lay.
group){
1442 #ifdef DEBUG_LAY_METIS
1443 { sleep(
hit_Rank); debugall(
"I recv: [");
1445 for(p=0;p<numProcs;p++){
1446 debugall(
"p%d(%d): ",p,recvcnts[p]);
1447 for(i=0;i<recvcnts[p];i++){
1448 debugall(
"%d ",recv[ recvdispls[p] + i ]);
1465 int ok = MPI_Alltoall(recvcnts, 1, MPI_INT, sendcnts, 1, MPI_INT, comm);
1469 for(i=1;i<numProcs;i++){
1470 senddispls[i] = senddispls[i-1] + sendcnts[i-1];
1477 hit_malloc(send,
int, senddispls[numProcs-1] + sendcnts[numProcs-1] );
1480 MPI_Alltoallv(recv, recvcnts, recvdispls,
1481 MPI_INT, send, sendcnts,
1482 senddispls, MPI_INT, comm);
1487 #ifdef DEBUG_LAY_METIS
1488 { sleep(
hit_Rank); debugall(
"I send: [");
1490 for(p=0;p<numProcs;p++){
1491 debugall(
"p%d(%d): ",p,sendcnts[p]);
1492 for(i=0;i<sendcnts[p];i++){
1493 debugall(
"%d ",send[ senddispls[p] + i ]);
1558 hit_errInternal(__func__,
"Different HitTile classes",
"", file, line);
1562 if(hit_tileClass(*tileRecv) != HIT_GC_TILE && hit_tileClass(*tileRecv) != HIT_GB_TILE){
1563 hit_errInternal(__func__,
"Unsupported HitTile class",
"", __FILE__, __LINE__);
1571 *(newCom.
alltoallv) = HIT_COM_ALLTOALLV_NULL;
1598 if(hit_tileClass(*tileRecv) == HIT_GC_TILE){
1620 for(i=1;i<numProcs;i++){
1633 newCom.
dataRecv = tileRecv->dataVertices;
1652 const void * tilePSend,
1654 const void * tilePRecv,
1660 hit_errInternal(
"hit_comAlldistribute",
"This communication works only with a contiguous layout list",
"", __FILE__, __LINE__);
1668 *(newCom.
alltoallv) = HIT_COM_ALLTOALLV_NULL;
1690 int nSets = hit_shapeCard( lay.
origShape );
1715 for(i=0;i<nSets;i++){
1730 while( g < numProcs-1 ){
1741 for(i=1; i<numProcs; i++) {
1748 hit_errInternal(
"hit_comAlldistribute",
"The receiving buffer does not have enough cardinality",
"", __FILE__, __LINE__);
1776 hit_errInternal(__func__,
"Different HitTile classes",
"", file, line);
1781 if(hit_tileClass(*tileRecv) != HIT_MC_TILE ){
1782 hit_errInternal(__func__,
"Unsupported HitTile class",
"", __FILE__, __LINE__);
1790 *(newCom.
alltoallv) = HIT_COM_ALLTOALLV_NULL;
1836 for(i=1;i<numProcs;i++){
1871 const void * tilePSend,
int * count,
1872 const void * tilePRecv,
HitType baseType){
1876 hit_errInternal(
"hit_comAlldistribute",
"This communication works only with a contiguous layout list",
"",
"", -1);
1884 *(newCom.
alltoallv) = HIT_COM_ALLTOALLV_NULL;
1928 for(i=0;i<nSets;i++){
1941 while( g < numProcs ){
1955 for(i=1; i<numProcs; i++)
2056 if ( issue->
sendTo == MPI_PROC_NULL )
return;
2067 if ( issue->
sendTo == MPI_PROC_NULL )
return;
2068 int ok = MPI_Wait( &(issue->
requestSend), MPI_STATUS_IGNORE );
2077 if ( issue->
sendTo == MPI_PROC_NULL )
return;
2088 if ( issue->
recvFrom == MPI_PROC_NULL )
return;
2098 if ( issue->
recvFrom == MPI_PROC_NULL )
return;
2109 if ( issue->
sendTo == MPI_PROC_NULL )
return;
2110 int ok = MPI_Wait( &(issue->
requestRecv), MPI_STATUS_IGNORE );
2129 printf(
"Do reduce to %d(%d)\n",issue->
sendTo,MPI_PROC_NULL);
2134 if(issue->
sendTo != MPI_PROC_NULL){
2146 printf(
"CTRL %d - Broadcast from %d\n",
hit_Rank, issue->
sendTo);
2186 memcpy( (
char*)issue->
dataSend + (
size_t) i * baseExtent,
2188 (
size_t)baseExtent);
2209 (
char*)issue->
dataRecv + (
size_t) i * baseExtent,
2228 memcpy( (
char*)issue->
dataSend + (
size_t) i * baseExtent,
2230 (
size_t)baseExtent);
2251 (
char*)issue->
dataRecv + (
size_t) i * baseExtent,
2271 hit_errInternal(__func__,
"Unsupported shape type",
"", __FILE__, __LINE__);
2279 MPI_Comm_rank(issue->
comm,&mpi_rank);
2286 MPI_Comm_size(issue->
comm,&nProcs);
2296 for(i=0;i<nElems;i++){
2298 int dst = assignedGroups[i];
2302 (
size_t)baseExtent);
2330 MPI_Comm_rank(issue->
comm,&mpi_rank);
2337 MPI_Comm_size(issue->
comm,&nProcs);
2347 for(i=0;i<nRows;i++){
2349 int dst = assignedGroups[i];
2354 for(j=begin; j<end; j++){
2358 (
size_t)baseExtent);
2450 hit_errInternal(
"comDo",
"Unknown type of communication object",
"", __FILE__, __LINE__);
2462 double * din = (
double *)in;
2463 double * dinout = (
double *)inout;
2467 printf(
"CTRL OpSumDouble: %lf+=%lf=%lf \n",*dinout,*din,*dinout+*din);
2480 double * din = (
double *)in;
2481 double * dinout = (
double *)inout;
2484 printf(
"CTRL OpMaxDouble: hit_max(%lf,%lf)=%lf \n",*dinout,*din,
hit_max(*dinout,*din));
2487 *dinout=
hit_max(*dinout,*din);
2497 double * din = (
double *)in;
2498 double * dinout = (
double *)inout;
2501 printf(
"CTRL OpMinDouble: hit_min(%lf,%lf)=%lf \n",*dinout,*din,
hit_min(*dinout,*din));
2504 *dinout=
hit_min(*dinout,*din);
2514 int * din = (
int *)in;
2515 int * dinout = (
int *)inout;
2528 int * din = (
int *)in;
2529 int * dinout = (
int *)inout;
2531 *dinout=
hit_max(*dinout,*din);
2543 int * din = (
int *)in;
2544 int * dinout = (
int *)inout;
2546 *dinout=
hit_min(*dinout,*din);
2555 MPI_Aint *array_of_adds;
2556 MPI_Datatype *array_of_dtypes;
2557 int num_ints, num_adds, num_dtypes, combiner;
2558 int i,j,stride,jump,ac,ac2;
2561 MPI_Type_get_envelope( datatype,
2562 &num_ints, &num_adds, &num_dtypes, &combiner );
2565 case MPI_COMBINER_NAMED:
2566 stride=offset/(int)tam;
2567 f( (
char *)in+offset, (
char *)inout+offset);
2569 case MPI_COMBINER_STRUCT:
2572 hit_malloc(array_of_adds, MPI_Aint, num_adds);
2573 hit_malloc(array_of_dtypes, MPI_Datatype, num_dtypes);
2582 MPI_Type_get_contents( datatype, num_ints, num_adds, num_dtypes,
2583 array_of_ints, array_of_adds, array_of_dtypes );
2585 for (i=0; i<array_of_ints[0]; i++) {
2586 ac= (int) array_of_adds[i] + offset;
2587 MPI_Type_extent(array_of_dtypes[i],&ext);
2589 for(j=0;j<array_of_ints[i+1];j++) {
2594 free( array_of_ints );
2595 free( array_of_adds );
2596 free( array_of_dtypes );
2598 case MPI_COMBINER_HVECTOR:
2602 hit_malloc(array_of_adds, MPI_Aint, num_adds);
2603 hit_malloc(array_of_dtypes, MPI_Datatype, num_dtypes);
2612 MPI_Type_get_contents( datatype, num_ints, num_adds, num_dtypes,
2613 array_of_ints, array_of_adds, array_of_dtypes );
2615 MPI_Type_extent(array_of_dtypes[0],&ext);
2620 stride = (int) array_of_adds[0];
2621 for(i=0;i<array_of_ints[0];i++) {
2623 for(j=0;j<array_of_ints[1];j++) {
2629 free( array_of_ints );
2630 free( array_of_adds );
2631 free( array_of_dtypes );
2633 case MPI_COMBINER_CONTIGUOUS:
2636 hit_malloc(array_of_adds, MPI_Aint, num_adds);
2637 hit_malloc(array_of_dtypes, MPI_Datatype, num_dtypes);
2646 MPI_Type_get_contents( datatype, num_ints, num_adds, num_dtypes,
2647 array_of_ints, array_of_adds, array_of_dtypes );
2648 MPI_Type_extent(array_of_dtypes[0],&ext);
2651 for(i=0;i<array_of_ints[0];i++) {
2655 free( array_of_ints );
2656 free( array_of_adds );
2657 free( array_of_dtypes );
void hit_comDoSend(HitCom *issue)
HitCom hit_comSparseUpdateBitmap(HitLayout lay, const void *tileP, HitType baseType)
void hit_comDoReduce(HitCom *issue)
HitType hit_comTypeRec(const void *varP, HitType baseType)
struct HitComSparse * sparse
#define hit_layShape(lay)
#define hit_tileDimStride(var, dim)
HitCom hit_comSparseUpdate(HitLayout lay, const void *tileP, HitType baseType)
HitComAlltoallv HIT_COM_ALLTOALLV_NULL
void hit_comOpSumDouble(void *, void *, int *, HitType *)
void hit_comOpMinIntBasic(void *in, void *inout)
#define hit_comOpFree(operation)
HitComSparse HIT_COM_SPARSE_NULL
HitPTopology * hit_ptopSplit(HitPTopology *in, int group)
HitCom hit_comBroadcastSelect(HitLayout lay, HitRanks root, const void *tile, HitShape selection, int modeSelect, HitType baseType)
HitCom hit_comAllGathervInternal(HitLayout lay, const void *tilePSend, const void *tilePRecv, HitType baseType, const char *file, int line)
int hit_topRankInternal(HitTopology topo, HitRanks ranks)
void hit_comOpMaxDoubleBasic(void *in, void *inout)
void hit_comOpMaxInt(void *, void *, int *, HitType *)
void hit_comDoSendRecvReplace(HitCom *issue)
void hit_comEndRecv(HitCom *issue)
#define hit_laySelfRanks(lay)
HitPTopology * HIT_TOPOLOGY_INFO
#define hit_tileDims(var)
void hit_comFree(HitCom issue)
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)
void hit_comDo(HitCom *issue)
#define hit_bShapeNameList(shape, dim)
void hit_comStartRecv(HitCom *issue)
#define hit_tileDimSig(var, dim)
#define hit_cShapeNColsRow(s, row)
#define HIT_COM_SPARSE_NULL_STATIC
void hit_comDoSparseScatter(HitCom *issue)
HitCom hit_comSparseScatterInternal(HitLayout lay, const void *tilePSend, const void *tilePRecv, HitType baseType, const char *file, int line)
void hit_comDoSparseScatterRows(HitCom *issue)
#define hit_calloc(ptr, type, nmemb)
void hit_comOpMaxIntBasic(void *in, void *inout)
int hit_tileCheckBoundaryArrayCoords(const void *tileP, HitShape sh)
#define HIT_SPARSE_UPDATE
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)
void hit_comDoSparseUpdateBitmap(HitCom *issue)
HitCom hit_comAllDistribute(HitLayout lay, const void *tilePSend, int *count, const void *tilePRecv, HitType baseType)
HitCom hit_comSparseUpdateCSR(HitLayout lay, const void *tileP, HitType baseType)
void hit_comOpSumIntBasic(void *in, void *inout)
#define hit_layShapeOther(lay, ranks)
#define hit_ranksCmp(a, b)
void hit_comEndSend(HitCom *issue)
HitPTopology * pTopology[HIT_MAXDIMS+1]
int hit_layActiveRanksId(HitLayout lay, HitRanks ranks)
HitCom hit_comAlltoallSelectv(HitLayout lay, const void *tilePSend, HitShape *selectionSend, int modeSelectSend, const void *tilePRecv, HitShape *selectionRecv, int modeSelectRecv, HitType baseType)
#define hit_tileCard(var)
#define HIT_COM_ARRAYCOORDS
#define HIT_SPARSE_SCATTER
void hit_comOpSumInt(void *, void *, int *, HitType *)
#define hit_tileSelect(newVar, oldVar, shape)
#define hit_layNumDims(lay)
void(* HitComOpFunction)(void *, void *)
void hit_comDoAlltoallv(HitCom *issue)
void hit_comDoAlltoall(HitCom *issue)
#define hit_tileDimCard(var, dim)
HitCom hit_comBroadcastDimSelect(HitLayout lay, int dim, int root, const void *tile, HitShape selection, int modeSelect, HitType baseType)
void hit_comUpdateOriginData(HitCom *com, const void *tileP)
#define hit_shapeDims(shape)
#define hit_cShapeXadj(shape)
HitType hit_comType(const void *varP, HitType baseType)
#define hit_mpiTestError(ok, cad)
#define hit_cShapeNvertices(shape)
#define hit_bShapeVertexToLocal(s, vertex)
#define hit_cShapeVertexToLocal(s, vertex)
#define hit_error(name, file, numLine)
#define hit_bShapeVertexToGlobal(s, vertex)
#define hit_comOp(function, operation)
#define hit_cShapeNameList(shape, dim)
#define hit_malloc(ptr, type, nmemb)
#define HIT_SPARSE_SCATTER_ROWS
#define hit_cShapeNZElems(shape)
void hit_comOpMinInt(void *, void *, int *, HitType *)
struct HitComAlltoallv * alltoallv
void hit_ptopFree(HitPTopology **in)
HitCom hit_comAlltoallSelect(HitLayout lay, const void *tilePSend, HitShape selectionSend, int modeSelectSend, const void *tilePRecv, HitShape selectionRecv, int modeSelectRecv, HitType baseType, int count)
void hit_comDoSparseUpdateCSR(HitCom *issue)
int hit_tileCheckBoundaryTileCoords(const void *tileP, HitShape sh)
void hit_comDoAllGatherv(HitCom *issue)
void hit_comInit(int *pargc, char **pargv[])
void * hit_comSearchData(const void *varP)
#define hit_bShapeNvertices(shape)
void hit_comDoBroadcast(HitCom *issue)
void hit_comOpMaxDouble(void *, void *, int *, HitType *)
#define HIT_LAYOUT_CONTIGUOUS
#define hit_vmalloc(ptr, size)
HitCom hit_comSendRecvReplaceSelectTag(HitLayout lay, HitRanks sendTo, const void *tileP, HitShape selection, int modeSelect, HitRanks receiveFrom, HitType baseType, int tag)
void hit_comOpSumDoubleBasic(void *in, void *inout)
#define hit_tileSelectArrayCoords(newVar, oldVar, shape)
#define hit_lgr_elementGroup(lay, element)
void hit_comOpGenericAnyType(void *in, void *inout, HitType datatype, int offset, size_t tam, HitComOpFunction f)
HitCom hit_comSparseScatterRowsInternal(HitLayout lay, const void *tilePSend, const void *tilePRecv, HitType baseType, const char *file, int line)
#define HIT_SENDRECV_REPLACE
#define HIT_COM_NULL_STATIC
#define hit_cShapeVertexToGlobal(s, vertex)
void hit_comDoSparseUpdate(HitCom *issue)
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)
#define hit_topSelfRankInternal(topo)
#define hit_warnInternal(routine, text, extraParam, file, numLine)
void hit_comAllowDim(HitLayout *lay, int dim)
int numActives[HIT_MAXDIMS]
#define hit_shapeSig(shape, dim)
#define HIT_COM_TILECOORDS
MPI_Errhandler mpi_errhandler
#define hit_errInternal(routine, text, extraParam, file, numLine)
#define HIT_COM_ALLTOALLV_NULL_STATIC
#define hit_sigTileToArray(sig, ind)
void hit_comOpMinDoubleBasic(void *in, void *inout)
#define hit_comFreeType(type)
void hit_comOpMinDouble(void *, void *, int *, HitType *)
void hit_comDoRecv(HitCom *issue)
#define hit_layToActiveRanks(lay, ranks)
void hit_comStartSend(HitCom *issue)