SuperLU Distributed 9.0.0
gpu3d
|
#include "superlu_ddefs.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... | |
int_t checkDist3DLUStruct | ( | dLUstruct_t * | LUstruct, |
gridinfo3d_t * | grid3d | ||
) |
int compareDouble | ( | void * | a, |
void * | b | ||
) |
Compares two doubles for equality.
a | Void pointer to the first double |
b | Void pointer to the second double |
int compareInt | ( | void * | a, |
void * | b | ||
) |
Compares two integers for equality.
a | Void pointer to the first integer |
b | Void pointer to the second integer |
int compareInt_t | ( | void * | a, |
void * | b | ||
) |
Compares two integers for equality.
a | Void pointer to the first integer |
b | Void pointer to the second integer |
int_t ComputeLDAspa_Ilsum | ( | int_t | nsupers, |
int_t * | ilsum, | ||
gridinfo3d_t * | grid3d | ||
) |
void dbcastPermutedSparseA | ( | SuperMatrix * | A, |
dScalePermstruct_t * | ScalePermstruct, | ||
Glu_freeable_t * | Glu_freeable, | ||
dLUstruct_t * | LUstruct, | ||
gridinfo3d_t * | grid3d | ||
) |
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.
arr | Void pointer to the array to be compared |
length | The length of the array |
datatype | MPI_Datatype of the array elements |
src_rank | The source rank that has the original array |
dest_rank | The destination rank that has the copied array |
communicator | The MPI_Comm communicator that includes both ranks |
compare | A 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. |
void dnewTrfPartitionInit | ( | int_t | nsupers, |
dLUstruct_t * | LUstruct, | ||
gridinfo3d_t * | grid3d | ||
) |
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.
Llu | The local L and U data structures. |
xa | The index array of A. |
asub | The row subscripts of A. |
a | The numerical values of A. |
options | The options array. |
grid | The process grid. |
mem_use | The memory usage. |
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[] | ||
) |
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 | ||
) |
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.