modernize. turn static inline into just inline
This commit is contained in:
@ -50,142 +50,138 @@ class ThrOMP {
|
|||||||
|
|
||||||
double memory_usage_thr();
|
double memory_usage_thr();
|
||||||
|
|
||||||
inline void sync_threads()
|
inline void sync_threads(){
|
||||||
{
|
|
||||||
#if defined(_OPENMP)
|
#if defined(_OPENMP)
|
||||||
#pragma omp barrier
|
#pragma omp barrier
|
||||||
#endif
|
#endif
|
||||||
{
|
{;
|
||||||
;
|
}
|
||||||
}
|
}; // namespace LAMMPS_NS
|
||||||
};
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
THR_NONE = 0,
|
THR_NONE = 0,
|
||||||
THR_PAIR = 1,
|
THR_PAIR = 1,
|
||||||
THR_BOND = 1 << 1,
|
THR_BOND = 1 << 1,
|
||||||
THR_ANGLE = 1 << 2,
|
THR_ANGLE = 1 << 2,
|
||||||
THR_DIHEDRAL = 1 << 3,
|
THR_DIHEDRAL = 1 << 3,
|
||||||
THR_IMPROPER = 1 << 4,
|
THR_IMPROPER = 1 << 4,
|
||||||
THR_KSPACE = 1 << 5,
|
THR_KSPACE = 1 << 5,
|
||||||
THR_CHARMM = 1 << 6, /*THR_PROXY=1<<7,THR_HYBRID=1<<8, */
|
THR_CHARMM = 1 << 6, /*THR_PROXY=1<<7,THR_HYBRID=1<<8, */
|
||||||
THR_FIX = 1 << 9,
|
THR_FIX = 1 << 9,
|
||||||
THR_INTGR = 1 << 10
|
THR_INTGR = 1 << 10
|
||||||
};
|
|
||||||
|
|
||||||
protected:
|
|
||||||
// extra ev_tally setup work for threaded styles
|
|
||||||
void ev_setup_thr(int, int, int, double *, double **, double **, ThrData *);
|
|
||||||
|
|
||||||
// compute global per thread virial contribution from per-thread force
|
|
||||||
void virial_fdotr_compute_thr(double *const, const double *const *const,
|
|
||||||
const double *const *const, const int, const int, const int);
|
|
||||||
|
|
||||||
// reduce per thread data as needed
|
|
||||||
void reduce_thr(void *const style, const int eflag, const int vflag, ThrData *const thr);
|
|
||||||
|
|
||||||
// thread safe variant error abort support.
|
|
||||||
// signals an error condition in any thread by making
|
|
||||||
// thr_error > 0, if condition "cond" is true.
|
|
||||||
// will abort from thread 0 if thr_error is > 0
|
|
||||||
// otherwise return true.
|
|
||||||
// returns false if no error found on any thread.
|
|
||||||
// use return value to jump/return to end of threaded region.
|
|
||||||
|
|
||||||
bool check_error_thr(const bool cond, const int tid, const char *fname, const int line,
|
|
||||||
const char *errmsg)
|
|
||||||
{
|
|
||||||
if (cond) {
|
|
||||||
#if defined(_OPENMP)
|
|
||||||
#pragma omp atomic
|
|
||||||
++thr_error;
|
|
||||||
#endif
|
|
||||||
if (tid > 0)
|
|
||||||
return true;
|
|
||||||
else
|
|
||||||
lmp->error->one(fname, line, errmsg);
|
|
||||||
} else {
|
|
||||||
if (thr_error > 0) {
|
|
||||||
if (tid == 0)
|
|
||||||
lmp->error->one(fname, line, errmsg);
|
|
||||||
else
|
|
||||||
return true;
|
|
||||||
} else
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
|
|
||||||
protected:
|
|
||||||
// threading adapted versions of the ev_tally infrastructure
|
|
||||||
// style specific versions (need access to style class flags)
|
|
||||||
|
|
||||||
// Pair
|
|
||||||
void e_tally_thr(Pair *const, const int, const int, const int, const int, const double,
|
|
||||||
const double, ThrData *const);
|
|
||||||
void v_tally_thr(Pair *const, const int, const int, const int, const int, const double *const,
|
|
||||||
ThrData *const);
|
|
||||||
|
|
||||||
void ev_tally_thr(Pair *const, const int, const int, const int, const int, const double,
|
|
||||||
const double, const double, const double, const double, const double,
|
|
||||||
ThrData *const);
|
|
||||||
void ev_tally_full_thr(Pair *const, const int, const double, const double, const double,
|
|
||||||
const double, const double, const double, ThrData *const);
|
|
||||||
void ev_tally_xyz_thr(Pair *const, const int, const int, const int, const int, const double,
|
|
||||||
const double, const double, const double, const double, const double,
|
|
||||||
const double, const double, ThrData *const);
|
|
||||||
void ev_tally_xyz_full_thr(Pair *const, const int, const double, const double, const double,
|
|
||||||
const double, const double, const double, const double, const double,
|
|
||||||
ThrData *const);
|
|
||||||
void v_tally2_thr(Pair *const, const int, const int, const double, const double *const,
|
|
||||||
ThrData *const);
|
|
||||||
void v_tally2_newton_thr(Pair *const, const int, const double *const, const double *const,
|
|
||||||
ThrData *const);
|
|
||||||
void ev_tally3_thr(Pair *const, const int, const int, const int, const double, const double,
|
|
||||||
const double *const, const double *const, const double *const,
|
|
||||||
const double *const, ThrData *const);
|
|
||||||
void v_tally3_thr(Pair *const, const int, const int, const int, const double *const,
|
|
||||||
const double *const, const double *const, const double *const, ThrData *const);
|
|
||||||
void ev_tally4_thr(Pair *const, const int, const int, const int, const int, const double,
|
|
||||||
const double *const, const double *const, const double *const,
|
|
||||||
const double *const, const double *const, const double *const, ThrData *const);
|
|
||||||
void v_tally4_thr(Pair *const, const int, const int, const int, const int, const double *const,
|
|
||||||
const double *const, const double *const, const double *const,
|
|
||||||
const double *const, const double *const, ThrData *const);
|
|
||||||
|
|
||||||
// Bond
|
|
||||||
void ev_tally_thr(Bond *const, const int, const int, const int, const int, const double,
|
|
||||||
const double, const double, const double, const double, ThrData *const);
|
|
||||||
|
|
||||||
// Angle
|
|
||||||
void ev_tally_thr(Angle *const, const int, const int, const int, const int, const int,
|
|
||||||
const double, const double *const, const double *const, const double,
|
|
||||||
const double, const double, const double, const double, const double,
|
|
||||||
ThrData *const thr);
|
|
||||||
void ev_tally13_thr(Angle *const, const int, const int, const int, const int, const double,
|
|
||||||
const double, const double, const double, const double, ThrData *const thr);
|
|
||||||
|
|
||||||
// Dihedral
|
|
||||||
void ev_tally_thr(Dihedral *const, const int, const int, const int, const int, const int,
|
|
||||||
const int, const double, const double *const, const double *const,
|
|
||||||
const double *const, const double, const double, const double, const double,
|
|
||||||
const double, const double, const double, const double, const double,
|
|
||||||
ThrData *const);
|
|
||||||
|
|
||||||
// Improper
|
|
||||||
void ev_tally_thr(Improper *const, const int, const int, const int, const int, const int,
|
|
||||||
const int, const double, const double *const, const double *const,
|
|
||||||
const double *const, const double, const double, const double, const double,
|
|
||||||
const double, const double, const double, const double, const double,
|
|
||||||
ThrData *const);
|
|
||||||
|
|
||||||
// style independent versions
|
|
||||||
void ev_tally_list_thr(Pair *const, const int, const int *const, const double *const,
|
|
||||||
const double, const double, ThrData *const);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// extra ev_tally setup work for threaded styles
|
||||||
|
void ev_setup_thr(int, int, int, double *, double **, double **, ThrData *);
|
||||||
|
|
||||||
|
// compute global per thread virial contribution from per-thread force
|
||||||
|
void virial_fdotr_compute_thr(double *const, const double *const *const, const double *const *const,
|
||||||
|
const int, const int, const int);
|
||||||
|
|
||||||
|
// reduce per thread data as needed
|
||||||
|
void reduce_thr(void *const style, const int eflag, const int vflag, ThrData *const thr);
|
||||||
|
|
||||||
|
// thread safe variant error abort support.
|
||||||
|
// signals an error condition in any thread by making
|
||||||
|
// thr_error > 0, if condition "cond" is true.
|
||||||
|
// will abort from thread 0 if thr_error is > 0
|
||||||
|
// otherwise return true.
|
||||||
|
// returns false if no error found on any thread.
|
||||||
|
// use return value to jump/return to end of threaded region.
|
||||||
|
|
||||||
|
bool check_error_thr(const bool cond, const int tid, const char *fname, const int line,
|
||||||
|
const char *errmsg)
|
||||||
|
{
|
||||||
|
if (cond) {
|
||||||
|
#if defined(_OPENMP)
|
||||||
|
#pragma omp atomic
|
||||||
|
++thr_error;
|
||||||
|
#endif
|
||||||
|
if (tid > 0)
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
lmp->error->one(fname, line, errmsg);
|
||||||
|
} else {
|
||||||
|
if (thr_error > 0) {
|
||||||
|
if (tid == 0)
|
||||||
|
lmp->error->one(fname, line, errmsg);
|
||||||
|
else
|
||||||
|
return true;
|
||||||
|
} else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// threading adapted versions of the ev_tally infrastructure
|
||||||
|
// style specific versions (need access to style class flags)
|
||||||
|
|
||||||
|
// Pair
|
||||||
|
void e_tally_thr(Pair *const, const int, const int, const int, const int, const double,
|
||||||
|
const double, ThrData *const);
|
||||||
|
void v_tally_thr(Pair *const, const int, const int, const int, const int, const double *const,
|
||||||
|
ThrData *const);
|
||||||
|
|
||||||
|
void ev_tally_thr(Pair *const, const int, const int, const int, const int, const double,
|
||||||
|
const double, const double, const double, const double, const double,
|
||||||
|
ThrData *const);
|
||||||
|
void ev_tally_full_thr(Pair *const, const int, const double, const double, const double,
|
||||||
|
const double, const double, const double, ThrData *const);
|
||||||
|
void ev_tally_xyz_thr(Pair *const, const int, const int, const int, const int, const double,
|
||||||
|
const double, const double, const double, const double, const double,
|
||||||
|
const double, const double, ThrData *const);
|
||||||
|
void ev_tally_xyz_full_thr(Pair *const, const int, const double, const double, const double,
|
||||||
|
const double, const double, const double, const double, const double,
|
||||||
|
ThrData *const);
|
||||||
|
void v_tally2_thr(Pair *const, const int, const int, const double, const double *const,
|
||||||
|
ThrData *const);
|
||||||
|
void v_tally2_newton_thr(Pair *const, const int, const double *const, const double *const,
|
||||||
|
ThrData *const);
|
||||||
|
void ev_tally3_thr(Pair *const, const int, const int, const int, const double, const double,
|
||||||
|
const double *const, const double *const, const double *const,
|
||||||
|
const double *const, ThrData *const);
|
||||||
|
void v_tally3_thr(Pair *const, const int, const int, const int, const double *const,
|
||||||
|
const double *const, const double *const, const double *const, ThrData *const);
|
||||||
|
void ev_tally4_thr(Pair *const, const int, const int, const int, const int, const double,
|
||||||
|
const double *const, const double *const, const double *const,
|
||||||
|
const double *const, const double *const, const double *const, ThrData *const);
|
||||||
|
void v_tally4_thr(Pair *const, const int, const int, const int, const int, const double *const,
|
||||||
|
const double *const, const double *const, const double *const,
|
||||||
|
const double *const, const double *const, ThrData *const);
|
||||||
|
|
||||||
|
// Bond
|
||||||
|
void ev_tally_thr(Bond *const, const int, const int, const int, const int, const double,
|
||||||
|
const double, const double, const double, const double, ThrData *const);
|
||||||
|
|
||||||
|
// Angle
|
||||||
|
void ev_tally_thr(Angle *const, const int, const int, const int, const int, const int, const double,
|
||||||
|
const double *const, const double *const, const double, const double,
|
||||||
|
const double, const double, const double, const double, ThrData *const thr);
|
||||||
|
void ev_tally13_thr(Angle *const, const int, const int, const int, const int, const double,
|
||||||
|
const double, const double, const double, const double, ThrData *const thr);
|
||||||
|
|
||||||
|
// Dihedral
|
||||||
|
void ev_tally_thr(Dihedral *const, const int, const int, const int, const int, const int, const int,
|
||||||
|
const double, const double *const, const double *const, const double *const,
|
||||||
|
const double, const double, const double, const double, const double,
|
||||||
|
const double, const double, const double, const double, ThrData *const);
|
||||||
|
|
||||||
|
// Improper
|
||||||
|
void ev_tally_thr(Improper *const, const int, const int, const int, const int, const int, const int,
|
||||||
|
const double, const double *const, const double *const, const double *const,
|
||||||
|
const double, const double, const double, const double, const double,
|
||||||
|
const double, const double, const double, const double, ThrData *const);
|
||||||
|
|
||||||
|
// style independent versions
|
||||||
|
void ev_tally_list_thr(Pair *const, const int, const int *const, const double *const, const double,
|
||||||
|
const double, ThrData *const);
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
// set loop range thread id, and force array offset for threaded runs.
|
// set loop range thread id, and force array offset for threaded runs.
|
||||||
static inline void loop_setup_thr(int &ifrom, int &ito, int &tid, int inum, int nthreads)
|
inline void loop_setup_thr(int &ifrom, int &ito, int &tid, int inum, int nthreads)
|
||||||
{
|
{
|
||||||
#if defined(_OPENMP)
|
#if defined(_OPENMP)
|
||||||
tid = omp_get_thread_num();
|
tid = omp_get_thread_num();
|
||||||
@ -204,22 +200,21 @@ static inline void loop_setup_thr(int &ifrom, int &ito, int &tid, int inum, int
|
|||||||
|
|
||||||
// helpful definitions to help compilers optimizing code better
|
// helpful definitions to help compilers optimizing code better
|
||||||
|
|
||||||
typedef struct {
|
using dbl3_t = struct _dbl3_t {
|
||||||
double x, y, z;
|
double x, y, z;
|
||||||
} dbl3_t;
|
};
|
||||||
typedef struct {
|
using dbl4_t = struct _dbl4_t {
|
||||||
double x, y, z, w;
|
double x, y, z, w;
|
||||||
} dbl4_t;
|
};
|
||||||
typedef struct {
|
using int3_t = struct _int3_t {
|
||||||
int a, b, t;
|
int a, b, t;
|
||||||
} int3_t;
|
};
|
||||||
typedef struct {
|
using int4_t = struct _int4_t {
|
||||||
int a, b, c, t;
|
int a, b, c, t;
|
||||||
} int4_t;
|
};
|
||||||
typedef struct {
|
using int5_t = struct _int5_t {
|
||||||
int a, b, c, d, t;
|
int a, b, c, d, t;
|
||||||
} int5_t;
|
};
|
||||||
|
|
||||||
} // namespace LAMMPS_NS
|
} // namespace LAMMPS_NS
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user