35 static bool InitLevel(
int nMPILevel,
int nFindingDegeneratedEVCount);
49 static void BroadcastBool(
bool *boolValue,
int nRootRank = 0);
50 static void BroadcastDouble(
double *pValue,
unsigned int nSize,
int nRootRank = 0, MPI_Comm comm = MPI_COMM_NULL);
51 static void BroadcastInt(
int *pValue,
unsigned int nSize,
int nRootRank = 0, MPI_Comm comm = MPI_COMM_NULL);
63 static void SendDoubleBufferSync(
int nTargetRank,
double *pBuffer,
int nSize, MPI_Request *req, MPI_Comm commWorld = MPI_COMM_NULL);
65 static void ReceiveDoubleBufferSync(
int nSourceRank,
double *pBuffer,
int nSize, MPI_Request *req, MPI_Comm commWorld = MPI_COMM_NULL);
74 static void GatherVDouble(
int nSourceCount,
double *pReceiveBuffer,
int *pSourceCount,
double *pSendBuffer,
int nSendCount, MPI_Comm comm = MPI_COMM_NULL);
75 static void GatherVInt(
int nSourceCount,
int *pReceiveBuffer,
int *pSourceCount,
int *pSendBuffer,
int nSendCount, MPI_Comm comm = MPI_COMM_NULL);
static void BroadcastBool(bool *boolValue, int nRootRank=0)
Broadcst boolean value.
static int * m_pSendCount
Sending count variable for MPI comminication.
static void GatherEVFromDeflationGroup(int nSourceCount, double *pReceiveBuffer, int *pSourceCount, double *pSendBuffer, int nSendCount)
static void InitCommunicationBufferMetric()
Initializing MPI Communication buffer for MVMul.
static void BroadcastInt(int *pValue, unsigned int nSize, int nRootRank=0, MPI_Comm comm=MPI_COMM_NULL)
Broadcst boolean value.
static void FinalizeManager()
Get Root rank.
static void SetMPIEnviroment(int nRank, int nTotalNode)
Set MPI Enviroment.
static void WaitSendDoubleBufferSync(MPI_Request *req)
Waiting sending double buffer sync function.
static void AllReduceComlex(CKNComplex *pNumber, CKNTimeMeasurement::MEASUREMENT_INDEX INDEX=CKNTimeMeasurement::COMM)
Do all reduce function with CKNComplex.
static MPI_Comm GetMPIComm()
static int * GetEigenvalueCountFromDeflationGroup(int nDeflationGroupCount, int nLocalEVCount)
Checking is root rank of Deflation computation.
static void BroadcastLanczosResult(CKNLanczosMethod::LPEIGENVALUE_RESULT lpResult, int nIterationCount)
Broadcast Lanczos result.
static bool InitLevel(int nMPILevel, int nFindingDegeneratedEVCount)
Init MPI Level, most low level is for multi node cacluation for Lanczos.
static unsigned int m_nMPILevel
MPI Level.
static LPCOMPLEX_NUMBER m_pCommBuffer
Data buffer for MPI Communication.
Show message and debugging variable.
static void BroadcastDouble(double *pValue, unsigned int nSize, int nRootRank=0, MPI_Comm comm=MPI_COMM_NULL)
Broadcst boolean value.
static MPI_Comm GetLanczosComputComm()
static void SplitVector(CKNMatrixOperation::CKNVector *pVector, int nRootRank)
Split vector to sub rank.
static int GetCurrentLoadBalanceCount()
Get Current node's rank load balancing number.
This class for parsing input command file.
static unsigned int GetLanczosGroupIndex()
static void GatherEVIterationFromDeflationGroup(int nSourceCount, int *pReceiveBuffer, int *pSourceCount, int *pSendBuffer, int nSendCount)
Gather eigenvalue from deflation group.
static void MergeVector(CKNMatrixOperation::CKNVector *pVector, CKNMatrixOperation::CKNVector *pResultVector, unsigned int nMergeSize)
Merge vector to sub rank.
static int GetTotalNodeCount()
static bool CheckDeflationNodeCount(int nNeedNodeCount)
Checking node counts fix to deflation group.
static void ReceiveVectorSync(int nSourceRank, CKNMatrixOperation::CKNVector *pVector, int nSize, MPI_Request *req, MPI_Comm commWorld=MPI_COMM_NULL)
Receiving Vector with sync.
static int GetLoadBalanceCount(int nRank)
static LPCOMPLEX_NUMBER ConvertVectorToMPIComplexBuffer(CKNMatrixOperation::CKNVector *pVector)
Convert vector class to MPI_COMPLEX array.
static double AllReduceDouble(double fNumber)
Do all reduce function with CKNComplex.
static MPI_Comm m_deflationComm
Deflation computing MPI_Comm.
static int * m_pRecvCount
Reciving count variable for MPI comminication.
static int m_nCommWorldRank
MPI Rank before split.
static MPI_Request m_ReceiveDoubleAsyncRequest
Request for receving double.
static bool IsInMPIRoutine()
static int m_nTotalNode
Total node count.
static void LoadBlancing(int nElementCount)
Load blancing for MPI, This function for lanczos solving with geometric constrcution.
static void GatherVInt(int nSourceCount, int *pReceiveBuffer, int *pSourceCount, int *pSendBuffer, int nSendCount, MPI_Comm comm=MPI_COMM_NULL)
GahterV for int wrapping function.
static MPI_Request m_SendDoubleAsyncRequest
Request for sending double.
CKNMPIManager()
Constructor.
static void SendVectorSync(int nTargetRank, CKNMatrixOperation::CKNVector *pVector, int nSize, MPI_Request *req, MPI_Comm commWorld=MPI_COMM_NULL)
Getting Deflation computing group MPI_Comm.
static int * m_pBankInfo
After MPI Split bank infomation.
Collection of vector and matrix operation.
static void MergeVectorEx_Optimal(CKNMatrixOperation::CKNVector *pVector, CKNMatrixOperation::CKNVector *pResultVector, unsigned int nMergeSize, double fFirstIndex, unsigned int nSizeFromPrevRank, unsigned int nSizeFromNextRank, unsigned int nSizetoPrevRank, unsigned int nSizetoNextRank, unsigned int *)
Merge vector for 1 layer exchanging.
static bool IsLanczosComputeRoot()
Barrier current deflation group.
Structure for engienvalue computing.
static bool m_bMultiLevel
Flag for Multilevel MPI group.
~CKNMPIManager()
Destructor.
static LPCOMPLEX_NUMBER m_pConvertingBuffer
Data buffer for Vector converting.
static int * m_pDispls
Displ for MPI comminication.
static void ExchangeCommand(double *pfCommand, MPI_Comm comm)
Gather eigenvalue finding iteration number from deflation group.
static int GetCurrentRank()
static MPI_Comm GetDeflationComm()
Getting Lanczos computing group MPI_Comm.
static void GatherVDouble(int nSourceCount, double *pReceiveBuffer, int *pSourceCount, double *pSendBuffer, int nSendCount, MPI_Comm comm=MPI_COMM_NULL)
GatherV for double wrapping function.
static void MergeVectorOptimal(CKNMatrixOperation::CKNVector *pSrcVector, CKNMatrixOperation::CKNVector *pResultVector, unsigned int nMergeSize, double fFirstIndex)
Merge vector to sub rank, operated without vector class member function call.
static MPI_Group m_deflationGroup
MPI Group for Deflation computation.
static int * m_pLoadBalance
Load blancing for MPI Communication.
This class for complex operation and saving value.
static void BarrierAllComm()
Is Multilevel MPI Setting.
static MPI_Comm m_mpiCommIndex
Lanczos Method MPI_Comm.
static void WaitReceiveDoubleBufferAsync(MPI_Request *req)
Waiting recevinging double buffer sync function.
static void LoadBlancingForLanczos(int nRowCount)
Load blancing for MPI, this function only for lanczos solving without geometric constrcution.
static bool m_bNeedPostOperation[10]
MPI Level.
static MPI_Group m_lanczosGroup
MPI Group for Lanczos computation.
static int m_nCurrentRank
Getting Lanczos group index.
static bool IsRootRank()
Get Total node count.
static bool m_bStartMPI
MPI_Init call or not.
static void SendDoubleBufferSync(int nTargetRank, double *pBuffer, int nSize, MPI_Request *req, MPI_Comm commWorld=MPI_COMM_NULL)
Sending buffer for double data array with sync.
struct CKNMPIManager::COMPLEX_NUMBER * LPCOMPLEX_NUMBER
static bool IsMultiLevelMPI()
Get MPI_Comm.
static unsigned int m_nLanczosGroupIndex
MPI Group index for Lanczos group.
This class for describing vector for Lanczos method.
static void BroadcastVector(CKNMatrixOperation::CKNVector *pVector)
Check this processing running on MPI Enviorment.
static bool IsDeflationRoot()
Checking is root rank of Lanczos computation.
static void ReceiveDoubleBufferSync(int nSourceRank, double *pBuffer, int nSize, MPI_Request *req, MPI_Comm commWorld=MPI_COMM_NULL)
Receivinging buffer for double data array with sync.