| Commit message (Collapse) | Author | Age |
| |
|
|
|
|
|
|
|
|
|
| |
Allows specifying an environment variable to only be applied to the
child, e.g.:
./measure_startup_oh -e LD_PRELOAD=libsmctrl.so
Or for starting the child process via a intermediate task, e.g.:
./measure_startup_oh ./nvtaskset 0xf ./measure_launch_oh 1
This allows for correctly measuring the startup overhead in the
evaluation of the ECRTS'25 partitioning paper.
|
| | |
|
| |
|
|
|
| |
This change better aligns gpu-microbench with the assumptions of
the cuda_scheduling_examiner Makefile.
|
| |
|
|
|
|
|
|
|
|
| |
Supports ECRTS'25 partitioning paper.
To nicely parse the resultant output, one could use the following
shell pipeline:
./measure_startup_oh 2>&1 | cut -d "=" -s -f 2 | cut -d " " -f 2 \
| tr "\n" " " | sed 's/$/r - p/' | dc
|
| |
|
|
|
|
|
| |
This is to reduce the impact of scheduling noise when measuring a
very large number of samples.
This change is to support the ECRTS'25 partitioning paper.
|
| | |
|
| | |
|
| |
|
|
|
|
|
| |
=> 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
|
| |
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
|
|
| |
- 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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
| |
Performing the synchronization in a child process was fragile,
high-overhead, and unnecessary for our use cases.
|
| | |
|
| |
|
|
|
|
|
|
|
| |
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`.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
| |
To specify a custom path to nvcc when building:
`make NVCC=/my/path/to/nvcc`
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| | |
|
| | |
|
| |
|
|
| |
On-GPU copy monitoring may have been disfunctional on Maxwell-.
|
| |
|
|
|
| |
No longer requires a recompile to change the number or type of copy
monitoring threads.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
***
|
| |
|
|
|
|
|
|
|
|
| |
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.
|
|
|
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.
***
|