summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAge
* Fix unlimited iterations in constant_cycles_kernelJoshua Bakita2025-02-04
|
* Ensure all benchmarks support --help and cleanupJoshua Bakita2024-02-26
|
* Add gl_copies benchmark and make targetJoshua Bakita2024-02-26
| | | | | | | => Uploads a large texture to the GPU on every frame => Requires the freeglut library (freeglut3-dev on Ubuntu) => Due to special requirements, not built by default => Written for Anderson and Bakita RTAS'24 paper
* Add measure_launch_oh benchmark and make targetJoshua Bakita2024-02-26
| | | | | | | Benchmark supports: => Warms up the GPU and kernel code before sampling => Uses a flag in zero-copy memory to track when a kernel begins => Outputs summary statistics to stderr, and sample data to stdout
* Fix timestamping bugs and clean up CPU side of mon_cross_ctx_copiesJoshua Bakita2024-02-21
| | | | | | | | | - Add a more reliable heuristic for how long to run the CPU-side copy monitor. - Check that copies sizes are appropriately divisible. - Fix parsing issue for copies larger than 8192 GiB. - Clean up, and document bugs in, the time synchronization code. - Wait for user before logging copies.
* Rewrite clock rate synchronization code to increase accuracyJoshua Bakita2024-02-20
| | | | | | | | | | | | | | | | | | | | Mirrors architecture used for instantaneous clock synchronization. The PPM (parts-per-million) error after a two-second synchronization period (using results from new implementation after a 100-second synchronization period as ground truth, as after 100 seconds, the new and old implementation disagree by at most 2 PPM). GPU (machine name) Before After ------------------------------ ------ ------ GTX 1060 3 GiB (jbakita-old): 12 1 GTX 970 (jbakita-old): 9 2 GTX 1080 Ti (yamaha): 5 1 RTX 6000 Ada (yamaha): 4 2 (An error of 1 PPM is 1 microsecond per second.) Also modify `preemption_logger` to print the rate of skew as PPM, rather than just as a multiplier.
* Always synchronize GPU and CPU time in the current processJoshua Bakita2024-02-19
| | | | | Performing the synchronization in a child process was fragile, high-overhead, and unnecessary for our use cases.
* Support >4 GiB copy sizes in `mon_cross_ctx_copies`Joshua Bakita2024-02-19
|
* Split SAFE() macro into API-specific typed variantsJoshua Bakita2024-02-19
| | | | | | | | | Avoids incorrectly interpreting CUDA Driver Library error codes as though they were CUDA Runtime Library error codes (the numbering is similar, but not identical). Also cleans up how we initialize and terminate a context for capability checking in `mon_cross_ctx_copies`.
* Remove a potential cause of timing aberrationsJoshua Bakita2024-02-19
| | | | | | | | | | | | | | | | | | | It is possible to be preempted in the middle of reading `globalclock64`. When this causes mismatched readings of the high bits, we assumed the low bits were zero (as in the clock rollover case). In the preemption case, this resulted in a time reading that appears to be in the middle of another process's execution. Correct this by re-reading the low bits when the high bits do not match. (If a short preemption occurs and the high bits match, it does not matter the reading of the low bits occured before or after the preemption, as it will still be consistent with the high bits.) This bug likely affected `preemption_logger`, since that benchmark rapidly reads timestamps in a tight loop and is thus highly likely to be preempted mid-read.
* Allow custom nvcc location when running make + ignore gdb historyJoshua Bakita2023-10-25
| | | | | To specify a custom path to nvcc when building: `make NVCC=/my/path/to/nvcc`
* Add preemption_logger benchmark, make target, and fix d82c60cJoshua Bakita2023-07-06
| | | | | | | | | | | | | | | | Benchmark supports: => Spinning on-GPU until some number of preemptions have occured => Monitoring GPU scheduling by logging preempt and resume times => Logging the above as raw GPU, or converted CPU, times => Measuring launch overheads Also imports task_host_utilities.cu from cuda_scheduling_examiner as of commit 9fc0ca898ef64b82cbc3734c60405723650bc66f. This is needed for timing logic used in both preemption_logger and mon_cross_ctx_copies, thus the latter would not compile prior to this commit. Also adds a new testbench helper, and a .gitignore for binaries.
* Add a "clean" target to the MakefilesJoshua Bakita2023-07-05
|
* Comments and check for successful cleanup in mon_cross_ctx_copiesJoshua Bakita2023-07-05
|
* Fix backwards compatibility and checks in mon_cross_ctx_copiesJoshua Bakita2023-06-21
| | | | On-GPU copy monitoring may have been disfunctional on Maxwell-.
* Rewrite argument parsing for mon_cross_ctx_copiesJoshua Bakita2023-06-21
| | | | | No longer requires a recompile to change the number or type of copy monitoring threads.
* Add mon_cross_ctx_copies benchmark and make targetJoshua Bakita2023-06-13
| | | | | | | | | | | | | | | | Benchmark supports: => Generating parallel copies from CPU to GPU in seperate process => Granular timestamping of when each portion of the copy completes => Monitoring of copy process from either CPU or GPU => Tested on platforms including the GV100 and GV11B Formerly known as diff_ctx_diff_stream. *** Warning *** * The current implementation requires some hardcoded parameters * (such as the number of monitoring threads on the GPU) to be * updated and recompiled when switching test platform. ***
* Add constant_cycles_kernel benchmark + header split and MakefileJoshua Bakita2023-06-09
| | | | | | | | | | Benchmark supports: => Looping on the GPU for a specified number of iterations => Looping infinitely on the GPU => Logging the sum time (ns and ms) for all iterations to complete Also splits `testbench.h` out of `copy_testbench.h` for use in other benchmarks.
* Add copy_contender benchmark, Makefile, and copy_testbench headerJoshua Bakita2023-06-09
Benchmark supports: => Generating a chain of copies in a single context - No timing pause between copies => Copies to, from, or between device(s) => Variable size and number of copies => Logging how many milliseconds each copy takes *** Warning *** * Relies on implicit synchronization of unidirectional copies across * streams. Verify that this is still the case with CUDA before * trusting results. One can check by verifying that the runtime for * one iteration roughly matches the time for each iteration in a * multi-iteration run. ***
0097f8
0da35d6


f0097f8
0da35d6
f0097f8

0da35d6
f0097f8









0da35d6


f0097f8
0da35d6






f0097f8
0da35d6
f0097f8

0da35d6
f0097f8
0da35d6
f0097f8
0da35d6
f0097f8
0da35d6
f0097f8

0da35d6
f0097f8
0da35d6
f0097f8
0da35d6
f0097f8
0da35d6
f0097f8


0da35d6
f0097f8
0da35d6
f0097f8


0da35d6

f0097f8


0da35d6

f0097f8
0da35d6
f0097f8

0da35d6

f0097f8
0da35d6







f0097f8
0da35d6
f0097f8
0da35d6





f0097f8








0da35d6
f0097f8
0da35d6








f0097f8


0da35d6







f0097f8
0da35d6











f0097f8
0da35d6

f0097f8
0da35d6



f0097f8
0da35d6
f0097f8
0da35d6

f0097f8
0da35d6
f0097f8
0da35d6























f0097f8
0da35d6















f0097f8



0da35d6


f0097f8
0da35d6
f0097f8
0da35d6




f0097f8




0da35d6
f0097f8
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345