summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAge
* 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. ***