|
|
|
@ -52,7 +52,7 @@
|
|
|
|
|
|
|
|
|
|
#ifndef _matchboxpC_H_
|
|
|
|
|
#define _matchboxpC_H_
|
|
|
|
|
//Turn on a lot of debugging information with this switch:
|
|
|
|
|
// Turn on a lot of debugging information with this switch:
|
|
|
|
|
//#define PRINT_DEBUG_INFO_
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <iostream>
|
|
|
|
@ -66,193 +66,190 @@
|
|
|
|
|
using namespace std;
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
extern "C" {
|
|
|
|
|
extern "C"
|
|
|
|
|
{
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if !defined(SERIAL_MPI)
|
|
|
|
|
|
|
|
|
|
#define MilanMpiLongInt MPI_LONG_LONG
|
|
|
|
|
|
|
|
|
|
#define MilanMpiLongInt MPI_LONG_LONG
|
|
|
|
|
|
|
|
|
|
#ifndef _primitiveDataType_Definition_
|
|
|
|
|
#define _primitiveDataType_Definition_
|
|
|
|
|
//Regular integer:
|
|
|
|
|
#ifndef INTEGER_H
|
|
|
|
|
#define INTEGER_H
|
|
|
|
|
typedef int32_t MilanInt;
|
|
|
|
|
#endif
|
|
|
|
|
// Regular integer:
|
|
|
|
|
#ifndef INTEGER_H
|
|
|
|
|
#define INTEGER_H
|
|
|
|
|
typedef int32_t MilanInt;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
//Regular long integer:
|
|
|
|
|
#ifndef LONG_INT_H
|
|
|
|
|
#define LONG_INT_H
|
|
|
|
|
#ifdef BIT64
|
|
|
|
|
typedef int64_t MilanLongInt;
|
|
|
|
|
typedef MPI_LONG MilanMpiLongInt;
|
|
|
|
|
#else
|
|
|
|
|
typedef int32_t MilanLongInt;
|
|
|
|
|
typedef MPI_INT MilanMpiLongInt;
|
|
|
|
|
#endif
|
|
|
|
|
#endif
|
|
|
|
|
// Regular long integer:
|
|
|
|
|
#ifndef LONG_INT_H
|
|
|
|
|
#define LONG_INT_H
|
|
|
|
|
#ifdef BIT64
|
|
|
|
|
typedef int64_t MilanLongInt;
|
|
|
|
|
typedef MPI_LONG MilanMpiLongInt;
|
|
|
|
|
#else
|
|
|
|
|
typedef int32_t MilanLongInt;
|
|
|
|
|
typedef MPI_INT MilanMpiLongInt;
|
|
|
|
|
#endif
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
//Regular boolean
|
|
|
|
|
#ifndef BOOL_H
|
|
|
|
|
#define BOOL_H
|
|
|
|
|
typedef bool MilanBool;
|
|
|
|
|
#endif
|
|
|
|
|
// Regular boolean
|
|
|
|
|
#ifndef BOOL_H
|
|
|
|
|
#define BOOL_H
|
|
|
|
|
typedef bool MilanBool;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
//Regular double and absolute value computation:
|
|
|
|
|
#ifndef REAL_H
|
|
|
|
|
#define REAL_H
|
|
|
|
|
typedef double MilanReal;
|
|
|
|
|
typedef MPI_DOUBLE MilanMpiReal;
|
|
|
|
|
inline MilanReal MilanAbs(MilanReal value)
|
|
|
|
|
{
|
|
|
|
|
return fabs(value);
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
// Regular double and absolute value computation:
|
|
|
|
|
#ifndef REAL_H
|
|
|
|
|
#define REAL_H
|
|
|
|
|
typedef double MilanReal;
|
|
|
|
|
typedef MPI_DOUBLE MilanMpiReal;
|
|
|
|
|
inline MilanReal MilanAbs(MilanReal value)
|
|
|
|
|
{
|
|
|
|
|
return fabs(value);
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
//Regular float and absolute value computation:
|
|
|
|
|
#ifndef FLOAT_H
|
|
|
|
|
#define FLOAT_H
|
|
|
|
|
typedef float MilanFloat;
|
|
|
|
|
typedef MPI_FLOAT MilanMpiFloat;
|
|
|
|
|
inline MilanFloat MilanAbsFloat(MilanFloat value)
|
|
|
|
|
{
|
|
|
|
|
return fabs(value);
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
// Regular float and absolute value computation:
|
|
|
|
|
#ifndef FLOAT_H
|
|
|
|
|
#define FLOAT_H
|
|
|
|
|
typedef float MilanFloat;
|
|
|
|
|
typedef MPI_FLOAT MilanMpiFloat;
|
|
|
|
|
inline MilanFloat MilanAbsFloat(MilanFloat value)
|
|
|
|
|
{
|
|
|
|
|
return fabs(value);
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
//// Define the limits:
|
|
|
|
|
#ifndef LIMITS_H
|
|
|
|
|
#define LIMITS_H
|
|
|
|
|
//Integer Maximum and Minimum:
|
|
|
|
|
// #define MilanIntMax INT_MAX
|
|
|
|
|
// #define MilanIntMin INT_MIN
|
|
|
|
|
#define MilanIntMax INT32_MAX
|
|
|
|
|
#define MilanIntMin INT32_MIN
|
|
|
|
|
//// Define the limits:
|
|
|
|
|
#ifndef LIMITS_H
|
|
|
|
|
#define LIMITS_H
|
|
|
|
|
// Integer Maximum and Minimum:
|
|
|
|
|
// #define MilanIntMax INT_MAX
|
|
|
|
|
// #define MilanIntMin INT_MIN
|
|
|
|
|
#define MilanIntMax INT32_MAX
|
|
|
|
|
#define MilanIntMin INT32_MIN
|
|
|
|
|
|
|
|
|
|
#ifdef BIT64
|
|
|
|
|
#define MilanLongIntMax INT64_MAX
|
|
|
|
|
#define MilanLongIntMin -INT64_MAX
|
|
|
|
|
#else
|
|
|
|
|
#define MilanLongIntMax INT32_MAX
|
|
|
|
|
#define MilanLongIntMin -INT32_MAX
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef BIT64
|
|
|
|
|
#define MilanLongIntMax INT64_MAX
|
|
|
|
|
#define MilanLongIntMin -INT64_MAX
|
|
|
|
|
#else
|
|
|
|
|
#define MilanLongIntMax INT32_MAX
|
|
|
|
|
#define MilanLongIntMin -INT32_MAX
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
// +INFINITY
|
|
|
|
|
const double PLUS_INFINITY = numeric_limits<int>::infinity();
|
|
|
|
|
const double MINUS_INFINITY = -PLUS_INFINITY;
|
|
|
|
|
//#define MilanRealMax LDBL_MAX
|
|
|
|
|
#define MilanRealMax PLUS_INFINITY
|
|
|
|
|
#define MilanRealMin MINUS_INFINITY
|
|
|
|
|
//#define MilanRealMax LDBL_MAX
|
|
|
|
|
#define MilanRealMax PLUS_INFINITY
|
|
|
|
|
#define MilanRealMin MINUS_INFINITY
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
//Function of find the owner of a ghost vertex using binary search:
|
|
|
|
|
inline MilanInt findOwnerOfGhost(MilanLongInt vtxIndex, MilanLongInt *mVerDistance,
|
|
|
|
|
// Function of find the owner of a ghost vertex using binary search:
|
|
|
|
|
inline MilanInt findOwnerOfGhost(MilanLongInt vtxIndex, MilanLongInt *mVerDistance,
|
|
|
|
|
MilanInt myRank, MilanInt numProcs);
|
|
|
|
|
|
|
|
|
|
inline MilanLongInt firstComputeCandidateMate(MilanLongInt adj1,
|
|
|
|
|
MilanLongInt adj2,
|
|
|
|
|
MilanLongInt* verLocInd,
|
|
|
|
|
MilanReal* edgeLocWeight);
|
|
|
|
|
inline MilanLongInt firstComputeCandidateMate(MilanLongInt adj1,
|
|
|
|
|
MilanLongInt adj2,
|
|
|
|
|
MilanLongInt *verLocInd,
|
|
|
|
|
MilanReal *edgeLocWeight);
|
|
|
|
|
|
|
|
|
|
inline bool isAlreadyMatched(MilanLongInt node,
|
|
|
|
|
MilanLongInt StartIndex,
|
|
|
|
|
MilanLongInt EndIndex,
|
|
|
|
|
vector <MilanLongInt> &GMate,
|
|
|
|
|
MilanLongInt* Mate,
|
|
|
|
|
map <MilanLongInt, MilanLongInt> &Ghost2LocalMap);
|
|
|
|
|
inline bool isAlreadyMatched(MilanLongInt node,
|
|
|
|
|
MilanLongInt StartIndex,
|
|
|
|
|
MilanLongInt EndIndex,
|
|
|
|
|
vector<MilanLongInt> &GMate,
|
|
|
|
|
MilanLongInt *Mate,
|
|
|
|
|
map<MilanLongInt, MilanLongInt> &Ghost2LocalMap);
|
|
|
|
|
|
|
|
|
|
inline MilanLongInt computeCandidateMate(MilanLongInt adj1,
|
|
|
|
|
MilanLongInt adj2,
|
|
|
|
|
MilanReal* edgeLocWeight,
|
|
|
|
|
MilanLongInt k,
|
|
|
|
|
MilanLongInt* verLocInd,
|
|
|
|
|
MilanLongInt StartIndex,
|
|
|
|
|
MilanLongInt EndIndex,
|
|
|
|
|
vector <MilanLongInt> &GMate,
|
|
|
|
|
MilanLongInt* Mate,
|
|
|
|
|
map <MilanLongInt, MilanLongInt> &Ghost2LocalMap);
|
|
|
|
|
inline MilanLongInt computeCandidateMate(MilanLongInt adj1,
|
|
|
|
|
MilanLongInt adj2,
|
|
|
|
|
MilanReal *edgeLocWeight,
|
|
|
|
|
MilanLongInt k,
|
|
|
|
|
MilanLongInt *verLocInd,
|
|
|
|
|
MilanLongInt StartIndex,
|
|
|
|
|
MilanLongInt EndIndex,
|
|
|
|
|
vector<MilanLongInt> &GMate,
|
|
|
|
|
MilanLongInt *Mate,
|
|
|
|
|
map<MilanLongInt, MilanLongInt> &Ghost2LocalMap);
|
|
|
|
|
|
|
|
|
|
inline void initialize(MilanLongInt NLVer, MilanLongInt NLEdge,
|
|
|
|
|
MilanLongInt StartIndex, MilanLongInt EndIndex,
|
|
|
|
|
MilanLongInt* numGhostEdgesPtr,
|
|
|
|
|
MilanLongInt* numGhostVerticesPtr,
|
|
|
|
|
MilanLongInt* S,
|
|
|
|
|
MilanLongInt* verLocInd,
|
|
|
|
|
MilanLongInt* verLocPtr,
|
|
|
|
|
omp_lock_t* MateLock,
|
|
|
|
|
map <MilanLongInt, MilanLongInt> &Ghost2LocalMap,
|
|
|
|
|
vector <MilanLongInt>& Counter,
|
|
|
|
|
vector <MilanLongInt>& verGhostPtr,
|
|
|
|
|
vector <MilanLongInt>& verGhostInd,
|
|
|
|
|
vector <MilanLongInt>& tempCounter,
|
|
|
|
|
vector <MilanLongInt>& GMate,
|
|
|
|
|
vector<MilanLongInt>& Message,
|
|
|
|
|
vector<MilanLongInt>& QLocalVtx,
|
|
|
|
|
vector<MilanLongInt>& QGhostVtx,
|
|
|
|
|
vector<MilanLongInt>& QMsgType,
|
|
|
|
|
vector<MilanInt>& QOwner,
|
|
|
|
|
MilanLongInt* &candidateMate,
|
|
|
|
|
staticQueue& U,
|
|
|
|
|
staticQueue& privateU,
|
|
|
|
|
staticQueue& privateQLocalVtx,
|
|
|
|
|
staticQueue& privateQGhostVtx,
|
|
|
|
|
staticQueue& privateQMsgType,
|
|
|
|
|
staticQueue& privateQOwner
|
|
|
|
|
);
|
|
|
|
|
inline void initialize(MilanLongInt NLVer, MilanLongInt NLEdge,
|
|
|
|
|
MilanLongInt StartIndex, MilanLongInt EndIndex,
|
|
|
|
|
MilanLongInt *numGhostEdgesPtr,
|
|
|
|
|
MilanLongInt *numGhostVerticesPtr,
|
|
|
|
|
MilanLongInt *S,
|
|
|
|
|
MilanLongInt *verLocInd,
|
|
|
|
|
MilanLongInt *verLocPtr,
|
|
|
|
|
omp_lock_t *MateLock,
|
|
|
|
|
map<MilanLongInt, MilanLongInt> &Ghost2LocalMap,
|
|
|
|
|
vector<MilanLongInt> &Counter,
|
|
|
|
|
vector<MilanLongInt> &verGhostPtr,
|
|
|
|
|
vector<MilanLongInt> &verGhostInd,
|
|
|
|
|
vector<MilanLongInt> &tempCounter,
|
|
|
|
|
vector<MilanLongInt> &GMate,
|
|
|
|
|
vector<MilanLongInt> &Message,
|
|
|
|
|
vector<MilanLongInt> &QLocalVtx,
|
|
|
|
|
vector<MilanLongInt> &QGhostVtx,
|
|
|
|
|
vector<MilanLongInt> &QMsgType,
|
|
|
|
|
vector<MilanInt> &QOwner,
|
|
|
|
|
MilanLongInt *&candidateMate,
|
|
|
|
|
staticQueue &U,
|
|
|
|
|
staticQueue &privateU,
|
|
|
|
|
staticQueue &privateQLocalVtx,
|
|
|
|
|
staticQueue &privateQGhostVtx,
|
|
|
|
|
staticQueue &privateQMsgType,
|
|
|
|
|
staticQueue &privateQOwner);
|
|
|
|
|
|
|
|
|
|
void dalgoDistEdgeApproxDomEdgesLinearSearchMesgBndlSmallMateCMP
|
|
|
|
|
(
|
|
|
|
|
MilanLongInt NLVer, MilanLongInt NLEdge,
|
|
|
|
|
MilanLongInt* verLocPtr, MilanLongInt* verLocInd, MilanReal* edgeLocWeight,
|
|
|
|
|
MilanLongInt* verDistance,
|
|
|
|
|
MilanLongInt* Mate,
|
|
|
|
|
MilanInt myRank, MilanInt numProcs, MPI_Comm comm,
|
|
|
|
|
MilanLongInt* msgIndSent, MilanLongInt* msgActualSent, MilanReal* msgPercent,
|
|
|
|
|
MilanReal* ph0_time, MilanReal* ph1_time, MilanReal* ph2_time,
|
|
|
|
|
MilanLongInt* ph1_card, MilanLongInt* ph2_card );
|
|
|
|
|
void dalgoDistEdgeApproxDomEdgesLinearSearchMesgBndlSmallMateCMP(
|
|
|
|
|
MilanLongInt NLVer, MilanLongInt NLEdge,
|
|
|
|
|
MilanLongInt *verLocPtr, MilanLongInt *verLocInd, MilanReal *edgeLocWeight,
|
|
|
|
|
MilanLongInt *verDistance,
|
|
|
|
|
MilanLongInt *Mate,
|
|
|
|
|
MilanInt myRank, MilanInt numProcs, MPI_Comm comm,
|
|
|
|
|
MilanLongInt *msgIndSent, MilanLongInt *msgActualSent, MilanReal *msgPercent,
|
|
|
|
|
MilanReal *ph0_time, MilanReal *ph1_time, MilanReal *ph2_time,
|
|
|
|
|
MilanLongInt *ph1_card, MilanLongInt *ph2_card);
|
|
|
|
|
|
|
|
|
|
void dalgoDistEdgeApproxDomEdgesLinearSearchMesgBndlSmallMateC
|
|
|
|
|
(
|
|
|
|
|
MilanLongInt NLVer, MilanLongInt NLEdge,
|
|
|
|
|
MilanLongInt* verLocPtr, MilanLongInt* verLocInd, MilanReal* edgeLocWeight,
|
|
|
|
|
MilanLongInt* verDistance,
|
|
|
|
|
MilanLongInt* Mate,
|
|
|
|
|
MilanInt myRank, MilanInt numProcs, MPI_Comm comm,
|
|
|
|
|
MilanLongInt* msgIndSent, MilanLongInt* msgActualSent, MilanReal* msgPercent,
|
|
|
|
|
MilanReal* ph0_time, MilanReal* ph1_time, MilanReal* ph2_time,
|
|
|
|
|
MilanLongInt* ph1_card, MilanLongInt* ph2_card );
|
|
|
|
|
void dalgoDistEdgeApproxDomEdgesLinearSearchMesgBndlSmallMateC(
|
|
|
|
|
MilanLongInt NLVer, MilanLongInt NLEdge,
|
|
|
|
|
MilanLongInt *verLocPtr, MilanLongInt *verLocInd, MilanReal *edgeLocWeight,
|
|
|
|
|
MilanLongInt *verDistance,
|
|
|
|
|
MilanLongInt *Mate,
|
|
|
|
|
MilanInt myRank, MilanInt numProcs, MPI_Comm comm,
|
|
|
|
|
MilanLongInt *msgIndSent, MilanLongInt *msgActualSent, MilanReal *msgPercent,
|
|
|
|
|
MilanReal *ph0_time, MilanReal *ph1_time, MilanReal *ph2_time,
|
|
|
|
|
MilanLongInt *ph1_card, MilanLongInt *ph2_card);
|
|
|
|
|
|
|
|
|
|
void salgoDistEdgeApproxDomEdgesLinearSearchMesgBndlSmallMateC
|
|
|
|
|
(
|
|
|
|
|
MilanLongInt NLVer, MilanLongInt NLEdge,
|
|
|
|
|
MilanLongInt* verLocPtr, MilanLongInt* verLocInd, MilanFloat* edgeLocWeight,
|
|
|
|
|
MilanLongInt* verDistance,
|
|
|
|
|
MilanLongInt* Mate,
|
|
|
|
|
MilanInt myRank, MilanInt numProcs, MPI_Comm comm,
|
|
|
|
|
MilanLongInt* msgIndSent, MilanLongInt* msgActualSent, MilanReal* msgPercent,
|
|
|
|
|
MilanReal* ph0_time, MilanReal* ph1_time, MilanReal* ph2_time,
|
|
|
|
|
MilanLongInt* ph1_card, MilanLongInt* ph2_card );
|
|
|
|
|
void salgoDistEdgeApproxDomEdgesLinearSearchMesgBndlSmallMateC(
|
|
|
|
|
MilanLongInt NLVer, MilanLongInt NLEdge,
|
|
|
|
|
MilanLongInt *verLocPtr, MilanLongInt *verLocInd, MilanFloat *edgeLocWeight,
|
|
|
|
|
MilanLongInt *verDistance,
|
|
|
|
|
MilanLongInt *Mate,
|
|
|
|
|
MilanInt myRank, MilanInt numProcs, MPI_Comm comm,
|
|
|
|
|
MilanLongInt *msgIndSent, MilanLongInt *msgActualSent, MilanReal *msgPercent,
|
|
|
|
|
MilanReal *ph0_time, MilanReal *ph1_time, MilanReal *ph2_time,
|
|
|
|
|
MilanLongInt *ph1_card, MilanLongInt *ph2_card);
|
|
|
|
|
|
|
|
|
|
void dMatchBoxPC(MilanLongInt NLVer, MilanLongInt NLEdge,
|
|
|
|
|
MilanLongInt* verLocPtr, MilanLongInt* verLocInd, MilanReal* edgeLocWeight,
|
|
|
|
|
MilanLongInt* verDistance,
|
|
|
|
|
MilanLongInt* Mate,
|
|
|
|
|
MilanInt myRank, MilanInt numProcs, MilanInt icomm,
|
|
|
|
|
MilanLongInt* msgIndSent, MilanLongInt* msgActualSent, MilanReal* msgPercent,
|
|
|
|
|
MilanReal* ph0_time, MilanReal* ph1_time, MilanReal* ph2_time,
|
|
|
|
|
MilanLongInt* ph1_card, MilanLongInt* ph2_card );
|
|
|
|
|
void dMatchBoxPC(MilanLongInt NLVer, MilanLongInt NLEdge,
|
|
|
|
|
MilanLongInt *verLocPtr, MilanLongInt *verLocInd, MilanReal *edgeLocWeight,
|
|
|
|
|
MilanLongInt *verDistance,
|
|
|
|
|
MilanLongInt *Mate,
|
|
|
|
|
MilanInt myRank, MilanInt numProcs, MilanInt icomm,
|
|
|
|
|
MilanLongInt *msgIndSent, MilanLongInt *msgActualSent, MilanReal *msgPercent,
|
|
|
|
|
MilanReal *ph0_time, MilanReal *ph1_time, MilanReal *ph2_time,
|
|
|
|
|
MilanLongInt *ph1_card, MilanLongInt *ph2_card);
|
|
|
|
|
|
|
|
|
|
void sMatchBoxPC(MilanLongInt NLVer, MilanLongInt NLEdge,
|
|
|
|
|
MilanLongInt* verLocPtr, MilanLongInt* verLocInd, MilanFloat* edgeLocWeight,
|
|
|
|
|
MilanLongInt* verDistance,
|
|
|
|
|
MilanLongInt* Mate,
|
|
|
|
|
MilanInt myRank, MilanInt numProcs, MilanInt icomm,
|
|
|
|
|
MilanLongInt* msgIndSent, MilanLongInt* msgActualSent, MilanReal* msgPercent,
|
|
|
|
|
MilanReal* ph0_time, MilanReal* ph1_time, MilanReal* ph2_time,
|
|
|
|
|
MilanLongInt* ph1_card, MilanLongInt* ph2_card );
|
|
|
|
|
void sMatchBoxPC(MilanLongInt NLVer, MilanLongInt NLEdge,
|
|
|
|
|
MilanLongInt *verLocPtr, MilanLongInt *verLocInd, MilanFloat *edgeLocWeight,
|
|
|
|
|
MilanLongInt *verDistance,
|
|
|
|
|
MilanLongInt *Mate,
|
|
|
|
|
MilanInt myRank, MilanInt numProcs, MilanInt icomm,
|
|
|
|
|
MilanLongInt *msgIndSent, MilanLongInt *msgActualSent, MilanReal *msgPercent,
|
|
|
|
|
MilanReal *ph0_time, MilanReal *ph1_time, MilanReal *ph2_time,
|
|
|
|
|
MilanLongInt *ph1_card, MilanLongInt *ph2_card);
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|