Change hypre_AuxParCSRMatrix variables to HYPRE_BigInt (#842)

This PR changes the type of four variables in the auxiliary matrix data structure to avoid the multiplication of integers and floating-point numbers during `hypre_IJMatrixSetAddValuesParCSRDevice`
This commit is contained in:
Victor A. Paludetto Magri 2023-03-07 20:24:56 -05:00 committed by GitHub
parent 6907852618
commit 16c4d8304d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 18 additions and 16 deletions

View File

@ -101,9 +101,9 @@ hypre_IJMatrixSetAddValuesParCSRDevice( hypre_IJMatrix *matrix,
hypre_IJMatrixTranslator(matrix) = aux_matrix; hypre_IJMatrixTranslator(matrix) = aux_matrix;
} }
HYPRE_Int stack_elmts_max = hypre_AuxParCSRMatrixMaxStackElmts(aux_matrix); HYPRE_BigInt stack_elmts_max = hypre_AuxParCSRMatrixMaxStackElmts(aux_matrix);
HYPRE_Int stack_elmts_current = hypre_AuxParCSRMatrixCurrentStackElmts(aux_matrix); HYPRE_BigInt stack_elmts_current = hypre_AuxParCSRMatrixCurrentStackElmts(aux_matrix);
HYPRE_Int stack_elmts_required = stack_elmts_current + nelms; HYPRE_BigInt stack_elmts_required = stack_elmts_current + (HYPRE_BigInt) nelms;
HYPRE_BigInt *stack_i = hypre_AuxParCSRMatrixStackI(aux_matrix); HYPRE_BigInt *stack_i = hypre_AuxParCSRMatrixStackI(aux_matrix);
HYPRE_BigInt *stack_j = hypre_AuxParCSRMatrixStackJ(aux_matrix); HYPRE_BigInt *stack_j = hypre_AuxParCSRMatrixStackJ(aux_matrix);
HYPRE_Complex *stack_data = hypre_AuxParCSRMatrixStackData(aux_matrix); HYPRE_Complex *stack_data = hypre_AuxParCSRMatrixStackData(aux_matrix);
@ -111,8 +111,10 @@ hypre_IJMatrixSetAddValuesParCSRDevice( hypre_IJMatrix *matrix,
if ( stack_elmts_max < stack_elmts_required ) if ( stack_elmts_max < stack_elmts_required )
{ {
HYPRE_Int stack_elmts_max_new = hypre_max(hypre_AuxParCSRMatrixUsrOnProcElmts (aux_matrix), 0) + HYPRE_BigInt stack_elmts_max_new =
hypre_max(hypre_AuxParCSRMatrixUsrOffProcElmts(aux_matrix), 0); hypre_max(hypre_AuxParCSRMatrixUsrOnProcElmts (aux_matrix), 0) +
hypre_max(hypre_AuxParCSRMatrixUsrOffProcElmts(aux_matrix), 0);
if ( hypre_AuxParCSRMatrixUsrOnProcElmts (aux_matrix) < 0 || if ( hypre_AuxParCSRMatrixUsrOnProcElmts (aux_matrix) < 0 ||
hypre_AuxParCSRMatrixUsrOffProcElmts(aux_matrix) < 0 ) hypre_AuxParCSRMatrixUsrOffProcElmts(aux_matrix) < 0 )
{ {
@ -205,7 +207,7 @@ hypre_IJMatrixSetAddValuesParCSRDevice( hypre_IJMatrix *matrix,
HYPRE_MEMORY_DEVICE); HYPRE_MEMORY_DEVICE);
} }
hypre_AuxParCSRMatrixCurrentStackElmts(aux_matrix) += nelms; hypre_AuxParCSRMatrixCurrentStackElmts(aux_matrix) += (HYPRE_BigInt) nelms;
hypre_TFree(row_ptr, HYPRE_MEMORY_DEVICE); hypre_TFree(row_ptr, HYPRE_MEMORY_DEVICE);

View File

@ -81,16 +81,16 @@ typedef struct
HYPRE_MemoryLocation memory_location; HYPRE_MemoryLocation memory_location;
#if defined(HYPRE_USING_CUDA) || defined(HYPRE_USING_HIP) || defined(HYPRE_USING_SYCL) #if defined(HYPRE_USING_CUDA) || defined(HYPRE_USING_HIP) || defined(HYPRE_USING_SYCL)
HYPRE_Int max_stack_elmts; HYPRE_BigInt max_stack_elmts;
HYPRE_Int current_stack_elmts; HYPRE_BigInt current_stack_elmts;
HYPRE_BigInt *stack_i; HYPRE_BigInt *stack_i;
HYPRE_BigInt *stack_j; HYPRE_BigInt *stack_j;
HYPRE_Complex *stack_data; HYPRE_Complex *stack_data;
char *stack_sora; /* Set (1) or Add (0) */ char *stack_sora; /* Set (1) or Add (0) */
HYPRE_Int usr_on_proc_elmts; /* user given num elmt on-proc */ HYPRE_Int usr_on_proc_elmts; /* user given num elmt on-proc */
HYPRE_Int usr_off_proc_elmts; /* user given num elmt off-proc */ HYPRE_Int usr_off_proc_elmts; /* user given num elmt off-proc */
HYPRE_Real init_alloc_factor; HYPRE_BigInt init_alloc_factor;
HYPRE_Real grow_factor; HYPRE_BigInt grow_factor;
#endif #endif
} hypre_AuxParCSRMatrix; } hypre_AuxParCSRMatrix;

