From 8c276ea4425358d199cf419edaf751996f04a17f Mon Sep 17 00:00:00 2001 From: "Kurt A. O'Hearn" <ohearnku@msu.edu> Date: Fri, 5 Mar 2021 11:34:55 -0500 Subject: [PATCH] sPuReMD: fix OpenMP compilation issue with specifications prior to 4.0 (behavior change regarding implicit shared attribute assignment to const variables). --- sPuReMD/src/charges.c | 4 ++-- sPuReMD/src/lin_alg.c | 38 ++++++++++++++++++++++---------------- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/sPuReMD/src/charges.c b/sPuReMD/src/charges.c index de08a07f..f3311c1a 100644 --- a/sPuReMD/src/charges.c +++ b/sPuReMD/src/charges.c @@ -349,7 +349,7 @@ static void Spline_Extrapolate_Charges_QEq( const reax_system * const system, //TODO: good candidate for vectorization, avoid moving data with head pointer and circular buffer #if defined(_OPENMP) #pragma omp parallel for schedule(static) \ - default(none) private(i, s_tmp, t_tmp) shared(system, control, data, workspace) + default(none) private(i, s_tmp, t_tmp) firstprivate(system, control, workspace) #endif for ( i = 0; i < system->N_cm; ++i ) { @@ -443,7 +443,7 @@ static void Spline_Extrapolate_Charges_EE( const reax_system * const system, //TODO: good candidate for vectorization, avoid moving data with head pointer and circular buffer #if defined(_OPENMP) #pragma omp parallel for schedule(static) \ - default(none) private(i, s_tmp) shared(system, control, data, workspace) + default(none) private(i, s_tmp) firstprivate(system, control, workspace) #endif for ( i = 0; i < system->N_cm; ++i ) { diff --git a/sPuReMD/src/lin_alg.c b/sPuReMD/src/lin_alg.c index 84ab600f..53c7fca7 100644 --- a/sPuReMD/src/lin_alg.c +++ b/sPuReMD/src/lin_alg.c @@ -387,7 +387,8 @@ void Calculate_Droptol( const sparse_matrix * const A, #endif #if defined(_OPENMP) - #pragma omp parallel default(none) private(i, j, k, val, tid), shared(A, droptol, dtol, droptol_local, stderr) + #pragma omp parallel default(none) private(i, j, k, val, tid) \ + firstprivate(A, droptol, dtol) shared(droptol_local, stderr) #endif { #if defined(_OPENMP) @@ -492,7 +493,7 @@ int Estimate_LU_Fill( const sparse_matrix * const A, const real * const droptol #if defined(_OPENMP) #pragma omp parallel for schedule(static) \ - default(none) private(i, pj, val) shared( A, droptol) reduction(+: fillin) + default(none) private(i, pj, val) firstprivate(A, droptol) reduction(+: fillin) #endif for ( i = 0; i < A->n; ++i ) { @@ -521,7 +522,7 @@ real jacobi( const sparse_matrix * const H, real * const Hdia_inv ) #if defined(_OPENMP) #pragma omp parallel for schedule(dynamic,256) \ - default(none) private(i) shared(H, Hdia_inv) + default(none) private(i) firstprivate(H, Hdia_inv) #endif for ( i = 0; i < H->n; ++i ) { @@ -1149,7 +1150,7 @@ real FG_ICHOLT( const sparse_matrix * const A, const real * droptol, #if defined(_OPENMP) #pragma omp parallel for schedule(dynamic,512) \ - default(none) shared(A, D, D_inv, gamma) private(i) + default(none) shared(D, D_inv, gamma) private(i) firstprivate(A) #endif for ( i = 0; i < A->n; ++i ) { @@ -1167,7 +1168,7 @@ real FG_ICHOLT( const sparse_matrix * const A, const real * droptol, #if defined(_OPENMP) #pragma omp parallel for schedule(dynamic,512) \ - default(none) shared(A, D, D_inv, stderr) private(i) + default(none) shared(D, D_inv, stderr) private(i) firstprivate(A) #endif for ( i = 0; i < A->n; ++i ) { @@ -1180,7 +1181,7 @@ real FG_ICHOLT( const sparse_matrix * const A, const real * droptol, memcpy( DAD.j, A->j, sizeof(unsigned int) * A->start[A->n] ); #if defined(_OPENMP) #pragma omp parallel for schedule(dynamic,4096) \ - default(none) shared(DAD, A, D, gamma) private(i, pj) + default(none) shared(DAD, D, gamma) private(i, pj) firstprivate(A) #endif for ( i = 0; i < A->n; ++i ) { @@ -1358,7 +1359,7 @@ real FG_ILUT( const sparse_matrix * const A, const real * droptol, #if defined(_OPENMP) #pragma omp parallel for schedule(dynamic,512) \ - default(none) shared(A, D_inv, gamma) private(i) + default(none) shared(D_inv, gamma) private(i) firstprivate(A) #endif for ( i = 0; i < A->n; ++i ) { @@ -1376,7 +1377,7 @@ real FG_ILUT( const sparse_matrix * const A, const real * droptol, #if defined(_OPENMP) #pragma omp parallel for schedule(dynamic,512) \ - default(none) shared(A, D, D_inv) private(i) + default(none) shared(D, D_inv) private(i) firstprivate(A) #endif for ( i = 0; i < A->n; ++i ) { @@ -1390,7 +1391,7 @@ real FG_ILUT( const sparse_matrix * const A, const real * droptol, memcpy( DAD.j, A->j, sizeof(unsigned int) * A->start[A->n] ); #if defined(_OPENMP) #pragma omp parallel for schedule(dynamic,4096) \ - default(none) shared(DAD, A, D, gamma) private(i, pj) + default(none) shared(DAD, D, gamma) private(i, pj) firstprivate(A) #endif for ( i = 0; i < A->n; ++i ) { @@ -1416,7 +1417,7 @@ real FG_ILUT( const sparse_matrix * const A, const real * droptol, /* L has unit diagonal, by convention */ #if defined(_OPENMP) #pragma omp parallel for schedule(dynamic,512) \ - default(none) private(i) shared(A, L_temp) + default(none) shared(L_temp) private(i) firstprivate(A) #endif for ( i = 0; i < A->n; ++i ) { @@ -1671,7 +1672,7 @@ real sparse_approx_inverse( const sparse_matrix * const A, #pragma omp parallel default(none) \ private(i, k, pj, j_temp, identity_pos, N, M, d_i, d_j, m, n, \ nrhs, lda, ldb, info, X, Y, pos_x, pos_y, e_j, dense_matrix, e_j_size, dense_matrix_size) \ - shared(A_app_inv, stderr) + shared(stderr) #endif { X = smalloc( sizeof(char) * A->n, "sparse_approx_inverse::X" ); @@ -3056,7 +3057,8 @@ int GMRES( const static_storage * const workspace, const control_params * const #if defined(_OPENMP) #pragma omp parallel default(none) \ private(i, j, k, itr, bnorm, temp, t_start) \ - shared(workspace, control, H, b, tol, x, fresh_pre, N, cc, tmp1, tmp2, g_itr, g_j, g_bnorm, stderr) \ + firstprivate(control, workspace, H, b, tol, x, fresh_pre) \ + shared(N, cc, tmp1, tmp2, g_itr, g_j, g_bnorm, stderr) \ reduction(+: t_ortho, t_pa, t_spmv, t_ts, t_vops) #endif { @@ -3265,7 +3267,8 @@ int GMRES_HouseHolder( const static_storage * const workspace, #if defined(_OPENMP) #pragma omp parallel default(none) \ private(i, j, k, itr, bnorm, temp, t_start) \ - shared(workspace, control, H, b, tol, x, fresh_pre, v, z, w, u, N, cc, tmp1, tmp2, g_itr, g_j, g_bnorm, stderr) \ + firstprivate(control, workspace, H, b, tol, x, fresh_pre) \ + shared(v, z, w, u, N, cc, tmp1, tmp2, g_itr, g_j, g_bnorm, stderr) \ reduction(+: t_ortho, t_pa, t_spmv, t_ts, t_vops) #endif { @@ -3509,8 +3512,9 @@ int CG( const static_storage * const workspace, const control_params * const con #if defined(_OPENMP) #pragma omp parallel default(none) \ private(i, tmp, alpha, beta, bnorm, rnorm, sig_old, sig_new, t_start) \ + firstprivate(control, workspace, H, b, tol, x, fresh_pre) \ reduction(+: t_pa, t_spmv, t_vops) \ - shared(workspace, control, H, b, tol, x, fresh_pre, g_itr, g_bnorm, g_rnorm, N, d, r, p, z) + shared(g_itr, g_bnorm, g_rnorm, N, d, r, p, z) #endif { t_pa = 0.0; @@ -3635,8 +3639,9 @@ int BiCGStab( const static_storage * const workspace, const control_params * con #if defined(_OPENMP) #pragma omp parallel default(none) \ private(i, tmp, alpha, beta, omega, sigma, rho, rho_old, rnorm, bnorm, t_start) \ + firstprivate(control, workspace, H, b, tol, x, fresh_pre) \ reduction(+: t_pa, t_spmv, t_vops) \ - shared(workspace, control, H, b, tol, x, fresh_pre, g_itr, g_rnorm, g_bnorm, g_omega, g_rho, N) + shared(g_itr, g_rnorm, g_bnorm, g_omega, g_rho, N) #endif { t_pa = 0.0; @@ -3817,8 +3822,9 @@ int SDM( const static_storage * const workspace, const control_params * const co #if defined(_OPENMP) #pragma omp parallel default(none) \ private(i, tmp, alpha, bnorm, sig, t_start) \ + firstprivate(control, workspace, H, b, tol, x, fresh_pre) \ reduction(+: t_pa, t_spmv, t_vops) \ - shared(workspace, control, H, b, tol, x, fresh_pre, g_itr, g_sig, g_bnorm, N) + shared(g_itr, g_sig, g_bnorm, N) #endif { t_pa = 0.0; -- GitLab