SuperLU Distributed 9.0.0
gpu3d
pddistribute3d.h File Reference
#include "superlu_ddefs.h"
Include dependency graph for pddistribute3d.h:

Go to the source code of this file.

Functions

float pddistribute3d (superlu_dist_options_t *options, int_t n, SuperMatrix *A, dScalePermstruct_t *ScalePermstruct, Glu_freeable_t *Glu_freeable, dLUstruct_t *LUstruct, gridinfo3d_t *grid3d)
 
int_t dReDistribute_A3d (SuperMatrix *A, dScalePermstruct_t *ScalePermstruct, Glu_freeable_t *Glu_freeable, int_t *xsup, int_t *supno, gridinfo3d_t *grid3d, int_t *colptr[], int_t *rowind[], double *a[])
 
void dpropagate_A_to_LU3d (dLUstruct_t *LUstruct, int_t *xa, int_t *asub, double *a, superlu_dist_options_t *options, gridinfo3d_t *grid3d, int_t nsupers, float *mem_use)
 
int_t ComputeLDAspa_Ilsum (int_t nsupers, int_t *ilsum, gridinfo3d_t *grid3d)
 
void propagateDataThroughMatrixBlocks (int_t nsupers, Glu_freeable_t *Glu_freeable, dLUstruct_t *LUstruct, gridinfo3d_t *grid3d, int_t *Urb_length, int_t *rb_marker, int_t *Urb_fstnz, int_t *Ucbs, int **ToSendR, int *ToSendD, int *ToRecv)
 
int_t checkDist3DLUStruct (dLUstruct_t *LUstruct, gridinfo3d_t *grid3d)
 
void dbcastPermutedSparseA (SuperMatrix *A, dScalePermstruct_t *ScalePermstruct, Glu_freeable_t *Glu_freeable, dLUstruct_t *LUstruct, gridinfo3d_t *grid3d)
 
void dnewTrfPartitionInit (int_t nsupers, dLUstruct_t *LUstruct, gridinfo3d_t *grid3d)
 
int compareInt_t (void *a, void *b)
 Compares two integers for equality. More...
 
int compareInt (void *a, void *b)
 Compares two integers for equality. More...
 
int compareDouble (void *a, void *b)
 Compares two doubles for equality. More...
 
int dist_checkArrayEq (void *arr, int length, MPI_Datatype datatype, int src_rank, int dest_rank, MPI_Comm communicator, int(*compare)(void *, void *))
 Checks whether arrays at two MPI ranks are identical. More...
 

Function Documentation

◆ checkDist3DLUStruct()

int_t checkDist3DLUStruct ( dLUstruct_t LUstruct,
gridinfo3d_t grid3d 
)
Here is the call graph for this function:

◆ compareDouble()

int compareDouble ( void *  a,
void *  b 
)

Compares two doubles for equality.

Parameters
aVoid pointer to the first double
bVoid pointer to the second double
Returns
int Returns 0 if the doubles are equal, 1 otherwise
Here is the caller graph for this function:

◆ compareInt()

int compareInt ( void *  a,
void *  b 
)

Compares two integers for equality.

Parameters
aVoid pointer to the first integer
bVoid pointer to the second integer
Returns
int Returns 0 if the integers are equal, 1 otherwise

◆ compareInt_t()

int compareInt_t ( void *  a,
void *  b 
)

Compares two integers for equality.

Parameters
aVoid pointer to the first integer
bVoid pointer to the second integer
Returns
int Returns 0 if the integers are equal, 1 otherwise
Here is the caller graph for this function:

◆ ComputeLDAspa_Ilsum()

int_t ComputeLDAspa_Ilsum ( int_t  nsupers,
int_t ilsum,
gridinfo3d_t grid3d 
)

◆ dbcastPermutedSparseA()

void dbcastPermutedSparseA ( SuperMatrix A,
dScalePermstruct_t ScalePermstruct,
Glu_freeable_t Glu_freeable,
dLUstruct_t LUstruct,
gridinfo3d_t grid3d 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ dist_checkArrayEq()

int dist_checkArrayEq ( void *  arr,
int  length,
MPI_Datatype  datatype,
int  src_rank,
int  dest_rank,
MPI_Comm  communicator,
int(*)(void *, void *)  compare 
)

Checks whether arrays at two MPI ranks are identical.

This function is used to check if a copy of an array at two different MPI ranks are the same. It uses MPI_Send and MPI_Recv to transfer data between ranks, then compares the arrays.

Parameters
arrVoid pointer to the array to be compared
lengthThe length of the array
datatypeMPI_Datatype of the array elements
src_rankThe source rank that has the original array
dest_rankThe destination rank that has the copied array
communicatorThe MPI_Comm communicator that includes both ranks
compareA function pointer to the function used to compare elements. Should take two void pointers and return 0 if they are equal and a non-zero value otherwise.
Returns
int Returns 0 if arrays are identical, 1 otherwise.
Here is the caller graph for this function:

◆ dnewTrfPartitionInit()

void dnewTrfPartitionInit ( int_t  nsupers,
dLUstruct_t LUstruct,
gridinfo3d_t grid3d 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ dpropagate_A_to_LU3d()

void dpropagate_A_to_LU3d ( dLUstruct_t LUstruct,
int_t xa,
int_t asub,
double *  a,
superlu_dist_options_t options,
gridinfo3d_t grid3d,
int_t  nsupers,
float *  mem_use 
)

Propagates the new values of A into the existing L and U data structures.

Parameters
LluThe local L and U data structures.
xaThe index array of A.
asubThe row subscripts of A.
aThe numerical values of A.
optionsThe options array.
gridThe process grid.
mem_useThe memory usage.
Returns
void
Here is the call graph for this function:

◆ dReDistribute_A3d()

int_t dReDistribute_A3d ( SuperMatrix A,
dScalePermstruct_t ScalePermstruct,
Glu_freeable_t Glu_freeable,
int_t xsup,
int_t supno,
gridinfo3d_t grid3d,
int_t colptr[],
int_t rowind[],
double *  a[] 
)

◆ pddistribute3d()

float pddistribute3d ( superlu_dist_options_t options,
int_t  n,
SuperMatrix A,
dScalePermstruct_t ScalePermstruct,
Glu_freeable_t Glu_freeable,
dLUstruct_t LUstruct,
gridinfo3d_t grid3d 
)

◆ propagateDataThroughMatrixBlocks()

void propagateDataThroughMatrixBlocks ( int_t  nsupers,
Glu_freeable_t Glu_freeable,
dLUstruct_t LUstruct,
gridinfo3d_t grid3d,
int_t Urb_length,
int_t rb_marker,
int_t Urb_fstnz,
int_t Ucbs,
int **  ToSendR,
int *  ToSendD,
int *  ToRecv 
)

The function propagate_blocks performs data propagation in the form of values through blocks of a supernodal sparse matrix. It sends values to particular blocks and marks blocks to receive new values depending on certain conditions. It also counts the number of non-zeros in each block row and keeps track of the number of column blocks in each block row.

Input: nsupers: Total number of supernodes, i.e., the number of block columns in the original matrix. grid: The process grid. This grid contains the mapping of the matrix blocks to the process grid. xusub: An array of indices, each pointing to the start of each column in the usub array. usub: An array containing the row indices of non-zero elements of the supernodal matrix. ToSendR: A 2D flag array indicating which blocks need to be sent to other processes, organized by column. ToSendD: A flag array indicating which blocks are to be sent to other processes. Urb_length: An array containing the number of non-zero elements in each block row of the matrix. rb_marker: A marker array to track the last block column visited in each block row. Urb_fstnz: An array containing the number of first non-zero elements in each block row of the matrix. Ucbs: An array counting the number of column blocks in each block row. ToRecv: A flag array indicating which blocks are to be received from other processes.

Output: ToSendR, ToSendD, Urb_length, rb_marker, Urb_fstnz, Ucbs, ToRecv are modified in place. Their new values depend on the conditions checked during the loops.

Returns
void