Moved precompute() out of the terms in amoeba and hippo, to be involed in the first term in a time step: multipole for amoeba and repulsion for hippo
This commit is contained in:
@ -162,7 +162,7 @@ int AmoebaT::multipole_real(const int eflag, const int vflag) {
|
|||||||
this->time_pair.start();
|
this->time_pair.start();
|
||||||
|
|
||||||
// Build the short neighbor list for the cutoff off2_mpole,
|
// Build the short neighbor list for the cutoff off2_mpole,
|
||||||
// at this point mpole is the first kernel in a time step
|
// at this point mpole is the first kernel in a time step for AMOEBA
|
||||||
|
|
||||||
this->k_short_nbor.set_size(GX,BX);
|
this->k_short_nbor.set_size(GX,BX);
|
||||||
this->k_short_nbor.run(&this->atom->x, &this->nbor->dev_nbor,
|
this->k_short_nbor.run(&this->atom->x, &this->nbor->dev_nbor,
|
||||||
|
|||||||
@ -117,7 +117,28 @@ void amoeba_gpu_clear() {
|
|||||||
AMOEBAMF.clear();
|
AMOEBAMF.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
int** amoeba_gpu_compute_multipole_real(const int ago, const int inum_full,
|
int** amoeba_gpu_precompute(const int ago, const int inum_full, const int nall,
|
||||||
|
double **host_x, int *host_type, int *host_amtype,
|
||||||
|
int *host_amgroup, double **host_rpole,
|
||||||
|
double **host_uind, double **host_uinp, double *host_pval,
|
||||||
|
double *sublo, double *subhi, tagint *tag,
|
||||||
|
int **nspecial, tagint **special,
|
||||||
|
int *nspecial15, tagint **special15,
|
||||||
|
const bool eflag_in, const bool vflag_in,
|
||||||
|
const bool eatom, const bool vatom, int &host_start,
|
||||||
|
int **ilist, int **jnum, const double cpu_time,
|
||||||
|
bool &success, double *host_q, double *boxlo, double *prd) {
|
||||||
|
return AMOEBAMF.precompute(ago, inum_full, nall, host_x, host_type,
|
||||||
|
host_amtype, host_amgroup, host_rpole,
|
||||||
|
nullptr, nullptr, nullptr, sublo, subhi, tag,
|
||||||
|
nspecial, special, nspecial15, special15,
|
||||||
|
eflag_in, vflag_in, eatom, vatom,
|
||||||
|
host_start, ilist, jnum, cpu_time,
|
||||||
|
success, host_q, boxlo, prd);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void amoeba_gpu_compute_multipole_real(const int ago, const int inum_full,
|
||||||
const int nall, double **host_x, int *host_type,
|
const int nall, double **host_x, int *host_type,
|
||||||
int *host_amtype, int *host_amgroup, double **host_rpole,
|
int *host_amtype, int *host_amgroup, double **host_rpole,
|
||||||
double *sublo, double *subhi, tagint *tag, int **nspecial,
|
double *sublo, double *subhi, tagint *tag, int **nspecial,
|
||||||
@ -127,7 +148,7 @@ int** amoeba_gpu_compute_multipole_real(const int ago, const int inum_full,
|
|||||||
int **ilist, int **jnum, const double cpu_time,
|
int **ilist, int **jnum, const double cpu_time,
|
||||||
bool &success, const double aewald, const double felec, const double off2,
|
bool &success, const double aewald, const double felec, const double off2,
|
||||||
double *host_q, double *boxlo, double *prd, void **tep_ptr) {
|
double *host_q, double *boxlo, double *prd, void **tep_ptr) {
|
||||||
return AMOEBAMF.compute_multipole_real(ago, inum_full, nall, host_x, host_type,
|
AMOEBAMF.compute_multipole_real(ago, inum_full, nall, host_x, host_type,
|
||||||
host_amtype, host_amgroup, host_rpole, nullptr, sublo, subhi,
|
host_amtype, host_amgroup, host_rpole, nullptr, sublo, subhi,
|
||||||
tag, nspecial, special, nspecial15, special15,
|
tag, nspecial, special, nspecial15, special15,
|
||||||
eflag, vflag, eatom, vatom, host_start, ilist, jnum,
|
eflag, vflag, eatom, vatom, host_start, ilist, jnum,
|
||||||
|
|||||||
@ -226,12 +226,12 @@ int * BaseAmoebaT::reset_nbors(const int nall, const int inum, int *ilist,
|
|||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
template <class numtyp, class acctyp>
|
template <class numtyp, class acctyp>
|
||||||
inline int BaseAmoebaT::build_nbor_list(const int inum, const int host_inum,
|
inline int BaseAmoebaT::build_nbor_list(const int inum, const int host_inum,
|
||||||
const int nall, double **host_x,
|
const int nall, double **host_x,
|
||||||
int *host_type, double *sublo,
|
int *host_type, double *sublo,
|
||||||
double *subhi, tagint *tag,
|
double *subhi, tagint *tag,
|
||||||
int **nspecial, tagint **special,
|
int **nspecial, tagint **special,
|
||||||
int *nspecial15, tagint **special15,
|
int *nspecial15, tagint **special15,
|
||||||
bool &success) {
|
bool &success) {
|
||||||
success=true;
|
success=true;
|
||||||
resize_atom(inum,nall,success);
|
resize_atom(inum,nall,success);
|
||||||
resize_local(inum,host_inum,nbor->max_nbors(),success);
|
resize_local(inum,host_inum,nbor->max_nbors(),success);
|
||||||
@ -450,7 +450,7 @@ int** BaseAmoebaT::precompute(const int ago, const int inum_full, const int nall
|
|||||||
// Reneighbor on GPU if necessary, and then compute multipole real-space
|
// Reneighbor on GPU if necessary, and then compute multipole real-space
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
template <class numtyp, class acctyp>
|
template <class numtyp, class acctyp>
|
||||||
int** BaseAmoebaT::compute_multipole_real(const int ago, const int inum_full,
|
void BaseAmoebaT::compute_multipole_real(const int ago, const int inum_full,
|
||||||
const int nall, double **host_x,
|
const int nall, double **host_x,
|
||||||
int *host_type, int *host_amtype,
|
int *host_type, int *host_amtype,
|
||||||
int *host_amgroup, double **host_rpole, double *host_pval,
|
int *host_amgroup, double **host_rpole, double *host_pval,
|
||||||
@ -469,7 +469,7 @@ int** BaseAmoebaT::compute_multipole_real(const int ago, const int inum_full,
|
|||||||
// NOTE:
|
// NOTE:
|
||||||
// Once all the kernels are ready, precompute() is needed only once
|
// Once all the kernels are ready, precompute() is needed only once
|
||||||
// in the first kernel in a time step.
|
// in the first kernel in a time step.
|
||||||
|
/*
|
||||||
int** firstneigh = nullptr;
|
int** firstneigh = nullptr;
|
||||||
firstneigh = precompute(ago, inum_full, nall, host_x, host_type,
|
firstneigh = precompute(ago, inum_full, nall, host_x, host_type,
|
||||||
host_amtype, host_amgroup, host_rpole,
|
host_amtype, host_amgroup, host_rpole,
|
||||||
@ -478,7 +478,7 @@ int** BaseAmoebaT::compute_multipole_real(const int ago, const int inum_full,
|
|||||||
eflag_in, vflag_in, eatom, vatom,
|
eflag_in, vflag_in, eatom, vatom,
|
||||||
host_start, ilist, jnum, cpu_time,
|
host_start, ilist, jnum, cpu_time,
|
||||||
success, host_q, boxlo, prd);
|
success, host_q, boxlo, prd);
|
||||||
|
*/
|
||||||
// ------------------- Resize _tep array ------------------------
|
// ------------------- Resize _tep array ------------------------
|
||||||
|
|
||||||
if (inum_full>_max_tep_size) {
|
if (inum_full>_max_tep_size) {
|
||||||
@ -503,7 +503,7 @@ int** BaseAmoebaT::compute_multipole_real(const int ago, const int inum_full,
|
|||||||
|
|
||||||
_tep.update_host(_max_tep_size*4,false);
|
_tep.update_host(_max_tep_size*4,false);
|
||||||
|
|
||||||
return firstneigh; // nbor->host_jlist.begin()-host_start;
|
// return firstneigh; // nbor->host_jlist.begin()-host_start;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
@ -782,7 +782,6 @@ int BaseAmoebaT::fphi_mpole() {
|
|||||||
|
|
||||||
// Compute the block size and grid size to keep all cores busy
|
// Compute the block size and grid size to keep all cores busy
|
||||||
const int BX=block_size();
|
const int BX=block_size();
|
||||||
//printf("BX = %d; pppm block size = %d\n", BX, PPPM_BLOCK_1D);
|
|
||||||
int GX=static_cast<int>(ceil(static_cast<double>(this->ans->inum())/BX));
|
int GX=static_cast<int>(ceil(static_cast<double>(this->ans->inum())/BX));
|
||||||
|
|
||||||
time_pair.start();
|
time_pair.start();
|
||||||
|
|||||||
@ -152,7 +152,7 @@ class BaseAmoeba {
|
|||||||
double *charge, double *boxlo, double *prd);
|
double *charge, double *boxlo, double *prd);
|
||||||
|
|
||||||
/// Compute multipole real-space with device neighboring
|
/// Compute multipole real-space with device neighboring
|
||||||
virtual int** compute_multipole_real(const int ago, const int inum_full, const int nall,
|
virtual void compute_multipole_real(const int ago, const int inum_full, const int nall,
|
||||||
double **host_x, int *host_type, int *host_amtype,
|
double **host_x, int *host_type, int *host_amtype,
|
||||||
int *host_amgroup, double **host_rpole, double *host_pval,
|
int *host_amgroup, double **host_rpole, double *host_pval,
|
||||||
double *sublo, double *subhi, tagint *tag,
|
double *sublo, double *subhi, tagint *tag,
|
||||||
|
|||||||
@ -172,7 +172,7 @@ double HippoT::host_memory_usage() const {
|
|||||||
// Reneighbor on GPU if necessary, and then compute repulsion
|
// Reneighbor on GPU if necessary, and then compute repulsion
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
template <class numtyp, class acctyp>
|
template <class numtyp, class acctyp>
|
||||||
int** HippoT::compute_repulsion(const int ago, const int inum_full,
|
void HippoT::compute_repulsion(const int ago, const int inum_full,
|
||||||
const int nall, double **host_x,
|
const int nall, double **host_x,
|
||||||
int *host_type, int *host_amtype,
|
int *host_type, int *host_amtype,
|
||||||
int *host_amgroup, double **host_rpole,
|
int *host_amgroup, double **host_rpole,
|
||||||
@ -213,7 +213,7 @@ int** HippoT::compute_repulsion(const int ago, const int inum_full,
|
|||||||
// We only need to cast the necessary from host to device here
|
// We only need to cast the necessary from host to device here
|
||||||
// if the neighbor lists are rebuilt and other per-atom arrays
|
// if the neighbor lists are rebuilt and other per-atom arrays
|
||||||
// (x, type, amtype, amgroup, rpole) are ready on the device.
|
// (x, type, amtype, amgroup, rpole) are ready on the device.
|
||||||
|
/*
|
||||||
int** firstneigh = nullptr;
|
int** firstneigh = nullptr;
|
||||||
firstneigh = this->precompute(ago, inum_full, nall, host_x, host_type,
|
firstneigh = this->precompute(ago, inum_full, nall, host_x, host_type,
|
||||||
host_amtype, host_amgroup, host_rpole,
|
host_amtype, host_amgroup, host_rpole,
|
||||||
@ -222,7 +222,7 @@ int** HippoT::compute_repulsion(const int ago, const int inum_full,
|
|||||||
eflag_in, vflag_in, eatom, vatom,
|
eflag_in, vflag_in, eatom, vatom,
|
||||||
host_start, ilist, jnum, cpu_time,
|
host_start, ilist, jnum, cpu_time,
|
||||||
success, host_q, boxlo, prd);
|
success, host_q, boxlo, prd);
|
||||||
|
*/
|
||||||
// ------------------- Resize _tep array ------------------------
|
// ------------------- Resize _tep array ------------------------
|
||||||
|
|
||||||
if (inum_full>this->_max_tep_size) {
|
if (inum_full>this->_max_tep_size) {
|
||||||
@ -253,7 +253,7 @@ int** HippoT::compute_repulsion(const int ago, const int inum_full,
|
|||||||
|
|
||||||
this->_tep.update_host(this->_max_tep_size*4,false);
|
this->_tep.update_host(this->_max_tep_size*4,false);
|
||||||
|
|
||||||
return firstneigh; // nbor->host_jlist.begin()-host_start;
|
// return firstneigh; // nbor->host_jlist.begin()-host_start;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
@ -275,7 +275,7 @@ int HippoT::repulsion(const int eflag, const int vflag) {
|
|||||||
this->time_pair.start();
|
this->time_pair.start();
|
||||||
|
|
||||||
// Build the short neighbor list for the cutoff off2_disp,
|
// Build the short neighbor list for the cutoff off2_disp,
|
||||||
// at this point mpole is the first kernel in a time step
|
// at this point repuslion is the first kernel in a time step for HIPPO
|
||||||
|
|
||||||
this->k_short_nbor.set_size(GX,BX);
|
this->k_short_nbor.set_size(GX,BX);
|
||||||
this->k_short_nbor.run(&this->atom->x, &this->nbor->dev_nbor,
|
this->k_short_nbor.run(&this->atom->x, &this->nbor->dev_nbor,
|
||||||
@ -302,7 +302,7 @@ int HippoT::repulsion(const int eflag, const int vflag) {
|
|||||||
// Reneighbor on GPU if necessary, and then compute dispersion real-space
|
// Reneighbor on GPU if necessary, and then compute dispersion real-space
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
template <class numtyp, class acctyp>
|
template <class numtyp, class acctyp>
|
||||||
int** HippoT::compute_dispersion_real(int *host_amtype, int *host_amgroup,
|
void HippoT::compute_dispersion_real(int *host_amtype, int *host_amgroup,
|
||||||
double **host_rpole, const double aewald,
|
double **host_rpole, const double aewald,
|
||||||
const double off2_disp) {
|
const double off2_disp) {
|
||||||
|
|
||||||
@ -324,7 +324,7 @@ int** HippoT::compute_dispersion_real(int *host_amtype, int *host_amgroup,
|
|||||||
|
|
||||||
this->hd_balancer.stop_timer();
|
this->hd_balancer.stop_timer();
|
||||||
|
|
||||||
return nullptr; // nbor->host_jlist.begin()-host_start;
|
// return nullptr; // nbor->host_jlist.begin()-host_start;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
@ -372,7 +372,7 @@ int HippoT::dispersion_real(const int eflag, const int vflag) {
|
|||||||
// Reneighbor on GPU if necessary, and then compute multipole real-space
|
// Reneighbor on GPU if necessary, and then compute multipole real-space
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
template <class numtyp, class acctyp>
|
template <class numtyp, class acctyp>
|
||||||
int** HippoT::compute_multipole_real(const int ago, const int inum_full,
|
void HippoT::compute_multipole_real(const int ago, const int inum_full,
|
||||||
const int nall, double **host_x,
|
const int nall, double **host_x,
|
||||||
int *host_type, int *host_amtype,
|
int *host_type, int *host_amtype,
|
||||||
int *host_amgroup, double **host_rpole,
|
int *host_amgroup, double **host_rpole,
|
||||||
@ -417,7 +417,7 @@ int** HippoT::compute_multipole_real(const int ago, const int inum_full,
|
|||||||
|
|
||||||
this->_tep.update_host(this->_max_tep_size*4,false);
|
this->_tep.update_host(this->_max_tep_size*4,false);
|
||||||
|
|
||||||
return nullptr; // nbor->host_jlist.begin()-host_start;
|
//return nullptr; // nbor->host_jlist.begin()-host_start;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|||||||
@ -55,7 +55,7 @@ class Hippo : public BaseAmoeba<numtyp, acctyp> {
|
|||||||
const double polar_dscale, const double polar_uscale);
|
const double polar_dscale, const double polar_uscale);
|
||||||
|
|
||||||
/// Compute repulsion with device neighboring
|
/// Compute repulsion with device neighboring
|
||||||
int** compute_repulsion(const int ago, const int inum_full,
|
virtual void compute_repulsion(const int ago, const int inum_full,
|
||||||
const int nall, double **host_x,
|
const int nall, double **host_x,
|
||||||
int *host_type, int *host_amtype,
|
int *host_type, int *host_amtype,
|
||||||
int *host_amgroup, double **host_rpole,
|
int *host_amgroup, double **host_rpole,
|
||||||
@ -72,12 +72,12 @@ class Hippo : public BaseAmoeba<numtyp, acctyp> {
|
|||||||
double c3, double c4, double c5,void** tep_ptr);
|
double c3, double c4, double c5,void** tep_ptr);
|
||||||
|
|
||||||
/// Compute dispersion real-space with device neighboring
|
/// Compute dispersion real-space with device neighboring
|
||||||
int** compute_dispersion_real(int *host_amtype, int *host_amgroup,
|
virtual void compute_dispersion_real(int *host_amtype, int *host_amgroup,
|
||||||
double **host_rpole, const double aewald,
|
double **host_rpole, const double aewald,
|
||||||
const double off2_disp);
|
const double off2_disp);
|
||||||
|
|
||||||
/// Compute multipole real-space with device neighboring
|
/// Compute multipole real-space with device neighboring
|
||||||
virtual int** compute_multipole_real(const int ago, const int inum_full, const int nall,
|
virtual void compute_multipole_real(const int ago, const int inum_full, const int nall,
|
||||||
double **host_x, int *host_type, int *host_amtype,
|
double **host_x, int *host_type, int *host_amtype,
|
||||||
int *host_amgroup, double **host_rpole, double *host_pval,
|
int *host_amgroup, double **host_rpole, double *host_pval,
|
||||||
double *sublo, double *subhi, tagint *tag, int **nspecial, tagint **special,
|
double *sublo, double *subhi, tagint *tag, int **nspecial, tagint **special,
|
||||||
|
|||||||
@ -120,7 +120,27 @@ void hippo_gpu_clear() {
|
|||||||
HIPPOMF.clear();
|
HIPPOMF.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
int** hippo_gpu_compute_repulsion(const int ago, const int inum_full,
|
int** hippo_gpu_precompute(const int ago, const int inum_full, const int nall,
|
||||||
|
double **host_x, int *host_type, int *host_amtype,
|
||||||
|
int *host_amgroup, double **host_rpole,
|
||||||
|
double **host_uind, double **host_uinp, double *host_pval,
|
||||||
|
double *sublo, double *subhi, tagint *tag,
|
||||||
|
int **nspecial, tagint **special,
|
||||||
|
int *nspecial15, tagint **special15,
|
||||||
|
const bool eflag_in, const bool vflag_in,
|
||||||
|
const bool eatom, const bool vatom, int &host_start,
|
||||||
|
int **ilist, int **jnum, const double cpu_time,
|
||||||
|
bool &success, double *host_q, double *boxlo, double *prd) {
|
||||||
|
return HIPPOMF.precompute(ago, inum_full, nall, host_x, host_type,
|
||||||
|
host_amtype, host_amgroup, host_rpole,
|
||||||
|
nullptr, nullptr, nullptr, sublo, subhi, tag,
|
||||||
|
nspecial, special, nspecial15, special15,
|
||||||
|
eflag_in, vflag_in, eatom, vatom,
|
||||||
|
host_start, ilist, jnum, cpu_time,
|
||||||
|
success, host_q, boxlo, prd);
|
||||||
|
}
|
||||||
|
|
||||||
|
void hippo_gpu_compute_repulsion(const int ago, const int inum_full,
|
||||||
const int nall, double **host_x, int *host_type,
|
const int nall, double **host_x, int *host_type,
|
||||||
int *host_amtype, int *host_amgroup, double **host_rpole,
|
int *host_amtype, int *host_amgroup, double **host_rpole,
|
||||||
double *sublo, double *subhi, tagint *tag, int **nspecial,
|
double *sublo, double *subhi, tagint *tag, int **nspecial,
|
||||||
@ -132,7 +152,7 @@ int** hippo_gpu_compute_repulsion(const int ago, const int inum_full,
|
|||||||
double *host_q, double *boxlo, double *prd,
|
double *host_q, double *boxlo, double *prd,
|
||||||
double cut2, double c0, double c1, double c2,
|
double cut2, double c0, double c1, double c2,
|
||||||
double c3, double c4, double c5, void **tep_ptr) {
|
double c3, double c4, double c5, void **tep_ptr) {
|
||||||
return HIPPOMF.compute_repulsion(ago, inum_full, nall, host_x, host_type,
|
HIPPOMF.compute_repulsion(ago, inum_full, nall, host_x, host_type,
|
||||||
host_amtype, host_amgroup, host_rpole, sublo, subhi,
|
host_amtype, host_amgroup, host_rpole, sublo, subhi,
|
||||||
tag, nspecial, special, nspecial15, special15,
|
tag, nspecial, special, nspecial15, special15,
|
||||||
eflag, vflag, eatom, vatom, host_start, ilist, jnum,
|
eflag, vflag, eatom, vatom, host_start, ilist, jnum,
|
||||||
@ -147,7 +167,7 @@ void hippo_gpu_compute_dispersion_real(int *host_amtype, int *host_amgroup,
|
|||||||
aewald, off2);
|
aewald, off2);
|
||||||
}
|
}
|
||||||
|
|
||||||
int** hippo_gpu_compute_multipole_real(const int ago, const int inum_full,
|
void hippo_gpu_compute_multipole_real(const int ago, const int inum_full,
|
||||||
const int nall, double **host_x, int *host_type,
|
const int nall, double **host_x, int *host_type,
|
||||||
int *host_amtype, int *host_amgroup, double **host_rpole,
|
int *host_amtype, int *host_amgroup, double **host_rpole,
|
||||||
double *host_pval, double *sublo, double *subhi, tagint *tag, int **nspecial,
|
double *host_pval, double *sublo, double *subhi, tagint *tag, int **nspecial,
|
||||||
@ -157,7 +177,7 @@ int** hippo_gpu_compute_multipole_real(const int ago, const int inum_full,
|
|||||||
int **ilist, int **jnum, const double cpu_time,
|
int **ilist, int **jnum, const double cpu_time,
|
||||||
bool &success, const double aewald, const double felec, const double off2,
|
bool &success, const double aewald, const double felec, const double off2,
|
||||||
double *host_q, double *boxlo, double *prd, void **tep_ptr) {
|
double *host_q, double *boxlo, double *prd, void **tep_ptr) {
|
||||||
return HIPPOMF.compute_multipole_real(ago, inum_full, nall, host_x, host_type,
|
HIPPOMF.compute_multipole_real(ago, inum_full, nall, host_x, host_type,
|
||||||
host_amtype, host_amgroup, host_rpole, host_pval, sublo, subhi,
|
host_amtype, host_amgroup, host_rpole, host_pval, sublo, subhi,
|
||||||
tag, nspecial, special, nspecial15, special15,
|
tag, nspecial, special, nspecial15, special15,
|
||||||
eflag, vflag, eatom, vatom, host_start, ilist, jnum,
|
eflag, vflag, eatom, vatom, host_start, ilist, jnum,
|
||||||
|
|||||||
@ -69,7 +69,19 @@ int amoeba_gpu_init(const int ntypes, const int max_amtype, const int max_amclas
|
|||||||
const double polar_dscale, const double polar_uscale, int& tq_size);
|
const double polar_dscale, const double polar_uscale, int& tq_size);
|
||||||
void amoeba_gpu_clear();
|
void amoeba_gpu_clear();
|
||||||
|
|
||||||
int ** amoeba_gpu_compute_multipole_real(const int ago, const int inum, const int nall,
|
int** amoeba_gpu_precompute(const int ago, const int inum_full, const int nall,
|
||||||
|
double **host_x, int *host_type, int *host_amtype,
|
||||||
|
int *host_amgroup, double **host_rpole,
|
||||||
|
double **host_uind, double **host_uinp, double *host_pval,
|
||||||
|
double *sublo, double *subhi, tagint *tag,
|
||||||
|
int **nspecial, tagint **special,
|
||||||
|
int *nspecial15, tagint **special15,
|
||||||
|
const bool eflag_in, const bool vflag_in,
|
||||||
|
const bool eatom, const bool vatom, int &host_start,
|
||||||
|
int **ilist, int **jnum, const double cpu_time,
|
||||||
|
bool &success, double *host_q, double *boxlo, double *prd);
|
||||||
|
|
||||||
|
void amoeba_gpu_compute_multipole_real(const int ago, const int inum, const int nall,
|
||||||
double **host_x, int *host_type, int *host_amtype, int *host_amgroup,
|
double **host_x, int *host_type, int *host_amtype, int *host_amgroup,
|
||||||
double **host_rpole, double *sublo, double *subhi, tagint *tag,
|
double **host_rpole, double *sublo, double *subhi, tagint *tag,
|
||||||
int **nspecial, tagint **special, int* nspecial15, tagint** special15,
|
int **nspecial, tagint **special, int* nspecial15, tagint** special15,
|
||||||
@ -240,6 +252,18 @@ void PairAmoebaGPU::multipole_real()
|
|||||||
}
|
}
|
||||||
inum = atom->nlocal;
|
inum = atom->nlocal;
|
||||||
|
|
||||||
|
firstneigh = amoeba_gpu_precompute(neighbor->ago, inum, nall, atom->x,
|
||||||
|
atom->type, amtype, amgroup, rpole,
|
||||||
|
nullptr, nullptr, nullptr,
|
||||||
|
sublo, subhi, atom->tag,
|
||||||
|
atom->nspecial, atom->special,
|
||||||
|
atom->nspecial15, atom->special15,
|
||||||
|
eflag, vflag, eflag_atom, vflag_atom,
|
||||||
|
host_start, &ilist, &numneigh, cpu_time,
|
||||||
|
success, atom->q, domain->boxlo, domain->prd);
|
||||||
|
if (!success)
|
||||||
|
error->one(FLERR,"Insufficient memory on accelerator");
|
||||||
|
|
||||||
// select the correct cutoff for the term
|
// select the correct cutoff for the term
|
||||||
|
|
||||||
if (use_ewald) choose(MPOLE_LONG);
|
if (use_ewald) choose(MPOLE_LONG);
|
||||||
@ -249,18 +273,17 @@ void PairAmoebaGPU::multipole_real()
|
|||||||
|
|
||||||
double felec = electric / am_dielectric;
|
double felec = electric / am_dielectric;
|
||||||
|
|
||||||
firstneigh = amoeba_gpu_compute_multipole_real(neighbor->ago, inum, nall, atom->x,
|
amoeba_gpu_compute_multipole_real(neighbor->ago, inum, nall, atom->x,
|
||||||
atom->type, amtype, amgroup, rpole,
|
atom->type, amtype, amgroup, rpole,
|
||||||
sublo, subhi, atom->tag,
|
sublo, subhi, atom->tag,
|
||||||
atom->nspecial, atom->special,
|
atom->nspecial, atom->special,
|
||||||
atom->nspecial15, atom->special15,
|
atom->nspecial15, atom->special15,
|
||||||
eflag, vflag, eflag_atom, vflag_atom,
|
eflag, vflag, eflag_atom, vflag_atom,
|
||||||
host_start, &ilist, &numneigh, cpu_time,
|
host_start, &ilist, &numneigh, cpu_time,
|
||||||
success, aewald, felec, off2, atom->q,
|
success, aewald, felec, off2, atom->q,
|
||||||
domain->boxlo, domain->prd, &tq_pinned);
|
domain->boxlo, domain->prd, &tq_pinned);
|
||||||
|
|
||||||
if (!success)
|
|
||||||
error->one(FLERR,"Insufficient memory on accelerator");
|
|
||||||
|
|
||||||
// reference to the tep array from GPU lib
|
// reference to the tep array from GPU lib
|
||||||
|
|
||||||
|
|||||||
@ -70,7 +70,19 @@ int hippo_gpu_init(const int ntypes, const int max_amtype, const int max_amclass
|
|||||||
const double polar_dscale, const double polar_uscale, int& tq_size);
|
const double polar_dscale, const double polar_uscale, int& tq_size);
|
||||||
void hippo_gpu_clear();
|
void hippo_gpu_clear();
|
||||||
|
|
||||||
int** hippo_gpu_compute_repulsion(const int ago, const int inum_full,
|
int** hippo_gpu_precompute(const int ago, const int inum_full, const int nall,
|
||||||
|
double **host_x, int *host_type, int *host_amtype,
|
||||||
|
int *host_amgroup, double **host_rpole,
|
||||||
|
double **host_uind, double **host_uinp, double *host_pval,
|
||||||
|
double *sublo, double *subhi, tagint *tag,
|
||||||
|
int **nspecial, tagint **special,
|
||||||
|
int *nspecial15, tagint **special15,
|
||||||
|
const bool eflag_in, const bool vflag_in,
|
||||||
|
const bool eatom, const bool vatom, int &host_start,
|
||||||
|
int **ilist, int **jnum, const double cpu_time,
|
||||||
|
bool &success, double *host_q, double *boxlo, double *prd);
|
||||||
|
|
||||||
|
void hippo_gpu_compute_repulsion(const int ago, const int inum_full,
|
||||||
const int nall, double **host_x, int *host_type,
|
const int nall, double **host_x, int *host_type,
|
||||||
int *host_amtype, int *host_amgroup, double **host_rpole,
|
int *host_amtype, int *host_amgroup, double **host_rpole,
|
||||||
double *sublo, double *subhi, tagint *tag, int **nspecial,
|
double *sublo, double *subhi, tagint *tag, int **nspecial,
|
||||||
@ -86,7 +98,7 @@ int** hippo_gpu_compute_repulsion(const int ago, const int inum_full,
|
|||||||
void hippo_gpu_compute_dispersion_real(int *host_amtype, int *host_amgroup, double **host_rpole,
|
void hippo_gpu_compute_dispersion_real(int *host_amtype, int *host_amgroup, double **host_rpole,
|
||||||
const double aewald, const double off2);
|
const double aewald, const double off2);
|
||||||
|
|
||||||
int ** hippo_gpu_compute_multipole_real(const int ago, const int inum, const int nall,
|
void hippo_gpu_compute_multipole_real(const int ago, const int inum, const int nall,
|
||||||
double **host_x, int *host_type, int *host_amtype, int *host_amgroup,
|
double **host_x, int *host_type, int *host_amtype, int *host_amgroup,
|
||||||
double **host_rpole, double *host_pval, double *sublo, double *subhi, tagint *tag,
|
double **host_rpole, double *host_pval, double *sublo, double *subhi, tagint *tag,
|
||||||
int **nspecial, tagint **special, int* nspecial15, tagint** special15,
|
int **nspecial, tagint **special, int* nspecial15, tagint** special15,
|
||||||
@ -258,22 +270,30 @@ void PairHippoGPU::repulsion()
|
|||||||
}
|
}
|
||||||
inum = atom->nlocal;
|
inum = atom->nlocal;
|
||||||
|
|
||||||
|
firstneigh = hippo_gpu_precompute(neighbor->ago, inum, nall, atom->x,
|
||||||
|
atom->type, amtype, amgroup, rpole,
|
||||||
|
nullptr, nullptr, nullptr,
|
||||||
|
sublo, subhi, atom->tag,
|
||||||
|
atom->nspecial, atom->special,
|
||||||
|
atom->nspecial15, atom->special15,
|
||||||
|
eflag, vflag, eflag_atom, vflag_atom,
|
||||||
|
host_start, &ilist, &numneigh, cpu_time,
|
||||||
|
success, atom->q, domain->boxlo, domain->prd);
|
||||||
|
|
||||||
// select the correct cutoff for the term
|
// select the correct cutoff for the term
|
||||||
|
|
||||||
choose(REPULSE);
|
choose(REPULSE);
|
||||||
|
|
||||||
// set the energy unit conversion factor for multipolar real-space calculation
|
hippo_gpu_compute_repulsion(neighbor->ago, inum, nall, atom->x,
|
||||||
|
atom->type, amtype, amgroup, rpole,
|
||||||
firstneigh = hippo_gpu_compute_repulsion(neighbor->ago, inum, nall, atom->x,
|
sublo, subhi, atom->tag,
|
||||||
atom->type, amtype, amgroup, rpole,
|
atom->nspecial, atom->special,
|
||||||
sublo, subhi, atom->tag,
|
atom->nspecial15, atom->special15,
|
||||||
atom->nspecial, atom->special,
|
eflag, vflag, eflag_atom, vflag_atom,
|
||||||
atom->nspecial15, atom->special15,
|
host_start, &ilist, &numneigh, cpu_time,
|
||||||
eflag, vflag, eflag_atom, vflag_atom,
|
success, aewald, off2, atom->q,
|
||||||
host_start, &ilist, &numneigh, cpu_time,
|
domain->boxlo, domain->prd, cut2,
|
||||||
success, aewald, off2, atom->q,
|
c0, c1, c2, c3, c4, c5, &tq_pinned);
|
||||||
domain->boxlo, domain->prd, cut2,
|
|
||||||
c0, c1, c2, c3, c4, c5, &tq_pinned);
|
|
||||||
|
|
||||||
if (!success)
|
if (!success)
|
||||||
error->one(FLERR,"Insufficient memory on accelerator");
|
error->one(FLERR,"Insufficient memory on accelerator");
|
||||||
|
|||||||
Reference in New Issue
Block a user