Add timing and result output.
This commit is contained in:
parent
71ea8dbb0e
commit
dcee5f97f2
58
src/main.c
58
src/main.c
@ -74,7 +74,14 @@ void init(Parameter *param)
|
|||||||
param->zprd = param->nz * lattice;
|
param->zprd = param->nz * lattice;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setup(Parameter *param, Atom *atom, Neighbor *neighbor){
|
double setup(
|
||||||
|
Parameter *param,
|
||||||
|
Atom *atom,
|
||||||
|
Neighbor *neighbor)
|
||||||
|
{
|
||||||
|
double S, E;
|
||||||
|
|
||||||
|
S = getTimeStamp();
|
||||||
initAtom(atom);
|
initAtom(atom);
|
||||||
initNeighbor(neighbor, param);
|
initNeighbor(neighbor, param);
|
||||||
initPbc();
|
initPbc();
|
||||||
@ -85,6 +92,27 @@ void setup(Parameter *param, Atom *atom, Neighbor *neighbor){
|
|||||||
setupPbc(atom, param);
|
setupPbc(atom, param);
|
||||||
updatePbc(atom, param);
|
updatePbc(atom, param);
|
||||||
buildNeighbor(atom, neighbor);
|
buildNeighbor(atom, neighbor);
|
||||||
|
E = getTimeStamp();
|
||||||
|
|
||||||
|
return E-S;
|
||||||
|
}
|
||||||
|
|
||||||
|
double reneighbour(
|
||||||
|
Parameter *param,
|
||||||
|
Atom *atom,
|
||||||
|
Neighbor *neighbor)
|
||||||
|
{
|
||||||
|
double S, E;
|
||||||
|
|
||||||
|
S = getTimeStamp();
|
||||||
|
updateAtomsPbc(atom, param);
|
||||||
|
setupPbc(atom, param);
|
||||||
|
updatePbc(atom, param);
|
||||||
|
/* sortAtom(); */
|
||||||
|
buildNeighbor(atom, neighbor);
|
||||||
|
E = getTimeStamp();
|
||||||
|
|
||||||
|
return E-S;
|
||||||
}
|
}
|
||||||
|
|
||||||
void initialIntegrate(Parameter *param, Atom *atom)
|
void initialIntegrate(Parameter *param, Atom *atom)
|
||||||
@ -115,7 +143,7 @@ void finalIntegrate(Parameter *param, Atom *atom)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void computeForce(Parameter *param, Atom *atom, Neighbor *neighbor)
|
double computeForce(Parameter *param, Atom *atom, Neighbor *neighbor)
|
||||||
{
|
{
|
||||||
int Nlocal = atom->Natoms;
|
int Nlocal = atom->Natoms;
|
||||||
int* neighs;
|
int* neighs;
|
||||||
@ -124,7 +152,9 @@ void computeForce(Parameter *param, Atom *atom, Neighbor *neighbor)
|
|||||||
double epsilon = param->epsilon;
|
double epsilon = param->epsilon;
|
||||||
double* x = atom->x; double* y = atom->y; double* z = atom->z;
|
double* x = atom->x; double* y = atom->y; double* z = atom->z;
|
||||||
double* fx = atom->fx; double* fy = atom->fy; double* fz = atom->fz;
|
double* fx = atom->fx; double* fy = atom->fy; double* fz = atom->fz;
|
||||||
|
double S, E;
|
||||||
|
|
||||||
|
S = getTimeStamp();
|
||||||
for(int i = 0; i < Nlocal; i++) {
|
for(int i = 0; i < Nlocal; i++) {
|
||||||
fx[i] = 0.0;
|
fx[i] = 0.0;
|
||||||
fy[i] = 0.0;
|
fy[i] = 0.0;
|
||||||
@ -163,6 +193,9 @@ void computeForce(Parameter *param, Atom *atom, Neighbor *neighbor)
|
|||||||
fy[i] += fiy;
|
fy[i] += fiy;
|
||||||
fz[i] += fiz;
|
fz[i] += fiz;
|
||||||
}
|
}
|
||||||
|
E = getTimeStamp();
|
||||||
|
|
||||||
|
return E-S;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -181,7 +214,6 @@ void printAtomState(Atom *atom)
|
|||||||
int main (int argc, char** argv)
|
int main (int argc, char** argv)
|
||||||
{
|
{
|
||||||
double timer[NUMTIMER];
|
double timer[NUMTIMER];
|
||||||
double S;
|
|
||||||
Atom atom;
|
Atom atom;
|
||||||
Neighbor neighbor;
|
Neighbor neighbor;
|
||||||
Parameter param;
|
Parameter param;
|
||||||
@ -225,6 +257,10 @@ int main (int argc, char** argv)
|
|||||||
computeThermo(0, ¶m, &atom);
|
computeThermo(0, ¶m, &atom);
|
||||||
computeForce(¶m, &atom, &neighbor);
|
computeForce(¶m, &atom, &neighbor);
|
||||||
|
|
||||||
|
timer[FORCE] = 0.0;
|
||||||
|
timer[NEIGH] = 0.0;
|
||||||
|
timer[TOTAL] = getTimeStamp();
|
||||||
|
|
||||||
for(int n = 0; n < param.ntimes; n++) {
|
for(int n = 0; n < param.ntimes; n++) {
|
||||||
|
|
||||||
initialIntegrate(¶m, &atom);
|
initialIntegrate(¶m, &atom);
|
||||||
@ -232,14 +268,10 @@ int main (int argc, char** argv)
|
|||||||
if((n + 1) % param.every) {
|
if((n + 1) % param.every) {
|
||||||
updatePbc(&atom, ¶m);
|
updatePbc(&atom, ¶m);
|
||||||
} else {
|
} else {
|
||||||
updateAtomsPbc(&atom, ¶m);
|
timer[NEIGH] += reneighbour(¶m, &atom, &neighbor);
|
||||||
setupPbc(&atom, ¶m);
|
|
||||||
updatePbc(&atom, ¶m);
|
|
||||||
/* sortAtom(); */
|
|
||||||
buildNeighbor(&atom, &neighbor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
computeForce(¶m, &atom, &neighbor);
|
timer[FORCE] += computeForce(¶m, &atom, &neighbor);
|
||||||
finalIntegrate(¶m, &atom);
|
finalIntegrate(¶m, &atom);
|
||||||
|
|
||||||
if(!((n + 1) % param.nstat) && (n+1) < param.ntimes) {
|
if(!((n + 1) % param.nstat) && (n+1) < param.ntimes) {
|
||||||
@ -247,7 +279,15 @@ int main (int argc, char** argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
timer[TOTAL] = getTimeStamp() - timer[TOTAL];
|
||||||
computeThermo(-1, ¶m, &atom);
|
computeThermo(-1, ¶m, &atom);
|
||||||
|
|
||||||
|
printf(HLINE);
|
||||||
|
printf("System: %d atoms, Steps: %d\n", atom.Natoms, param.ntimes);
|
||||||
|
printf("TOTAL %.2fs FORCE %.2fs NEIGH %.2fs REST %.2fs\n",
|
||||||
|
timer[TOTAL], timer[FORCE], timer[NEIGH], timer[TOTAL]-timer[FORCE]-timer[NEIGH]);
|
||||||
|
printf(HLINE);
|
||||||
|
printf("Performance: %.2f million atom updates per second\n", 1e-6 * (double) (atom.Natoms * param.ntimes) / timer[TOTAL]);
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user