<feed xmlns='http://www.w3.org/2005/Atom'>
<title>gpu-microbench.git/task_host_utilities.cu, branch master</title>
<subtitle>Lightweight, hyper-accurate microbenchmarks and measurement tools for GPU scheduling examination.</subtitle>
<link rel='alternate' type='text/html' href='http://rtsrv.cs.unc.edu/cgit/cgit.cgi/gpu-microbench.git/'/>
<entry>
<title>Rewrite clock rate synchronization code to increase accuracy</title>
<updated>2024-02-20T21:03:38+00:00</updated>
<author>
<name>Joshua Bakita</name>
<email>bakitajoshua@gmail.com</email>
</author>
<published>2024-02-20T21:03:38+00:00</published>
<link rel='alternate' type='text/html' href='http://rtsrv.cs.unc.edu/cgit/cgit.cgi/gpu-microbench.git/commit/?id=2accc2be54d3f9ad20d15f21bca6397ef6cabf92'/>
<id>2accc2be54d3f9ad20d15f21bca6397ef6cabf92</id>
<content type='text'>
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.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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.
</pre>
</div>
</content>
</entry>
<entry>
<title>Split SAFE() macro into API-specific typed variants</title>
<updated>2024-02-20T01:39:39+00:00</updated>
<author>
<name>Joshua Bakita</name>
<email>bakitajoshua@gmail.com</email>
</author>
<published>2024-02-20T01:39:39+00:00</published>
<link rel='alternate' type='text/html' href='http://rtsrv.cs.unc.edu/cgit/cgit.cgi/gpu-microbench.git/commit/?id=cd9ee070e2fcaa49fe35944ea0fd60ed5d197ba2'/>
<id>cd9ee070e2fcaa49fe35944ea0fd60ed5d197ba2</id>
<content type='text'>
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`.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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`.
</pre>
</div>
</content>
</entry>
<entry>
<title>Remove a potential cause of timing aberrations</title>
<updated>2024-02-20T01:31:11+00:00</updated>
<author>
<name>Joshua Bakita</name>
<email>bakitajoshua@gmail.com</email>
</author>
<published>2024-02-20T00:50:29+00:00</published>
<link rel='alternate' type='text/html' href='http://rtsrv.cs.unc.edu/cgit/cgit.cgi/gpu-microbench.git/commit/?id=18641058a2d60e172f18176b41d51baa706ffd85'/>
<id>18641058a2d60e172f18176b41d51baa706ffd85</id>
<content type='text'>
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.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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.
</pre>
</div>
</content>
</entry>
<entry>
<title>Add preemption_logger benchmark, make target, and fix d82c60c</title>
<updated>2023-07-06T15:45:59+00:00</updated>
<author>
<name>Joshua Bakita</name>
<email>bakitajoshua@gmail.com</email>
</author>
<published>2023-07-06T15:45:59+00:00</published>
<link rel='alternate' type='text/html' href='http://rtsrv.cs.unc.edu/cgit/cgit.cgi/gpu-microbench.git/commit/?id=e415e282be53a3d8264b67d22b4b15b518f71099'/>
<id>e415e282be53a3d8264b67d22b4b15b518f71099</id>
<content type='text'>
Benchmark supports:
=&gt; Spinning on-GPU until some number of preemptions have occured
=&gt; Monitoring GPU scheduling by logging preempt and resume times
=&gt; Logging the above as raw GPU, or converted CPU, times
=&gt; 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.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Benchmark supports:
=&gt; Spinning on-GPU until some number of preemptions have occured
=&gt; Monitoring GPU scheduling by logging preempt and resume times
=&gt; Logging the above as raw GPU, or converted CPU, times
=&gt; 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.
</pre>
</div>
</content>
</entry>
</feed>
