ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/pmapdiag.c
Revision: 2.6
Committed: Tue Sep 1 16:27:52 2015 UTC (8 years, 8 months ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: rad5R0
Changes since 2.5: +1 -2 lines
Log Message:
Removed redundant $Id: in file

File Contents

# Content
1 #ifndef lint
2 static const char RCSid[] = "$Id: pmapdiag.c,v 2.5 2015/08/18 18:45:55 greg Exp $";
3 #endif
4 /*
5 ==================================================================
6 Photon map diagnostic output and progress reports
7
8 Roland Schregle (roland.schregle@{hslu.ch, gmail.com})
9 (c) Fraunhofer Institute for Solar Energy Systems,
10 (c) Lucerne University of Applied Sciences and Arts,
11 supported by the Swiss National Science Foundation (SNSF, #147053)
12 ==================================================================
13
14 */
15
16
17
18 #include "pmapdiag.h"
19 #include "pmapdata.h"
20 #include "standard.h"
21
22
23
24 time_t repStartTime, repLastTime = 0; /* Time at start & last report */
25 unsigned long repProgress, /* Report progress counter */
26 repComplete; /* Report completion count */
27
28
29
30 static char* biasCompStats (const PhotonMap *pmap, PhotonMapType type,
31 char *stats)
32 /* Dump bias compensation statistics */
33 {
34 unsigned avgBwidth;
35 float avgErr;
36
37 /* Check if photon map is valid and bias compensated */
38 if (pmap && pmap -> maxGather > pmap -> minGather) {
39 avgBwidth = pmap -> numDensity
40 ? pmap -> totalGathered / pmap -> numDensity : 0,
41 avgErr = pmap -> numDensity
42 ? sqrt(pmap -> rmsError / pmap -> numDensity) : 0;
43
44 sprintf(stats, "%d/%d/%d %s (%.1f/%.1f/%.1f%% error), ",
45 pmap -> minGathered, pmap -> maxGathered, avgBwidth,
46 pmapName [type],
47 100 * pmap -> minError, 100 * pmap -> maxError, 100 * avgErr);
48
49 return stats;
50 }
51
52 return NULL;
53 }
54
55
56
57 void pmapBiasCompReport (char *stats)
58 /* Append full bias compensation statistics to stats; interface to rpict's
59 * report() */
60 {
61 char tmp [512];
62 unsigned t;
63
64 stats [0] = '\0';
65
66 for (t = 0; t < NUM_PMAP_TYPES; t++)
67 if (biasCompStats(photonMaps [t], t, tmp))
68 strcat(stats, tmp);
69 }
70
71
72
73 #ifndef NON_POSIX
74 void pmapPreCompReport()
75 /* Report global photon precomputation progress */
76 {
77 extern char *myhostname();
78 float u, s;
79 char tmp [512];
80
81 #ifdef BSD
82 struct rusage rubuf;
83 #else
84 struct tms tbuf;
85 float period;
86 #endif
87
88 repLastTime = time(NULL);
89
90 #ifdef BSD
91 getrusage(RUSAGE_SELF, &rubuf);
92 u = rubuf.ru_utime.tv_sec + rubuf.ru_utime.tv_usec / 1e6;
93 s = rubuf.ru_stime.tv_sec + rubuf.ru_stime.tv_usec / 1e6;
94 getrusage(RUSAGE_CHILDREN, &rubuf);
95 u += rubuf.ru_utime.tv_sec + rubuf.ru_utime.tv_usec / 1e6;
96 s += rubuf.ru_stime.tv_sec + rubuf.ru_stime.tv_usec / 1e6;
97 #else
98 times(&tbuf);
99
100 #ifdef _SC_CLK_TCK
101 period = 1.0 / sysconf(_SC_CLK_TCK);
102 #else
103 period = 1.0 / 60;
104 #endif
105
106 u = (tbuf.tms_utime + tbuf.tms_cutime) * period;
107 s = (tbuf.tms_stime + tbuf.tms_cstime) * period;
108 #endif
109
110 sprintf(errmsg, "%lu precomputed, ", repProgress);
111
112 /* Append bias compensation stats */
113 biasCompStats(preCompPmap, PMAP_TYPE_PRECOMP, tmp);
114 strcat(errmsg, tmp);
115
116 sprintf(tmp, "%4.2f%% after %.3fu %.3fs %.3fr hours on %s\n",
117 100.0 * repProgress / repComplete, u / 3600, s / 3600,
118 (repLastTime - repStartTime) / 3600.0, myhostname());
119 strcat(errmsg, tmp);
120
121 eputs(errmsg);
122 fflush(stderr);
123
124 #ifdef SIGCONT
125 signal(SIGCONT, pmapPreCompReport);
126 #endif
127 }
128
129
130
131 void pmapDistribReport()
132 /* Report photon distribution progress */
133 {
134 extern char *myhostname();
135 float u, s;
136 unsigned t;
137 char tmp [512];
138
139 #ifdef BSD
140 struct rusage rubuf;
141 #else
142 struct tms tbuf;
143 float period;
144 #endif
145
146 repLastTime = time(NULL);
147
148 #ifdef BSD
149 getrusage(RUSAGE_SELF, &rubuf);
150 u = rubuf.ru_utime.tv_sec + rubuf.ru_utime.tv_usec / 1e6;
151 s = rubuf.ru_stime.tv_sec + rubuf.ru_stime.tv_usec / 1e6;
152 getrusage(RUSAGE_CHILDREN, &rubuf);
153 u += rubuf.ru_utime.tv_sec + rubuf.ru_utime.tv_usec / 1e6;
154 s += rubuf.ru_stime.tv_sec + rubuf.ru_stime.tv_usec / 1e6;
155 #else
156 times(&tbuf);
157
158 #ifdef _SC_CLK_TCK
159 period = 1.0 / sysconf(_SC_CLK_TCK);
160 #else
161 period = 1.0 / 60;
162 #endif
163
164 u = (tbuf.tms_utime + tbuf.tms_cutime) * period;
165 s = (tbuf.tms_stime + tbuf.tms_cstime) * period;
166 #endif
167
168 sprintf(errmsg, "%lu emitted, ", repProgress);
169
170 for (t = 0; t < NUM_PMAP_TYPES; t++)
171 if (photonMaps [t]) {
172 sprintf(tmp, "%lu %s, ",
173 photonMaps [t] -> heapEnd, pmapName [t]);
174 strcat(errmsg, tmp);
175 }
176
177 sprintf(tmp, "%4.2f%% after %.3fu %.3fs %.3fr hours on %s\n",
178 100.0 * repProgress / repComplete, u / 3600, s / 3600,
179 (repLastTime - repStartTime) / 3600.0, myhostname());
180
181 strcat(errmsg, tmp);
182 eputs(errmsg);
183 fflush(stderr);
184
185 #ifndef SIGCONT
186 signal(SIGCONT, pmapDistribReport);
187 #endif
188 }
189
190 #else /* POSIX */
191
192 void pmapPreCompReport()
193 /* Report global photon precomputation progress */
194 {
195 char tmp [512];
196
197 repLastTime = time(NULL);
198 sprintf(errmsg, "%lu precomputed, ", repProgress);
199
200 /* Append bias compensation stats */
201 biasCompStats(preCompPmap, PMAP_TYPE_PRECOMP, tmp);
202 strcat(errmsg, tmp);
203
204 sprintf(tmp, "%4.2f%% after %5.4f hours\n",
205 100.0 * repProgress / repComplete,
206 (repLastTime - repStartTime) / 3600.0);
207 strcat(errmsg, tmp);
208
209 eputs(errmsg);
210 fflush(stderr);
211 }
212
213
214
215 void pmapDistribReport()
216 /* Report photon distribution progress */
217 {
218 char tmp [512];
219 unsigned t;
220
221 repLastTime = time(NULL);
222 sprintf(errmsg, "%lu emitted, ", repProgress);
223
224 for (t = 0; t < NUM_PMAP_TYPES; t++)
225 if (photonMaps [t]) {
226 sprintf(tmp, "%lu %s, ",
227 photonMaps [t] -> heapEnd, pmapName [t]);
228 strcat(errmsg, tmp);
229 }
230
231 sprintf(tmp, "%4.2f%% after %5.4f hours\n",
232 100.0 * repProgress / repComplete,
233 (repLastTime - repStartTime) / 3600.0);
234 strcat(errmsg, tmp);
235
236 eputs(errmsg);
237 fflush(stderr);
238 }
239 #endif
240
241
242