1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 package ffx.potential.nonbonded.pme;
39
40 import static ffx.utilities.Constants.NS2SEC;
41 import static java.lang.String.format;
42 import static org.apache.commons.math3.util.FastMath.max;
43 import static org.apache.commons.math3.util.FastMath.min;
44
45 import java.util.logging.Logger;
46
47 public class PMETimings {
48
49 private static final Logger logger = Logger.getLogger(PMETimings.class.getName());
50
51 public final long[] realSpaceEnergyTime;
52 public final long[] realSpaceSCFTime;
53
54 private final int numThreads;
55
56 public long realSpaceEnergyTotal, realSpaceSCFTotalTime;
57 public long bornRadiiTotal, gkEnergyTotal;
58
59 public PMETimings(int numThreads) {
60 this.numThreads = numThreads;
61 realSpaceEnergyTime = new long[numThreads];
62 realSpaceSCFTime = new long[numThreads];
63 }
64
65 public void init() {
66 for (int i = 0; i < numThreads; i++) {
67 realSpaceEnergyTime[i] = 0;
68 realSpaceSCFTime[i] = 0;
69 }
70 realSpaceEnergyTotal = 0;
71 realSpaceSCFTotalTime = 0;
72 bornRadiiTotal = 0;
73 gkEnergyTotal = 0;
74 }
75
76 public void printRealSpaceTimings(int maxThreads,
77 PermanentFieldRegion permanentFieldRegion,
78 RealSpaceEnergyRegion realSpaceEnergyRegion) {
79 long realSpacePermTotal = permanentFieldRegion.getRealSpacePermTime();
80
81 double total = (realSpacePermTotal + realSpaceSCFTotalTime + realSpaceEnergyTotal) * NS2SEC;
82 logger.info(format("\n Real Space: %7.4f (sec)", total));
83 logger.info(" Electric Field");
84 logger.info(" Thread Direct SCF Energy Counts");
85 long minPerm = Long.MAX_VALUE;
86 long maxPerm = 0;
87 long minSCF = Long.MAX_VALUE;
88 long maxSCF = 0;
89 long minEnergy = Long.MAX_VALUE;
90 long maxEnergy = 0;
91 int minCount = Integer.MAX_VALUE;
92 int maxCount = Integer.MIN_VALUE;
93
94 for (int i = 0; i < maxThreads; i++) {
95 int count = realSpaceEnergyRegion.getCount(i);
96 long realSpacePermTime = permanentFieldRegion.getInitTime(i) + permanentFieldRegion.getPermTime(i);
97 logger.info(format(" %3d %7.4f %7.4f %7.4f %10d",
98 i, realSpacePermTime * NS2SEC, realSpaceSCFTime[i] * NS2SEC,
99 realSpaceEnergyTime[i] * NS2SEC, count));
100 minPerm = min(realSpacePermTime, minPerm);
101 maxPerm = max(realSpacePermTime, maxPerm);
102 minSCF = min(realSpaceSCFTime[i], minSCF);
103 maxSCF = max(realSpaceSCFTime[i], maxSCF);
104 minEnergy = min(realSpaceEnergyTime[i], minEnergy);
105 maxEnergy = max(realSpaceEnergyTime[i], maxEnergy);
106 minCount = min(count, minCount);
107 maxCount = max(count, maxCount);
108 }
109 logger.info(format(" Min %7.4f %7.4f %7.4f %10d",
110 minPerm * NS2SEC, minSCF * NS2SEC, minEnergy * NS2SEC, minCount));
111 logger.info(format(" Max %7.4f %7.4f %7.4f %10d",
112 maxPerm * NS2SEC, maxSCF * NS2SEC, maxEnergy * NS2SEC, maxCount));
113 logger.info(format(" Delta %7.4f %7.4f %7.4f %10d",
114 (maxPerm - minPerm) * NS2SEC,
115 (maxSCF - minSCF) * NS2SEC,
116 (maxEnergy - minEnergy) * NS2SEC,
117 (maxCount - minCount)));
118 logger.info(format(" Actual %7.4f %7.4f %7.4f %10d",
119 realSpacePermTotal * NS2SEC,
120 realSpaceSCFTotalTime * NS2SEC,
121 realSpaceEnergyTotal * NS2SEC,
122 realSpaceEnergyRegion.getInteractions()));
123 }
124 }