View File

@ -61,8 +61,8 @@ hypre_AuxParCSRMatrixCreate( hypre_AuxParCSRMatrix **aux_matrix,
hypre_AuxParCSRMatrixStackSorA(matrix) = NULL; hypre_AuxParCSRMatrixStackSorA(matrix) = NULL;
hypre_AuxParCSRMatrixUsrOnProcElmts(matrix) = -1; hypre_AuxParCSRMatrixUsrOnProcElmts(matrix) = -1;
hypre_AuxParCSRMatrixUsrOffProcElmts(matrix) = -1; hypre_AuxParCSRMatrixUsrOffProcElmts(matrix) = -1;
hypre_AuxParCSRMatrixInitAllocFactor(matrix) = 5.0; hypre_AuxParCSRMatrixInitAllocFactor(matrix) = 5;
hypre_AuxParCSRMatrixGrowFactor(matrix) = 2.0; hypre_AuxParCSRMatrixGrowFactor(matrix) = 2;
#endif #endif
*aux_matrix = matrix; *aux_matrix = matrix;

View File

@ -66,16 +66,16 @@ typedef struct
HYPRE_MemoryLocation memory_location; HYPRE_MemoryLocation memory_location;
#if defined(HYPRE_USING_CUDA) || defined(HYPRE_USING_HIP) || defined(HYPRE_USING_SYCL) #if defined(HYPRE_USING_CUDA) || defined(HYPRE_USING_HIP) || defined(HYPRE_USING_SYCL)
HYPRE_Int max_stack_elmts; HYPRE_BigInt max_stack_elmts;
HYPRE_Int current_stack_elmts; HYPRE_BigInt current_stack_elmts;
HYPRE_BigInt *stack_i; HYPRE_BigInt *stack_i;
HYPRE_BigInt *stack_j; HYPRE_BigInt *stack_j;
HYPRE_Complex *stack_data; HYPRE_Complex *stack_data;
char *stack_sora; /* Set (1) or Add (0) */ char *stack_sora; /* Set (1) or Add (0) */
HYPRE_Int usr_on_proc_elmts; /* user given num elmt on-proc */ HYPRE_Int usr_on_proc_elmts; /* user given num elmt on-proc */
HYPRE_Int usr_off_proc_elmts; /* user given num elmt off-proc */ HYPRE_Int usr_off_proc_elmts; /* user given num elmt off-proc */
HYPRE_Real init_alloc_factor; HYPRE_BigInt init_alloc_factor;
HYPRE_Real grow_factor; HYPRE_BigInt grow_factor;
#endif #endif
} hypre_AuxParCSRMatrix; } hypre_AuxParCSRMatrix;