From 4a71a4bdd89e98ab1e9fbfcc4fafed6197b1335c Mon Sep 17 00:00:00 2001 From: lidanqing-intel Date: Wed, 18 May 2022 06:09:18 +0000 Subject: [PATCH] update update Fix default LOW_PREC --- source/CMakeLists.txt | 3 +- source/api_cc/include/common.h | 12 ++-- source/api_cc/src/PaddleDeepPot.cc | 32 +++++----- source/lmp/env.sh.in | 2 +- source/lmp/pair_deepmd.cpp | 94 +++++++++++++++--------------- source/lmp/pair_deepmd.h.in | 4 +- 6 files changed, 74 insertions(+), 73 deletions(-) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 7bdcf35b07..457b370a48 100755 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -171,13 +171,14 @@ if (DEFINED FLOAT_PREC) string ( TOLOWER ${FLOAT_PREC} lower_float_prec ) if (lower_float_prec STREQUAL "high") set(PREC_DEF "-DHIGH_PREC") + add_definitions(${PREC_DEF}) else () set(PREC_DEF "") endif () else () set(PREC_DEF "-DHIGH_PREC") + add_definitions(${PREC_DEF}) endif() -add_definitions (${PREC_DEF}) # find openmp find_package(OpenMP) diff --git a/source/api_cc/include/common.h b/source/api_cc/include/common.h index efcd9e180e..ace389431f 100755 --- a/source/api_cc/include/common.h +++ b/source/api_cc/include/common.h @@ -18,14 +18,14 @@ typedef std::string STRINGTYPE; #endif #ifdef HIGH_PREC -//typedef double VALUETYPE; -//typedef double ENERGYTYPE; -typedef float VALUETYPE; -typedef float ENERGYTYPE; +typedef double VALUETYPE; +typedef double ENERGYTYPE; +// typedef float VALUETYPE; +// typedef float ENERGYTYPE; #else typedef float VALUETYPE; -//typedef double ENERGYTYPE; -typedef float ENERGYTYPE; +typedef double ENERGYTYPE; +// typedef float ENERGYTYPE; #endif struct NeighborListData diff --git a/source/api_cc/src/PaddleDeepPot.cc b/source/api_cc/src/PaddleDeepPot.cc index af12c8436a..d5f07c76cc 100755 --- a/source/api_cc/src/PaddleDeepPot.cc +++ b/source/api_cc/src/PaddleDeepPot.cc @@ -41,7 +41,8 @@ paddle_run_model(ENERGYTYPE & dener, } predictor->Run(); // Deal with output - std::vector oe; + // std::vector oe; + std::vector oe; std::vector of, oav; auto output_names = predictor->GetOutputNames(); @@ -66,7 +67,7 @@ paddle_run_model(ENERGYTYPE & dener, oav.resize(out_v_num); out_v_t->CopyToCpu(oav.data()); - dener = oe[0]; + dener = static_cast(oe[0]); std::vector dforce (3 * nall, 0.0); dvirial.resize(9); for (int i = 0; i < nall * 3; ++i) { @@ -123,7 +124,8 @@ paddle_run_model (deepmd::ENERGYTYPE & dener, predictor->Run(); // {"o_energy", "o_force", "o_atom_energy", "o_atom_virial"}, // Deal with output - std::vector oe; + // std::vector oe; + std::vector oe; std::vector of, oav, oae; auto output_names = predictor->GetOutputNames(); @@ -155,7 +157,7 @@ paddle_run_model (deepmd::ENERGYTYPE & dener, oav.resize(out_av_num); out_av_t->CopyToCpu(oav.data()); - dener = oe[0]; + dener = static_cast(oe[0]); std::vector dforce (3 * nall); std::vector datom_energy (nall, 0); std::vector datom_virial (9 * nall); @@ -583,15 +585,15 @@ compute (std::vector & all_energy, assert (nloc == ret[ii]); } for (unsigned ii = 0; ii < numb_models; ++ii) { - // paddle_run_model (all_energy[ii], all_force[ii], all_virial[ii], all_atom_energy[ii], all_atom_virial[ii], sessions[ii], predictor_, atommap, nghost); - paddle_run_model (all_energy[ii], all_force[ii], all_virial[ii], all_atom_energy[ii], all_atom_virial[ii], predictors[ii], atommap, nghost); + paddle_run_model (all_energy[ii], all_force[ii], all_virial[ii], all_atom_energy[ii], all_atom_virial[ii], predictors[ii], atommap, nghost); } } +#ifndef HIGH_PREC void PaddleDeepPotModelDevi:: -compute_avg (VALUETYPE & dener, - const std::vector & all_energy) +compute_avg (ENERGYTYPE & dener, + const std::vector& all_energy) { assert (all_energy.size() == numb_models); if (numb_models == 0) return; @@ -600,14 +602,14 @@ compute_avg (VALUETYPE & dener, for (unsigned ii = 0; ii < numb_models; ++ii){ dener += all_energy[ii]; } - dener /= (VALUETYPE)(numb_models); + dener /= (ENERGYTYPE)(numb_models); } +#endif -#ifndef HIGH_PREC void -DeepPotModelDevi:: -compute_avg (ENERGYTYPE & dener, - const std::vector& all_energy) +PaddleDeepPotModelDevi:: +compute_avg (VALUETYPE & dener, + const std::vector & all_energy) { assert (all_energy.size() == numb_models); if (numb_models == 0) return; @@ -616,9 +618,8 @@ compute_avg (ENERGYTYPE & dener, for (unsigned ii = 0; ii < numb_models; ++ii){ dener += all_energy[ii]; } - dener /= (ENERGYTYPE)(numb_models); + dener /= (VALUETYPE)(numb_models); } -#endif void PaddleDeepPotModelDevi:: @@ -642,7 +643,6 @@ compute_avg (std::vector & avg, } } - void PaddleDeepPotModelDevi:: compute_std_e (std::vector & std, diff --git a/source/lmp/env.sh.in b/source/lmp/env.sh.in index 9cd8ca7198..f614296b6c 100755 --- a/source/lmp/env.sh.in +++ b/source/lmp/env.sh.in @@ -1,5 +1,5 @@ DEEPMD_ROOT=@CMAKE_INSTALL_PREFIX@ -NNP_INC=" -std=c++14 @PREC_DEF@ @TTM_DEF@ @OLD_LMP_PPPM_DEF@ -I$DEEPMD_ROOT/include -I$PADDLE_ROOT" +NNP_INC=" -std=c++14 @PREC_DEF@ @TTM_DEF@ @OLD_LMP_PPPM_DEF@ -I$DEEPMD_ROOT/include -I$paddle_root" NNP_PATH=" -L$DEEPMD_ROOT/lib" NNP_LIB=" -Wl,--no-as-needed -l@LIB_DEEPMD_CC@ -l@LIB_DEEPMD@ -Wl,-rpath=$DEEPMD_ROOT/lib -lpd_infer_custom_op" diff --git a/source/lmp/pair_deepmd.cpp b/source/lmp/pair_deepmd.cpp index 9404bd0c4e..12b1e0f953 100755 --- a/source/lmp/pair_deepmd.cpp +++ b/source/lmp/pair_deepmd.cpp @@ -131,10 +131,10 @@ std::vector PairDeepMD::get_params_file_content(const std::vector & vec, +ana_st (double & max, + double & min, + double & sum, + const vector & vec, const int & nloc) { if (nloc == 0) return; @@ -151,8 +151,8 @@ ana_st (float & max, static void make_uniform_aparam( #ifdef HIGH_PREC - vector & daparam, - const vector & aparam, + vector & daparam, + const vector & aparam, const int & nlocal #else vector & daparam, @@ -173,7 +173,7 @@ make_uniform_aparam( #ifdef USE_TTM void PairDeepMD::make_ttm_aparam( #ifdef HIGH_PREC - vector & daparam + vector & daparam #else vector & daparam #endif @@ -196,18 +196,18 @@ void PairDeepMD::make_ttm_aparam( int nxnodes = nnodes[0]; int nynodes = nnodes[1]; int nznodes = nnodes[2]; - float *** const T_electron = ttm_fix->get_T_electron(); - float dx = domain->xprd/nxnodes; - float dy = domain->yprd/nynodes; - float dz = domain->zprd/nynodes; + double *** const T_electron = ttm_fix->get_T_electron(); + double dx = domain->xprd/nxnodes; + double dy = domain->yprd/nynodes; + double dz = domain->zprd/nynodes; // resize daparam daparam.resize(nlocal); // loop over atoms to assign aparam for (int ii = 0; ii < nlocal; ii++) { if (mask[ii] & ttm_fix->groupbit) { - float xscale = static_cast((x[ii][0] - domain->boxlo[0])/domain->xprd); - float yscale = static_cast((x[ii][1] - domain->boxlo[1])/domain->yprd); - float zscale = static_cast((x[ii][2] - domain->boxlo[2])/domain->zprd); + double xscale = static_cast((x[ii][0] - domain->boxlo[0])/domain->xprd); + double yscale = static_cast((x[ii][1] - domain->boxlo[1])/domain->yprd); + double zscale = static_cast((x[ii][2] - domain->boxlo[2])/domain->zprd); int ixnode = static_cast(xscale*nxnodes); int iynode = static_cast(yscale*nynodes); int iznode = static_cast(zscale*nznodes); @@ -300,13 +300,13 @@ void PairDeepMD::compute(int eflag, int vflag) dtype[ii] = type[ii] - 1; } - float dener (0); - vector dforce (nall * 3); - vector dvirial (9, 0); - vector dcoord (nall * 3, 0.); - vector dbox (9, 0) ; + double dener (0); + vector dforce (nall * 3); + vector dvirial (9, 0); + vector dcoord (nall * 3, 0.); + vector dbox (9, 0) ; #ifdef HIGH_PREC - vector daparam; + vector daparam; #else vector daparam; #endif @@ -363,7 +363,7 @@ void PairDeepMD::compute(int eflag, int vflag) for (unsigned dd = 0; dd < dbox.size(); ++dd) dbox_[dd] = dbox[dd]; vector dforce_(dforce.size(), 0); vector dvirial_(dvirial.size(), 0); - float dener_ = 0; + double dener_ = 0; deep_pot.compute (dener_, dforce_, dvirial_, dcoord_, dtype, dbox_, nghost, lmp_list, ago, fparam, daparam); for (unsigned dd = 0; dd < dforce.size(); ++dd) dforce[dd] = dforce_[dd]; for (unsigned dd = 0; dd < dvirial.size(); ++dd) dvirial[dd] = dvirial_[dd]; @@ -372,8 +372,8 @@ void PairDeepMD::compute(int eflag, int vflag) } // do atomic energy and virial else { - vector deatom (nall * 1, 0); - vector dvatom (nall * 9, 0); + vector deatom (nall * 1, 0); + vector dvatom (nall * 9, 0); #ifdef HIGH_PREC deep_pot.compute (dener, dforce, dvirial, deatom, dvatom, dcoord, dtype, dbox, nghost, lmp_list, ago, fparam, daparam); #else @@ -385,7 +385,7 @@ void PairDeepMD::compute(int eflag, int vflag) vector dvirial_(dvirial.size(), 0); vector deatom_(dforce.size(), 0); vector dvatom_(dforce.size(), 0); - float dener_ = 0; + double dener_ = 0; deep_pot.compute (dener_, dforce_, dvirial_, deatom_, dvatom_, dcoord_, dtype, dbox_, nghost, lmp_list, ago, fparam, daparam); for (unsigned dd = 0; dd < dforce.size(); ++dd) dforce[dd] = dforce_[dd]; for (unsigned dd = 0; dd < dvirial.size(); ++dd) dvirial[dd] = dvirial_[dd]; @@ -409,12 +409,12 @@ void PairDeepMD::compute(int eflag, int vflag) } } else if (multi_models_mod_devi) { - vector deatom (nall * 1, 0); - vector dvatom (nall * 9, 0); + vector deatom (nall * 1, 0); + vector dvatom (nall * 9, 0); #ifdef HIGH_PREC - vector all_energy; - vector> all_virial; - vector> all_atom_energy; + vector all_energy; + vector> all_virial; + vector> all_atom_energy; vector> all_atom_virial; deep_pot_model_devi.compute(all_energy, all_force, all_virial, all_atom_energy, all_atom_virial, dcoord, dtype, dbox, nghost, lmp_list, ago, fparam, daparam); // deep_pot_model_devi.compute_avg (dener, all_energy); @@ -436,8 +436,8 @@ void PairDeepMD::compute(int eflag, int vflag) vector dvirial_(dvirial.size(), 0); vector deatom_(dforce.size(), 0); vector dvatom_(dforce.size(), 0); - float dener_ = 0; - vector all_energy_; + double dener_ = 0; + vector all_energy_; vector> all_force_; vector> all_virial_; vector> all_atom_energy_; @@ -485,9 +485,9 @@ void PairDeepMD::compute(int eflag, int vflag) if (newton_pair) { comm->reverse_comm_pair(this); } - vector std_f; + vector std_f; #ifdef HIGH_PREC - vector tmp_avg_f; + vector tmp_avg_f; deep_pot_model_devi.compute_avg (tmp_avg_f, all_force); deep_pot_model_devi.compute_std_f (std_f, tmp_avg_f, all_force); if (out_rel == 1){ @@ -508,19 +508,19 @@ void PairDeepMD::compute(int eflag, int vflag) deep_pot_model_devi.compute_relative_std_f (std_f_, tmp_avg_f_, eps); } #endif - float min = numeric_limits::max(), max = 0, avg = 0; + double min = numeric_limits::max(), max = 0, avg = 0; ana_st(max, min, avg, std_f, nlocal); int all_nlocal = 0; MPI_Reduce (&nlocal, &all_nlocal, 1, MPI_INT, MPI_SUM, 0, world); - float all_f_min = 0, all_f_max = 0, all_f_avg = 0; + double all_f_min = 0, all_f_max = 0, all_f_avg = 0; MPI_Reduce (&min, &all_f_min, 1, MPI_DOUBLE, MPI_MIN, 0, world); MPI_Reduce (&max, &all_f_max, 1, MPI_DOUBLE, MPI_MAX, 0, world); MPI_Reduce (&avg, &all_f_avg, 1, MPI_DOUBLE, MPI_SUM, 0, world); - all_f_avg /= float(all_nlocal); + all_f_avg /= double(all_nlocal); // std energy - vector std_e; + vector std_e; #ifdef HIGH_PREC - vector tmp_avg_e; + vector tmp_avg_e; deep_pot_model_devi.compute_avg (tmp_avg_e, all_atom_energy); deep_pot_model_devi.compute_std_e (std_e, tmp_avg_e, all_atom_energy); #else @@ -531,20 +531,20 @@ void PairDeepMD::compute(int eflag, int vflag) for (int dd = 0; dd < std_e_.size(); ++dd) std_e[dd] = std_e_[dd]; #endif max = avg = 0; - min = numeric_limits::max(); + min = numeric_limits::max(); ana_st(max, min, avg, std_e, nlocal); - float all_e_min = 0, all_e_max = 0, all_e_avg = 0; + double all_e_min = 0, all_e_max = 0, all_e_avg = 0; MPI_Reduce (&min, &all_e_min, 1, MPI_DOUBLE, MPI_MIN, 0, world); MPI_Reduce (&max, &all_e_max, 1, MPI_DOUBLE, MPI_MAX, 0, world); MPI_Reduce (&avg, &all_e_avg, 1, MPI_DOUBLE, MPI_SUM, 0, world); - all_e_avg /= float(all_nlocal); + all_e_avg /= double(all_nlocal); // // total e - // vector sum_e(numb_models, 0.); + // vector sum_e(numb_models, 0.); // MPI_Reduce (&all_energy[0], &sum_e[0], numb_models, MPI_DOUBLE, MPI_SUM, 0, world); if (rank == 0) { - // float avg_e = 0; + // double avg_e = 0; // deep_pot_model_devi.compute_avg(avg_e, sum_e); - // float std_e_1 = 0; + // double std_e_1 = 0; // deep_pot_model_devi.compute_std(std_e_1, avg_e, sum_e); fp << setw(12) << update->ntimestep << " " << setw(18) << all_e_max @@ -582,7 +582,7 @@ void PairDeepMD::compute(int eflag, int vflag) for (unsigned dd = 0; dd < dbox.size(); ++dd) dbox_[dd] = dbox[dd]; vector dforce_(dforce.size(), 0); vector dvirial_(dvirial.size(), 0); - float dener_ = 0; + double dener_ = 0; deep_pot.compute (dener_, dforce_, dvirial_, dcoord_, dtype, dbox_); for (unsigned dd = 0; dd < dforce.size(); ++dd) dforce[dd] = dforce_[dd]; for (unsigned dd = 0; dd < dvirial.size(); ++dd) dvirial[dd] = dvirial_[dd]; @@ -890,7 +890,7 @@ double PairDeepMD::init_one(int i, int j) /* ---------------------------------------------------------------------- */ -int PairDeepMD::pack_reverse_comm(int n, int first, float *buf) +int PairDeepMD::pack_reverse_comm(int n, int first, double *buf) { int i,m,last; @@ -908,7 +908,7 @@ int PairDeepMD::pack_reverse_comm(int n, int first, float *buf) /* ---------------------------------------------------------------------- */ -void PairDeepMD::unpack_reverse_comm(int n, int *list, float *buf) +void PairDeepMD::unpack_reverse_comm(int n, int *list, double *buf) { int i,j,m; diff --git a/source/lmp/pair_deepmd.h.in b/source/lmp/pair_deepmd.h.in index 08bf03704f..c5afb3de06 100755 --- a/source/lmp/pair_deepmd.h.in +++ b/source/lmp/pair_deepmd.h.in @@ -43,8 +43,8 @@ class PairDeepMD : public Pair { virtual void coeff(int, char **); void init_style(); double init_one(int i, int j); - int pack_reverse_comm(int, int, float *); - void unpack_reverse_comm(int, int *, float *); + int pack_reverse_comm(int, int, double *); + void unpack_reverse_comm(int, int *, double *); void print_summary(const std::string pre) const; int get_node_rank(); std::string get_prog_file_content(const std::string & model);