A thin python wrapper for the nvToolsExt (NVTX) library, using pybind11 ... with some bells and whistles thrown in for good measure.
Project description
PyNVTX
A thin python wrapper for the nvToolsExt (NVTX) library, using pybind11. This wrapper is meant to be as thin as possible -- so only provides minimal support. Currently supported features are:
- NVTX annotations:
nvtxRangePushAandnvtxRangePop - Function decorator:
PyNVTX.annotate - Automatic decorator generation
PyNVTX.annotate_all_methods(<class name>)
Installation
Ensure that the nvcc is in your PATH -- or alternatively ensure that the
CUDAHOME environment variable points to your local CUDA install. To install,
either
pip install PyNVTX
or clone this repo and
python setup.py install
This Won't Break If You Don't Have CUDA
You know what would suck? If including PyNVTX required CUDA to be installed?
Why? There are loads of applications that support CUDA, if available. And
default to the CPU-only version otherwise. PyNVTX is the same. If nvcc in
not in your PATH (nor in your CUDAHOME), then you'll see this warning:
*** WARNING: The nvcc binary could not be located in your $PATH. Either add it to your path, or set $CUDAHOME
(note that it will not warn you if you're installing with pip) and PyNVTX
will still install (it just won't do anything). You can check if a local
version of PyNVTX has been built with CUDA support by checking:
PyNVTX.cuda_enabled # True if compiled with CUDA support
NVTX Markers (nvtxRangePushA / nvtxRangePop)
import PyNVTX as nvtx
nvtx.RangePushA("Doing some work")
# code to time goes here
nvtx.RangePop()
Function Decorator
The PyNVTX.annotate will put RangePushA and RangePop the the beginning and of
the function call:
import PyNVTX as nvtx
@nvtx.annotate("test_function")
def test():
# You code goes here
Automatic Instrumentation
The PyNVTX.annotate_all_methods will automatically decorate all methods in a
class, as well as all methods it inherits. A guard prevents accidentally
decorating any method twice. Eg.:
import PyNVTX as nvtx
class MyClassA(object):
def __init__(self):
pass
def f(self):
pass
class MyClassB(MyClassA):
def __init__(self):
pass
def g(self):
pass
nvtx.annotate_all_methods(MyClassB)
Will instrument MyClassB's __init__, as well as f and g, but not
MyClassA's __init__.
Adding a class/method name to PyNVTX.REGISTRY will prevent it from being
instrumented by PyNVTX.annotate_all_methods. For example:
nvtx.REGISTRY.add(MyClassB, "f") # note the method name is a string
nvtx.annotate_all_methods(MyClassB)
will not instrument f.
Example Code
To get you started, take a look at test/test-nvtx.py
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file PyNVTX-0.3.3.tar.gz.
File metadata
- Download URL: PyNVTX-0.3.3.tar.gz
- Upload date:
- Size: 8.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.8.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8877b2d90bbf9d279d517a80a8f35a0a0a8179ebabf0729e806798a84bee6c72
|
|
| MD5 |
f4b04648d8c00ad04c4c66f62992b338
|
|
| BLAKE2b-256 |
a6935e15aa5d98e4a33676bc9fe36142d766230fe944f488f21bc02a8b7bbdeb
|