Commit 48931833 authored by Pavel Kus's avatar Pavel Kus

Merge remote-tracking branch 'origin/master_pre_stage' into print_parameters

parents 53be9268 fba398fd
......@@ -276,19 +276,26 @@
else ! useGPU
! openmp only in non-GPU case
thread_width = (l_nev-1)/max_threads + 1 ! number of eigenvectors per OMP thread
#if REALCASE == 1
call obj%get("stripe_width_real",stripe_width, error)
#ifdef DOUBLE_PRECISION_REAL
stripe_width = 48 ! Must be a multiple of 4
!stripe_width = 48 ! Must be a multiple of 4
#else
stripe_width = 96 ! Must be a multiple of 8
stripe_width = stripe_width * 2
!stripe_width = 96 ! Must be a multiple of 8
#endif
#endif /* REALCASE */
#if COMPLEXCASE == 1
call obj%get("stripe_width_complex",stripe_width, error)
#ifdef DOUBLE_PRECISION_COMPLEX
stripe_width = 48 ! Must be a multiple of 2
!stripe_width = 48 ! Must be a multiple of 2
#else
stripe_width = 48 ! Must be a multiple of 4
stripe_width = stripe_width * 2
!stripe_width = 48 ! Must be a multiple of 4
#endif
#endif /* COMPLEXCASE */
......
......@@ -83,6 +83,14 @@ static int band_to_full_cardinality(elpa_index_t index);
static int band_to_full_enumerate(elpa_index_t index, int i);
static int band_to_full_is_valid(elpa_index_t index, int n, int new_value);
static int stripewidth_real_cardinality(elpa_index_t index);
static int stripewidth_real_enumerate(elpa_index_t index, int i);
static int stripewidth_real_is_valid(elpa_index_t index, int n, int new_value);
static int stripewidth_complex_cardinality(elpa_index_t index);
static int stripewidth_complex_enumerate(elpa_index_t index, int i);
static int stripewidth_complex_is_valid(elpa_index_t index, int n, int new_value);
static int omp_threads_cardinality(elpa_index_t index);
static int omp_threads_enumerate(elpa_index_t index, int i);
static int omp_threads_is_valid(elpa_index_t index, int n, int new_value);
......@@ -214,6 +222,11 @@ static const elpa_index_int_entry_t int_entries[] = {
INT_ENTRY("blocking_in_band_to_full", "Loop blocking, default 3", 3, ELPA_AUTOTUNE_MEDIUM, ELPA_AUTOTUNE_DOMAIN_ANY,
band_to_full_cardinality, band_to_full_enumerate, band_to_full_is_valid, NULL, PRINT_YES),
INT_ENTRY("stripewidth_real", "Stripewidth_real, default 48. Must be a multiple of 4", 48, ELPA_AUTOTUNE_MEDIUM, ELPA_AUTOTUNE_DOMAIN_REAL,
stripewidth_real_cardinality, stripewidth_real_enumerate, stripewidth_real_is_valid, NULL, PRINT_YES),
INT_ENTRY("stripewidth_complex", "Stripewidth_complex, default 96. Must be a multiple of 8", 96, ELPA_AUTOTUNE_MEDIUM, ELPA_AUTOTUNE_DOMAIN_COMPLEX,
stripewidth_complex_cardinality, stripewidth_complex_enumerate, stripewidth_complex_is_valid, NULL, PRINT_YES),
INT_ENTRY("max_stored_rows", "Maximum number of stored rows used in ELPA 1 backtransformation, default 63", 63, ELPA_AUTOTUNE_MEDIUM, ELPA_AUTOTUNE_DOMAIN_ANY,
max_stored_rows_cardinality, max_stored_rows_enumerate, max_stored_rows_is_valid, NULL, PRINT_YES),
#ifdef WITH_OPENMP
......@@ -750,6 +763,100 @@ static int band_to_full_is_valid(elpa_index_t index, int n, int new_value) {
return (1 <= new_value) && (new_value <= max_block);
}
static int stripewidth_real_cardinality(elpa_index_t index) {
return 17;
}
static int stripewidth_complex_cardinality(elpa_index_t index) {
return 17;
}
static int stripewidth_real_enumerate(elpa_index_t index, int i) {
switch(i) {
case 0:
return 32;
case 1:
return 36;
case 2:
return 40;
case 3:
return 44;
case 4:
return 48;
case 5:
return 52;
case 6:
return 56;
case 7:
return 60;
case 8:
return 64;
case 9:
return 68;
case 10:
return 72;
case 11:
return 76;
case 12:
return 80;
case 13:
return 84;
case 14:
return 88;
case 15:
return 92;
case 16:
return 96;
}
}
static int stripewidth_complex_enumerate(elpa_index_t index, int i) {
switch(i) {
case 0:
return 48;
case 1:
return 56;
case 2:
return 64;
case 3:
return 72;
case 4:
return 80;
case 5:
return 88;
case 6:
return 96;
case 7:
return 104;
case 8:
return 112;
case 9:
return 120;
case 10:
return 128;
case 11:
return 136;
case 12:
return 144;
case 13:
return 152;
case 14:
return 160;
case 15:
return 168;
case 16:
return 176;
}
}
static int stripewidth_real_is_valid(elpa_index_t index, int n, int new_value) {
return (32 <= new_value) && (new_value <= 96);
}
static int stripewidth_complex_is_valid(elpa_index_t index, int n, int new_value) {
return (48 <= new_value) && (new_value <= 176);
}
static int omp_threads_cardinality(elpa_index_t index) {
int max_threads;
#ifdef WITH_OPENMP
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment