Add files using upload-large-folder tool
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- lib/python3.12/site-packages/itsdangerous/__init__.py +38 -0
- lib/python3.12/site-packages/itsdangerous/__pycache__/__init__.cpython-312.pyc +0 -0
- lib/python3.12/site-packages/itsdangerous/__pycache__/_json.cpython-312.pyc +0 -0
- lib/python3.12/site-packages/itsdangerous/__pycache__/encoding.cpython-312.pyc +0 -0
- lib/python3.12/site-packages/itsdangerous/__pycache__/exc.cpython-312.pyc +0 -0
- lib/python3.12/site-packages/itsdangerous/__pycache__/serializer.cpython-312.pyc +0 -0
- lib/python3.12/site-packages/itsdangerous/__pycache__/signer.cpython-312.pyc +0 -0
- lib/python3.12/site-packages/itsdangerous/__pycache__/timed.cpython-312.pyc +0 -0
- lib/python3.12/site-packages/itsdangerous/__pycache__/url_safe.cpython-312.pyc +0 -0
- lib/python3.12/site-packages/itsdangerous/_json.py +18 -0
- lib/python3.12/site-packages/itsdangerous/encoding.py +54 -0
- lib/python3.12/site-packages/itsdangerous/exc.py +106 -0
- lib/python3.12/site-packages/itsdangerous/py.typed +0 -0
- lib/python3.12/site-packages/itsdangerous/serializer.py +406 -0
- lib/python3.12/site-packages/itsdangerous/signer.py +266 -0
- lib/python3.12/site-packages/itsdangerous/timed.py +228 -0
- lib/python3.12/site-packages/itsdangerous/url_safe.py +83 -0
- lib/python3.12/site-packages/ninja/__init__.py +60 -0
- lib/python3.12/site-packages/ninja/__main__.py +6 -0
- lib/python3.12/site-packages/ninja/__pycache__/__init__.cpython-312.pyc +0 -0
- lib/python3.12/site-packages/ninja/__pycache__/__main__.cpython-312.pyc +0 -0
- lib/python3.12/site-packages/ninja/__pycache__/_version.cpython-312.pyc +0 -0
- lib/python3.12/site-packages/ninja/__pycache__/ninja_syntax.cpython-312.pyc +0 -0
- lib/python3.12/site-packages/ninja/_version.py +1 -0
- lib/python3.12/site-packages/ninja/_version.pyi +4 -0
- lib/python3.12/site-packages/ninja/ninja_syntax.py +231 -0
- lib/python3.12/site-packages/ninja/ninja_syntax.pyi +37 -0
- lib/python3.12/site-packages/ninja/py.typed +0 -0
- lib/python3.12/site-packages/nvidia/__pycache__/__init__.cpython-312.pyc +0 -0
- lib/python3.12/site-packages/nvidia/cuda_cupti/__init__.py +0 -0
- lib/python3.12/site-packages/nvidia/cuda_cupti/__pycache__/__init__.cpython-312.pyc +0 -0
- lib/python3.12/site-packages/nvidia/cuda_cupti/include/Openacc/cupti_openacc.h +98 -0
- lib/python3.12/site-packages/nvidia/cuda_cupti/include/Openmp/cupti_openmp.h +100 -0
- lib/python3.12/site-packages/nvidia/cuda_cupti/include/Openmp/omp-tools.h +1083 -0
- lib/python3.12/site-packages/nvidia/cuda_cupti/include/__init__.py +0 -0
- lib/python3.12/site-packages/nvidia/cuda_cupti/include/__pycache__/__init__.cpython-312.pyc +0 -0
- lib/python3.12/site-packages/nvidia/cuda_cupti/include/cuda_stdint.h +112 -0
- lib/python3.12/site-packages/nvidia/cuda_cupti/include/cupti.h +123 -0
- lib/python3.12/site-packages/nvidia/cuda_cupti/include/cupti_activity.h +0 -0
- lib/python3.12/site-packages/nvidia/cuda_cupti/include/cupti_activity_deprecated.h +0 -0
- lib/python3.12/site-packages/nvidia/cuda_cupti/include/cupti_callbacks.h +860 -0
- lib/python3.12/site-packages/nvidia/cuda_cupti/include/cupti_checkpoint.h +127 -0
- lib/python3.12/site-packages/nvidia/cuda_cupti/include/cupti_common.h +93 -0
- lib/python3.12/site-packages/nvidia/cuda_cupti/include/cupti_driver_cbid.h +767 -0
- lib/python3.12/site-packages/nvidia/cuda_cupti/include/cupti_events.h +1350 -0
- lib/python3.12/site-packages/nvidia/cuda_cupti/include/cupti_metrics.h +825 -0
- lib/python3.12/site-packages/nvidia/cuda_cupti/include/cupti_nvtx_cbid.h +111 -0
- lib/python3.12/site-packages/nvidia/cuda_cupti/include/cupti_pcsampling.h +936 -0
- lib/python3.12/site-packages/nvidia/cuda_cupti/include/cupti_pcsampling_util.h +402 -0
- lib/python3.12/site-packages/nvidia/cuda_cupti/include/cupti_profiler_target.h +601 -0
lib/python3.12/site-packages/itsdangerous/__init__.py
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
|
| 3 |
+
import typing as t
|
| 4 |
+
|
| 5 |
+
from .encoding import base64_decode as base64_decode
|
| 6 |
+
from .encoding import base64_encode as base64_encode
|
| 7 |
+
from .encoding import want_bytes as want_bytes
|
| 8 |
+
from .exc import BadData as BadData
|
| 9 |
+
from .exc import BadHeader as BadHeader
|
| 10 |
+
from .exc import BadPayload as BadPayload
|
| 11 |
+
from .exc import BadSignature as BadSignature
|
| 12 |
+
from .exc import BadTimeSignature as BadTimeSignature
|
| 13 |
+
from .exc import SignatureExpired as SignatureExpired
|
| 14 |
+
from .serializer import Serializer as Serializer
|
| 15 |
+
from .signer import HMACAlgorithm as HMACAlgorithm
|
| 16 |
+
from .signer import NoneAlgorithm as NoneAlgorithm
|
| 17 |
+
from .signer import Signer as Signer
|
| 18 |
+
from .timed import TimedSerializer as TimedSerializer
|
| 19 |
+
from .timed import TimestampSigner as TimestampSigner
|
| 20 |
+
from .url_safe import URLSafeSerializer as URLSafeSerializer
|
| 21 |
+
from .url_safe import URLSafeTimedSerializer as URLSafeTimedSerializer
|
| 22 |
+
|
| 23 |
+
|
| 24 |
+
def __getattr__(name: str) -> t.Any:
|
| 25 |
+
if name == "__version__":
|
| 26 |
+
import importlib.metadata
|
| 27 |
+
import warnings
|
| 28 |
+
|
| 29 |
+
warnings.warn(
|
| 30 |
+
"The '__version__' attribute is deprecated and will be removed in"
|
| 31 |
+
" ItsDangerous 2.3. Use feature detection or"
|
| 32 |
+
" 'importlib.metadata.version(\"itsdangerous\")' instead.",
|
| 33 |
+
DeprecationWarning,
|
| 34 |
+
stacklevel=2,
|
| 35 |
+
)
|
| 36 |
+
return importlib.metadata.version("itsdangerous")
|
| 37 |
+
|
| 38 |
+
raise AttributeError(name)
|
lib/python3.12/site-packages/itsdangerous/__pycache__/__init__.cpython-312.pyc
ADDED
|
Binary file (1.63 kB). View file
|
|
|
lib/python3.12/site-packages/itsdangerous/__pycache__/_json.cpython-312.pyc
ADDED
|
Binary file (1.18 kB). View file
|
|
|
lib/python3.12/site-packages/itsdangerous/__pycache__/encoding.cpython-312.pyc
ADDED
|
Binary file (2.68 kB). View file
|
|
|
lib/python3.12/site-packages/itsdangerous/__pycache__/exc.cpython-312.pyc
ADDED
|
Binary file (3.94 kB). View file
|
|
|
lib/python3.12/site-packages/itsdangerous/__pycache__/serializer.cpython-312.pyc
ADDED
|
Binary file (15.4 kB). View file
|
|
|
lib/python3.12/site-packages/itsdangerous/__pycache__/signer.cpython-312.pyc
ADDED
|
Binary file (11.3 kB). View file
|
|
|
lib/python3.12/site-packages/itsdangerous/__pycache__/timed.cpython-312.pyc
ADDED
|
Binary file (8.73 kB). View file
|
|
|
lib/python3.12/site-packages/itsdangerous/__pycache__/url_safe.cpython-312.pyc
ADDED
|
Binary file (3.53 kB). View file
|
|
|
lib/python3.12/site-packages/itsdangerous/_json.py
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
|
| 3 |
+
import json as _json
|
| 4 |
+
import typing as t
|
| 5 |
+
|
| 6 |
+
|
| 7 |
+
class _CompactJSON:
|
| 8 |
+
"""Wrapper around json module that strips whitespace."""
|
| 9 |
+
|
| 10 |
+
@staticmethod
|
| 11 |
+
def loads(payload: str | bytes) -> t.Any:
|
| 12 |
+
return _json.loads(payload)
|
| 13 |
+
|
| 14 |
+
@staticmethod
|
| 15 |
+
def dumps(obj: t.Any, **kwargs: t.Any) -> str:
|
| 16 |
+
kwargs.setdefault("ensure_ascii", False)
|
| 17 |
+
kwargs.setdefault("separators", (",", ":"))
|
| 18 |
+
return _json.dumps(obj, **kwargs)
|
lib/python3.12/site-packages/itsdangerous/encoding.py
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
|
| 3 |
+
import base64
|
| 4 |
+
import string
|
| 5 |
+
import struct
|
| 6 |
+
import typing as t
|
| 7 |
+
|
| 8 |
+
from .exc import BadData
|
| 9 |
+
|
| 10 |
+
|
| 11 |
+
def want_bytes(
|
| 12 |
+
s: str | bytes, encoding: str = "utf-8", errors: str = "strict"
|
| 13 |
+
) -> bytes:
|
| 14 |
+
if isinstance(s, str):
|
| 15 |
+
s = s.encode(encoding, errors)
|
| 16 |
+
|
| 17 |
+
return s
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
def base64_encode(string: str | bytes) -> bytes:
|
| 21 |
+
"""Base64 encode a string of bytes or text. The resulting bytes are
|
| 22 |
+
safe to use in URLs.
|
| 23 |
+
"""
|
| 24 |
+
string = want_bytes(string)
|
| 25 |
+
return base64.urlsafe_b64encode(string).rstrip(b"=")
|
| 26 |
+
|
| 27 |
+
|
| 28 |
+
def base64_decode(string: str | bytes) -> bytes:
|
| 29 |
+
"""Base64 decode a URL-safe string of bytes or text. The result is
|
| 30 |
+
bytes.
|
| 31 |
+
"""
|
| 32 |
+
string = want_bytes(string, encoding="ascii", errors="ignore")
|
| 33 |
+
string += b"=" * (-len(string) % 4)
|
| 34 |
+
|
| 35 |
+
try:
|
| 36 |
+
return base64.urlsafe_b64decode(string)
|
| 37 |
+
except (TypeError, ValueError) as e:
|
| 38 |
+
raise BadData("Invalid base64-encoded data") from e
|
| 39 |
+
|
| 40 |
+
|
| 41 |
+
# The alphabet used by base64.urlsafe_*
|
| 42 |
+
_base64_alphabet = f"{string.ascii_letters}{string.digits}-_=".encode("ascii")
|
| 43 |
+
|
| 44 |
+
_int64_struct = struct.Struct(">Q")
|
| 45 |
+
_int_to_bytes = _int64_struct.pack
|
| 46 |
+
_bytes_to_int = t.cast("t.Callable[[bytes], tuple[int]]", _int64_struct.unpack)
|
| 47 |
+
|
| 48 |
+
|
| 49 |
+
def int_to_bytes(num: int) -> bytes:
|
| 50 |
+
return _int_to_bytes(num).lstrip(b"\x00")
|
| 51 |
+
|
| 52 |
+
|
| 53 |
+
def bytes_to_int(bytestr: bytes) -> int:
|
| 54 |
+
return _bytes_to_int(bytestr.rjust(8, b"\x00"))[0]
|
lib/python3.12/site-packages/itsdangerous/exc.py
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
|
| 3 |
+
import typing as t
|
| 4 |
+
from datetime import datetime
|
| 5 |
+
|
| 6 |
+
|
| 7 |
+
class BadData(Exception):
|
| 8 |
+
"""Raised if bad data of any sort was encountered. This is the base
|
| 9 |
+
for all exceptions that ItsDangerous defines.
|
| 10 |
+
|
| 11 |
+
.. versionadded:: 0.15
|
| 12 |
+
"""
|
| 13 |
+
|
| 14 |
+
def __init__(self, message: str):
|
| 15 |
+
super().__init__(message)
|
| 16 |
+
self.message = message
|
| 17 |
+
|
| 18 |
+
def __str__(self) -> str:
|
| 19 |
+
return self.message
|
| 20 |
+
|
| 21 |
+
|
| 22 |
+
class BadSignature(BadData):
|
| 23 |
+
"""Raised if a signature does not match."""
|
| 24 |
+
|
| 25 |
+
def __init__(self, message: str, payload: t.Any | None = None):
|
| 26 |
+
super().__init__(message)
|
| 27 |
+
|
| 28 |
+
#: The payload that failed the signature test. In some
|
| 29 |
+
#: situations you might still want to inspect this, even if
|
| 30 |
+
#: you know it was tampered with.
|
| 31 |
+
#:
|
| 32 |
+
#: .. versionadded:: 0.14
|
| 33 |
+
self.payload: t.Any | None = payload
|
| 34 |
+
|
| 35 |
+
|
| 36 |
+
class BadTimeSignature(BadSignature):
|
| 37 |
+
"""Raised if a time-based signature is invalid. This is a subclass
|
| 38 |
+
of :class:`BadSignature`.
|
| 39 |
+
"""
|
| 40 |
+
|
| 41 |
+
def __init__(
|
| 42 |
+
self,
|
| 43 |
+
message: str,
|
| 44 |
+
payload: t.Any | None = None,
|
| 45 |
+
date_signed: datetime | None = None,
|
| 46 |
+
):
|
| 47 |
+
super().__init__(message, payload)
|
| 48 |
+
|
| 49 |
+
#: If the signature expired this exposes the date of when the
|
| 50 |
+
#: signature was created. This can be helpful in order to
|
| 51 |
+
#: tell the user how long a link has been gone stale.
|
| 52 |
+
#:
|
| 53 |
+
#: .. versionchanged:: 2.0
|
| 54 |
+
#: The datetime value is timezone-aware rather than naive.
|
| 55 |
+
#:
|
| 56 |
+
#: .. versionadded:: 0.14
|
| 57 |
+
self.date_signed = date_signed
|
| 58 |
+
|
| 59 |
+
|
| 60 |
+
class SignatureExpired(BadTimeSignature):
|
| 61 |
+
"""Raised if a signature timestamp is older than ``max_age``. This
|
| 62 |
+
is a subclass of :exc:`BadTimeSignature`.
|
| 63 |
+
"""
|
| 64 |
+
|
| 65 |
+
|
| 66 |
+
class BadHeader(BadSignature):
|
| 67 |
+
"""Raised if a signed header is invalid in some form. This only
|
| 68 |
+
happens for serializers that have a header that goes with the
|
| 69 |
+
signature.
|
| 70 |
+
|
| 71 |
+
.. versionadded:: 0.24
|
| 72 |
+
"""
|
| 73 |
+
|
| 74 |
+
def __init__(
|
| 75 |
+
self,
|
| 76 |
+
message: str,
|
| 77 |
+
payload: t.Any | None = None,
|
| 78 |
+
header: t.Any | None = None,
|
| 79 |
+
original_error: Exception | None = None,
|
| 80 |
+
):
|
| 81 |
+
super().__init__(message, payload)
|
| 82 |
+
|
| 83 |
+
#: If the header is actually available but just malformed it
|
| 84 |
+
#: might be stored here.
|
| 85 |
+
self.header: t.Any | None = header
|
| 86 |
+
|
| 87 |
+
#: If available, the error that indicates why the payload was
|
| 88 |
+
#: not valid. This might be ``None``.
|
| 89 |
+
self.original_error: Exception | None = original_error
|
| 90 |
+
|
| 91 |
+
|
| 92 |
+
class BadPayload(BadData):
|
| 93 |
+
"""Raised if a payload is invalid. This could happen if the payload
|
| 94 |
+
is loaded despite an invalid signature, or if there is a mismatch
|
| 95 |
+
between the serializer and deserializer. The original exception
|
| 96 |
+
that occurred during loading is stored on as :attr:`original_error`.
|
| 97 |
+
|
| 98 |
+
.. versionadded:: 0.15
|
| 99 |
+
"""
|
| 100 |
+
|
| 101 |
+
def __init__(self, message: str, original_error: Exception | None = None):
|
| 102 |
+
super().__init__(message)
|
| 103 |
+
|
| 104 |
+
#: If available, the error that indicates why the payload was
|
| 105 |
+
#: not valid. This might be ``None``.
|
| 106 |
+
self.original_error: Exception | None = original_error
|
lib/python3.12/site-packages/itsdangerous/py.typed
ADDED
|
File without changes
|
lib/python3.12/site-packages/itsdangerous/serializer.py
ADDED
|
@@ -0,0 +1,406 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
|
| 3 |
+
import collections.abc as cabc
|
| 4 |
+
import json
|
| 5 |
+
import typing as t
|
| 6 |
+
|
| 7 |
+
from .encoding import want_bytes
|
| 8 |
+
from .exc import BadPayload
|
| 9 |
+
from .exc import BadSignature
|
| 10 |
+
from .signer import _make_keys_list
|
| 11 |
+
from .signer import Signer
|
| 12 |
+
|
| 13 |
+
if t.TYPE_CHECKING:
|
| 14 |
+
import typing_extensions as te
|
| 15 |
+
|
| 16 |
+
# This should be either be str or bytes. To avoid having to specify the
|
| 17 |
+
# bound type, it falls back to a union if structural matching fails.
|
| 18 |
+
_TSerialized = te.TypeVar(
|
| 19 |
+
"_TSerialized", bound=t.Union[str, bytes], default=t.Union[str, bytes]
|
| 20 |
+
)
|
| 21 |
+
else:
|
| 22 |
+
# Still available at runtime on Python < 3.13, but without the default.
|
| 23 |
+
_TSerialized = t.TypeVar("_TSerialized", bound=t.Union[str, bytes])
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
class _PDataSerializer(t.Protocol[_TSerialized]):
|
| 27 |
+
def loads(self, payload: _TSerialized, /) -> t.Any: ...
|
| 28 |
+
# A signature with additional arguments is not handled correctly by type
|
| 29 |
+
# checkers right now, so an overload is used below for serializers that
|
| 30 |
+
# don't match this strict protocol.
|
| 31 |
+
def dumps(self, obj: t.Any, /) -> _TSerialized: ...
|
| 32 |
+
|
| 33 |
+
|
| 34 |
+
# Use TypeIs once it's available in typing_extensions or 3.13.
|
| 35 |
+
def is_text_serializer(
|
| 36 |
+
serializer: _PDataSerializer[t.Any],
|
| 37 |
+
) -> te.TypeGuard[_PDataSerializer[str]]:
|
| 38 |
+
"""Checks whether a serializer generates text or binary."""
|
| 39 |
+
return isinstance(serializer.dumps({}), str)
|
| 40 |
+
|
| 41 |
+
|
| 42 |
+
class Serializer(t.Generic[_TSerialized]):
|
| 43 |
+
"""A serializer wraps a :class:`~itsdangerous.signer.Signer` to
|
| 44 |
+
enable serializing and securely signing data other than bytes. It
|
| 45 |
+
can unsign to verify that the data hasn't been changed.
|
| 46 |
+
|
| 47 |
+
The serializer provides :meth:`dumps` and :meth:`loads`, similar to
|
| 48 |
+
:mod:`json`, and by default uses :mod:`json` internally to serialize
|
| 49 |
+
the data to bytes.
|
| 50 |
+
|
| 51 |
+
The secret key should be a random string of ``bytes`` and should not
|
| 52 |
+
be saved to code or version control. Different salts should be used
|
| 53 |
+
to distinguish signing in different contexts. See :doc:`/concepts`
|
| 54 |
+
for information about the security of the secret key and salt.
|
| 55 |
+
|
| 56 |
+
:param secret_key: The secret key to sign and verify with. Can be a
|
| 57 |
+
list of keys, oldest to newest, to support key rotation.
|
| 58 |
+
:param salt: Extra key to combine with ``secret_key`` to distinguish
|
| 59 |
+
signatures in different contexts.
|
| 60 |
+
:param serializer: An object that provides ``dumps`` and ``loads``
|
| 61 |
+
methods for serializing data to a string. Defaults to
|
| 62 |
+
:attr:`default_serializer`, which defaults to :mod:`json`.
|
| 63 |
+
:param serializer_kwargs: Keyword arguments to pass when calling
|
| 64 |
+
``serializer.dumps``.
|
| 65 |
+
:param signer: A ``Signer`` class to instantiate when signing data.
|
| 66 |
+
Defaults to :attr:`default_signer`, which defaults to
|
| 67 |
+
:class:`~itsdangerous.signer.Signer`.
|
| 68 |
+
:param signer_kwargs: Keyword arguments to pass when instantiating
|
| 69 |
+
the ``Signer`` class.
|
| 70 |
+
:param fallback_signers: List of signer parameters to try when
|
| 71 |
+
unsigning with the default signer fails. Each item can be a dict
|
| 72 |
+
of ``signer_kwargs``, a ``Signer`` class, or a tuple of
|
| 73 |
+
``(signer, signer_kwargs)``. Defaults to
|
| 74 |
+
:attr:`default_fallback_signers`.
|
| 75 |
+
|
| 76 |
+
.. versionchanged:: 2.0
|
| 77 |
+
Added support for key rotation by passing a list to
|
| 78 |
+
``secret_key``.
|
| 79 |
+
|
| 80 |
+
.. versionchanged:: 2.0
|
| 81 |
+
Removed the default SHA-512 fallback signer from
|
| 82 |
+
``default_fallback_signers``.
|
| 83 |
+
|
| 84 |
+
.. versionchanged:: 1.1
|
| 85 |
+
Added support for ``fallback_signers`` and configured a default
|
| 86 |
+
SHA-512 fallback. This fallback is for users who used the yanked
|
| 87 |
+
1.0.0 release which defaulted to SHA-512.
|
| 88 |
+
|
| 89 |
+
.. versionchanged:: 0.14
|
| 90 |
+
The ``signer`` and ``signer_kwargs`` parameters were added to
|
| 91 |
+
the constructor.
|
| 92 |
+
"""
|
| 93 |
+
|
| 94 |
+
#: The default serialization module to use to serialize data to a
|
| 95 |
+
#: string internally. The default is :mod:`json`, but can be changed
|
| 96 |
+
#: to any object that provides ``dumps`` and ``loads`` methods.
|
| 97 |
+
default_serializer: _PDataSerializer[t.Any] = json
|
| 98 |
+
|
| 99 |
+
#: The default ``Signer`` class to instantiate when signing data.
|
| 100 |
+
#: The default is :class:`itsdangerous.signer.Signer`.
|
| 101 |
+
default_signer: type[Signer] = Signer
|
| 102 |
+
|
| 103 |
+
#: The default fallback signers to try when unsigning fails.
|
| 104 |
+
default_fallback_signers: list[
|
| 105 |
+
dict[str, t.Any] | tuple[type[Signer], dict[str, t.Any]] | type[Signer]
|
| 106 |
+
] = []
|
| 107 |
+
|
| 108 |
+
# Serializer[str] if no data serializer is provided, or if it returns str.
|
| 109 |
+
@t.overload
|
| 110 |
+
def __init__(
|
| 111 |
+
self: Serializer[str],
|
| 112 |
+
secret_key: str | bytes | cabc.Iterable[str] | cabc.Iterable[bytes],
|
| 113 |
+
salt: str | bytes | None = b"itsdangerous",
|
| 114 |
+
serializer: None | _PDataSerializer[str] = None,
|
| 115 |
+
serializer_kwargs: dict[str, t.Any] | None = None,
|
| 116 |
+
signer: type[Signer] | None = None,
|
| 117 |
+
signer_kwargs: dict[str, t.Any] | None = None,
|
| 118 |
+
fallback_signers: list[
|
| 119 |
+
dict[str, t.Any] | tuple[type[Signer], dict[str, t.Any]] | type[Signer]
|
| 120 |
+
]
|
| 121 |
+
| None = None,
|
| 122 |
+
): ...
|
| 123 |
+
|
| 124 |
+
# Serializer[bytes] with a bytes data serializer positional argument.
|
| 125 |
+
@t.overload
|
| 126 |
+
def __init__(
|
| 127 |
+
self: Serializer[bytes],
|
| 128 |
+
secret_key: str | bytes | cabc.Iterable[str] | cabc.Iterable[bytes],
|
| 129 |
+
salt: str | bytes | None,
|
| 130 |
+
serializer: _PDataSerializer[bytes],
|
| 131 |
+
serializer_kwargs: dict[str, t.Any] | None = None,
|
| 132 |
+
signer: type[Signer] | None = None,
|
| 133 |
+
signer_kwargs: dict[str, t.Any] | None = None,
|
| 134 |
+
fallback_signers: list[
|
| 135 |
+
dict[str, t.Any] | tuple[type[Signer], dict[str, t.Any]] | type[Signer]
|
| 136 |
+
]
|
| 137 |
+
| None = None,
|
| 138 |
+
): ...
|
| 139 |
+
|
| 140 |
+
# Serializer[bytes] with a bytes data serializer keyword argument.
|
| 141 |
+
@t.overload
|
| 142 |
+
def __init__(
|
| 143 |
+
self: Serializer[bytes],
|
| 144 |
+
secret_key: str | bytes | cabc.Iterable[str] | cabc.Iterable[bytes],
|
| 145 |
+
salt: str | bytes | None = b"itsdangerous",
|
| 146 |
+
*,
|
| 147 |
+
serializer: _PDataSerializer[bytes],
|
| 148 |
+
serializer_kwargs: dict[str, t.Any] | None = None,
|
| 149 |
+
signer: type[Signer] | None = None,
|
| 150 |
+
signer_kwargs: dict[str, t.Any] | None = None,
|
| 151 |
+
fallback_signers: list[
|
| 152 |
+
dict[str, t.Any] | tuple[type[Signer], dict[str, t.Any]] | type[Signer]
|
| 153 |
+
]
|
| 154 |
+
| None = None,
|
| 155 |
+
): ...
|
| 156 |
+
|
| 157 |
+
# Fall back with a positional argument. If the strict signature of
|
| 158 |
+
# _PDataSerializer doesn't match, fall back to a union, requiring the user
|
| 159 |
+
# to specify the type.
|
| 160 |
+
@t.overload
|
| 161 |
+
def __init__(
|
| 162 |
+
self,
|
| 163 |
+
secret_key: str | bytes | cabc.Iterable[str] | cabc.Iterable[bytes],
|
| 164 |
+
salt: str | bytes | None,
|
| 165 |
+
serializer: t.Any,
|
| 166 |
+
serializer_kwargs: dict[str, t.Any] | None = None,
|
| 167 |
+
signer: type[Signer] | None = None,
|
| 168 |
+
signer_kwargs: dict[str, t.Any] | None = None,
|
| 169 |
+
fallback_signers: list[
|
| 170 |
+
dict[str, t.Any] | tuple[type[Signer], dict[str, t.Any]] | type[Signer]
|
| 171 |
+
]
|
| 172 |
+
| None = None,
|
| 173 |
+
): ...
|
| 174 |
+
|
| 175 |
+
# Fall back with a keyword argument.
|
| 176 |
+
@t.overload
|
| 177 |
+
def __init__(
|
| 178 |
+
self,
|
| 179 |
+
secret_key: str | bytes | cabc.Iterable[str] | cabc.Iterable[bytes],
|
| 180 |
+
salt: str | bytes | None = b"itsdangerous",
|
| 181 |
+
*,
|
| 182 |
+
serializer: t.Any,
|
| 183 |
+
serializer_kwargs: dict[str, t.Any] | None = None,
|
| 184 |
+
signer: type[Signer] | None = None,
|
| 185 |
+
signer_kwargs: dict[str, t.Any] | None = None,
|
| 186 |
+
fallback_signers: list[
|
| 187 |
+
dict[str, t.Any] | tuple[type[Signer], dict[str, t.Any]] | type[Signer]
|
| 188 |
+
]
|
| 189 |
+
| None = None,
|
| 190 |
+
): ...
|
| 191 |
+
|
| 192 |
+
def __init__(
|
| 193 |
+
self,
|
| 194 |
+
secret_key: str | bytes | cabc.Iterable[str] | cabc.Iterable[bytes],
|
| 195 |
+
salt: str | bytes | None = b"itsdangerous",
|
| 196 |
+
serializer: t.Any | None = None,
|
| 197 |
+
serializer_kwargs: dict[str, t.Any] | None = None,
|
| 198 |
+
signer: type[Signer] | None = None,
|
| 199 |
+
signer_kwargs: dict[str, t.Any] | None = None,
|
| 200 |
+
fallback_signers: list[
|
| 201 |
+
dict[str, t.Any] | tuple[type[Signer], dict[str, t.Any]] | type[Signer]
|
| 202 |
+
]
|
| 203 |
+
| None = None,
|
| 204 |
+
):
|
| 205 |
+
#: The list of secret keys to try for verifying signatures, from
|
| 206 |
+
#: oldest to newest. The newest (last) key is used for signing.
|
| 207 |
+
#:
|
| 208 |
+
#: This allows a key rotation system to keep a list of allowed
|
| 209 |
+
#: keys and remove expired ones.
|
| 210 |
+
self.secret_keys: list[bytes] = _make_keys_list(secret_key)
|
| 211 |
+
|
| 212 |
+
if salt is not None:
|
| 213 |
+
salt = want_bytes(salt)
|
| 214 |
+
# if salt is None then the signer's default is used
|
| 215 |
+
|
| 216 |
+
self.salt = salt
|
| 217 |
+
|
| 218 |
+
if serializer is None:
|
| 219 |
+
serializer = self.default_serializer
|
| 220 |
+
|
| 221 |
+
self.serializer: _PDataSerializer[_TSerialized] = serializer
|
| 222 |
+
self.is_text_serializer: bool = is_text_serializer(serializer)
|
| 223 |
+
|
| 224 |
+
if signer is None:
|
| 225 |
+
signer = self.default_signer
|
| 226 |
+
|
| 227 |
+
self.signer: type[Signer] = signer
|
| 228 |
+
self.signer_kwargs: dict[str, t.Any] = signer_kwargs or {}
|
| 229 |
+
|
| 230 |
+
if fallback_signers is None:
|
| 231 |
+
fallback_signers = list(self.default_fallback_signers)
|
| 232 |
+
|
| 233 |
+
self.fallback_signers: list[
|
| 234 |
+
dict[str, t.Any] | tuple[type[Signer], dict[str, t.Any]] | type[Signer]
|
| 235 |
+
] = fallback_signers
|
| 236 |
+
self.serializer_kwargs: dict[str, t.Any] = serializer_kwargs or {}
|
| 237 |
+
|
| 238 |
+
@property
|
| 239 |
+
def secret_key(self) -> bytes:
|
| 240 |
+
"""The newest (last) entry in the :attr:`secret_keys` list. This
|
| 241 |
+
is for compatibility from before key rotation support was added.
|
| 242 |
+
"""
|
| 243 |
+
return self.secret_keys[-1]
|
| 244 |
+
|
| 245 |
+
def load_payload(
|
| 246 |
+
self, payload: bytes, serializer: _PDataSerializer[t.Any] | None = None
|
| 247 |
+
) -> t.Any:
|
| 248 |
+
"""Loads the encoded object. This function raises
|
| 249 |
+
:class:`.BadPayload` if the payload is not valid. The
|
| 250 |
+
``serializer`` parameter can be used to override the serializer
|
| 251 |
+
stored on the class. The encoded ``payload`` should always be
|
| 252 |
+
bytes.
|
| 253 |
+
"""
|
| 254 |
+
if serializer is None:
|
| 255 |
+
use_serializer = self.serializer
|
| 256 |
+
is_text = self.is_text_serializer
|
| 257 |
+
else:
|
| 258 |
+
use_serializer = serializer
|
| 259 |
+
is_text = is_text_serializer(serializer)
|
| 260 |
+
|
| 261 |
+
try:
|
| 262 |
+
if is_text:
|
| 263 |
+
return use_serializer.loads(payload.decode("utf-8")) # type: ignore[arg-type]
|
| 264 |
+
|
| 265 |
+
return use_serializer.loads(payload) # type: ignore[arg-type]
|
| 266 |
+
except Exception as e:
|
| 267 |
+
raise BadPayload(
|
| 268 |
+
"Could not load the payload because an exception"
|
| 269 |
+
" occurred on unserializing the data.",
|
| 270 |
+
original_error=e,
|
| 271 |
+
) from e
|
| 272 |
+
|
| 273 |
+
def dump_payload(self, obj: t.Any) -> bytes:
|
| 274 |
+
"""Dumps the encoded object. The return value is always bytes.
|
| 275 |
+
If the internal serializer returns text, the value will be
|
| 276 |
+
encoded as UTF-8.
|
| 277 |
+
"""
|
| 278 |
+
return want_bytes(self.serializer.dumps(obj, **self.serializer_kwargs))
|
| 279 |
+
|
| 280 |
+
def make_signer(self, salt: str | bytes | None = None) -> Signer:
|
| 281 |
+
"""Creates a new instance of the signer to be used. The default
|
| 282 |
+
implementation uses the :class:`.Signer` base class.
|
| 283 |
+
"""
|
| 284 |
+
if salt is None:
|
| 285 |
+
salt = self.salt
|
| 286 |
+
|
| 287 |
+
return self.signer(self.secret_keys, salt=salt, **self.signer_kwargs)
|
| 288 |
+
|
| 289 |
+
def iter_unsigners(self, salt: str | bytes | None = None) -> cabc.Iterator[Signer]:
|
| 290 |
+
"""Iterates over all signers to be tried for unsigning. Starts
|
| 291 |
+
with the configured signer, then constructs each signer
|
| 292 |
+
specified in ``fallback_signers``.
|
| 293 |
+
"""
|
| 294 |
+
if salt is None:
|
| 295 |
+
salt = self.salt
|
| 296 |
+
|
| 297 |
+
yield self.make_signer(salt)
|
| 298 |
+
|
| 299 |
+
for fallback in self.fallback_signers:
|
| 300 |
+
if isinstance(fallback, dict):
|
| 301 |
+
kwargs = fallback
|
| 302 |
+
fallback = self.signer
|
| 303 |
+
elif isinstance(fallback, tuple):
|
| 304 |
+
fallback, kwargs = fallback
|
| 305 |
+
else:
|
| 306 |
+
kwargs = self.signer_kwargs
|
| 307 |
+
|
| 308 |
+
for secret_key in self.secret_keys:
|
| 309 |
+
yield fallback(secret_key, salt=salt, **kwargs)
|
| 310 |
+
|
| 311 |
+
def dumps(self, obj: t.Any, salt: str | bytes | None = None) -> _TSerialized:
|
| 312 |
+
"""Returns a signed string serialized with the internal
|
| 313 |
+
serializer. The return value can be either a byte or unicode
|
| 314 |
+
string depending on the format of the internal serializer.
|
| 315 |
+
"""
|
| 316 |
+
payload = want_bytes(self.dump_payload(obj))
|
| 317 |
+
rv = self.make_signer(salt).sign(payload)
|
| 318 |
+
|
| 319 |
+
if self.is_text_serializer:
|
| 320 |
+
return rv.decode("utf-8") # type: ignore[return-value]
|
| 321 |
+
|
| 322 |
+
return rv # type: ignore[return-value]
|
| 323 |
+
|
| 324 |
+
def dump(self, obj: t.Any, f: t.IO[t.Any], salt: str | bytes | None = None) -> None:
|
| 325 |
+
"""Like :meth:`dumps` but dumps into a file. The file handle has
|
| 326 |
+
to be compatible with what the internal serializer expects.
|
| 327 |
+
"""
|
| 328 |
+
f.write(self.dumps(obj, salt))
|
| 329 |
+
|
| 330 |
+
def loads(
|
| 331 |
+
self, s: str | bytes, salt: str | bytes | None = None, **kwargs: t.Any
|
| 332 |
+
) -> t.Any:
|
| 333 |
+
"""Reverse of :meth:`dumps`. Raises :exc:`.BadSignature` if the
|
| 334 |
+
signature validation fails.
|
| 335 |
+
"""
|
| 336 |
+
s = want_bytes(s)
|
| 337 |
+
last_exception = None
|
| 338 |
+
|
| 339 |
+
for signer in self.iter_unsigners(salt):
|
| 340 |
+
try:
|
| 341 |
+
return self.load_payload(signer.unsign(s))
|
| 342 |
+
except BadSignature as err:
|
| 343 |
+
last_exception = err
|
| 344 |
+
|
| 345 |
+
raise t.cast(BadSignature, last_exception)
|
| 346 |
+
|
| 347 |
+
def load(self, f: t.IO[t.Any], salt: str | bytes | None = None) -> t.Any:
|
| 348 |
+
"""Like :meth:`loads` but loads from a file."""
|
| 349 |
+
return self.loads(f.read(), salt)
|
| 350 |
+
|
| 351 |
+
def loads_unsafe(
|
| 352 |
+
self, s: str | bytes, salt: str | bytes | None = None
|
| 353 |
+
) -> tuple[bool, t.Any]:
|
| 354 |
+
"""Like :meth:`loads` but without verifying the signature. This
|
| 355 |
+
is potentially very dangerous to use depending on how your
|
| 356 |
+
serializer works. The return value is ``(signature_valid,
|
| 357 |
+
payload)`` instead of just the payload. The first item will be a
|
| 358 |
+
boolean that indicates if the signature is valid. This function
|
| 359 |
+
never fails.
|
| 360 |
+
|
| 361 |
+
Use it for debugging only and if you know that your serializer
|
| 362 |
+
module is not exploitable (for example, do not use it with a
|
| 363 |
+
pickle serializer).
|
| 364 |
+
|
| 365 |
+
.. versionadded:: 0.15
|
| 366 |
+
"""
|
| 367 |
+
return self._loads_unsafe_impl(s, salt)
|
| 368 |
+
|
| 369 |
+
def _loads_unsafe_impl(
|
| 370 |
+
self,
|
| 371 |
+
s: str | bytes,
|
| 372 |
+
salt: str | bytes | None,
|
| 373 |
+
load_kwargs: dict[str, t.Any] | None = None,
|
| 374 |
+
load_payload_kwargs: dict[str, t.Any] | None = None,
|
| 375 |
+
) -> tuple[bool, t.Any]:
|
| 376 |
+
"""Low level helper function to implement :meth:`loads_unsafe`
|
| 377 |
+
in serializer subclasses.
|
| 378 |
+
"""
|
| 379 |
+
if load_kwargs is None:
|
| 380 |
+
load_kwargs = {}
|
| 381 |
+
|
| 382 |
+
try:
|
| 383 |
+
return True, self.loads(s, salt=salt, **load_kwargs)
|
| 384 |
+
except BadSignature as e:
|
| 385 |
+
if e.payload is None:
|
| 386 |
+
return False, None
|
| 387 |
+
|
| 388 |
+
if load_payload_kwargs is None:
|
| 389 |
+
load_payload_kwargs = {}
|
| 390 |
+
|
| 391 |
+
try:
|
| 392 |
+
return (
|
| 393 |
+
False,
|
| 394 |
+
self.load_payload(e.payload, **load_payload_kwargs),
|
| 395 |
+
)
|
| 396 |
+
except BadPayload:
|
| 397 |
+
return False, None
|
| 398 |
+
|
| 399 |
+
def load_unsafe(
|
| 400 |
+
self, f: t.IO[t.Any], salt: str | bytes | None = None
|
| 401 |
+
) -> tuple[bool, t.Any]:
|
| 402 |
+
"""Like :meth:`loads_unsafe` but loads from a file.
|
| 403 |
+
|
| 404 |
+
.. versionadded:: 0.15
|
| 405 |
+
"""
|
| 406 |
+
return self.loads_unsafe(f.read(), salt=salt)
|
lib/python3.12/site-packages/itsdangerous/signer.py
ADDED
|
@@ -0,0 +1,266 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
|
| 3 |
+
import collections.abc as cabc
|
| 4 |
+
import hashlib
|
| 5 |
+
import hmac
|
| 6 |
+
import typing as t
|
| 7 |
+
|
| 8 |
+
from .encoding import _base64_alphabet
|
| 9 |
+
from .encoding import base64_decode
|
| 10 |
+
from .encoding import base64_encode
|
| 11 |
+
from .encoding import want_bytes
|
| 12 |
+
from .exc import BadSignature
|
| 13 |
+
|
| 14 |
+
|
| 15 |
+
class SigningAlgorithm:
|
| 16 |
+
"""Subclasses must implement :meth:`get_signature` to provide
|
| 17 |
+
signature generation functionality.
|
| 18 |
+
"""
|
| 19 |
+
|
| 20 |
+
def get_signature(self, key: bytes, value: bytes) -> bytes:
|
| 21 |
+
"""Returns the signature for the given key and value."""
|
| 22 |
+
raise NotImplementedError()
|
| 23 |
+
|
| 24 |
+
def verify_signature(self, key: bytes, value: bytes, sig: bytes) -> bool:
|
| 25 |
+
"""Verifies the given signature matches the expected
|
| 26 |
+
signature.
|
| 27 |
+
"""
|
| 28 |
+
return hmac.compare_digest(sig, self.get_signature(key, value))
|
| 29 |
+
|
| 30 |
+
|
| 31 |
+
class NoneAlgorithm(SigningAlgorithm):
|
| 32 |
+
"""Provides an algorithm that does not perform any signing and
|
| 33 |
+
returns an empty signature.
|
| 34 |
+
"""
|
| 35 |
+
|
| 36 |
+
def get_signature(self, key: bytes, value: bytes) -> bytes:
|
| 37 |
+
return b""
|
| 38 |
+
|
| 39 |
+
|
| 40 |
+
def _lazy_sha1(string: bytes = b"") -> t.Any:
|
| 41 |
+
"""Don't access ``hashlib.sha1`` until runtime. FIPS builds may not include
|
| 42 |
+
SHA-1, in which case the import and use as a default would fail before the
|
| 43 |
+
developer can configure something else.
|
| 44 |
+
"""
|
| 45 |
+
return hashlib.sha1(string)
|
| 46 |
+
|
| 47 |
+
|
| 48 |
+
class HMACAlgorithm(SigningAlgorithm):
|
| 49 |
+
"""Provides signature generation using HMACs."""
|
| 50 |
+
|
| 51 |
+
#: The digest method to use with the MAC algorithm. This defaults to
|
| 52 |
+
#: SHA1, but can be changed to any other function in the hashlib
|
| 53 |
+
#: module.
|
| 54 |
+
default_digest_method: t.Any = staticmethod(_lazy_sha1)
|
| 55 |
+
|
| 56 |
+
def __init__(self, digest_method: t.Any = None):
|
| 57 |
+
if digest_method is None:
|
| 58 |
+
digest_method = self.default_digest_method
|
| 59 |
+
|
| 60 |
+
self.digest_method: t.Any = digest_method
|
| 61 |
+
|
| 62 |
+
def get_signature(self, key: bytes, value: bytes) -> bytes:
|
| 63 |
+
mac = hmac.new(key, msg=value, digestmod=self.digest_method)
|
| 64 |
+
return mac.digest()
|
| 65 |
+
|
| 66 |
+
|
| 67 |
+
def _make_keys_list(
|
| 68 |
+
secret_key: str | bytes | cabc.Iterable[str] | cabc.Iterable[bytes],
|
| 69 |
+
) -> list[bytes]:
|
| 70 |
+
if isinstance(secret_key, (str, bytes)):
|
| 71 |
+
return [want_bytes(secret_key)]
|
| 72 |
+
|
| 73 |
+
return [want_bytes(s) for s in secret_key] # pyright: ignore
|
| 74 |
+
|
| 75 |
+
|
| 76 |
+
class Signer:
|
| 77 |
+
"""A signer securely signs bytes, then unsigns them to verify that
|
| 78 |
+
the value hasn't been changed.
|
| 79 |
+
|
| 80 |
+
The secret key should be a random string of ``bytes`` and should not
|
| 81 |
+
be saved to code or version control. Different salts should be used
|
| 82 |
+
to distinguish signing in different contexts. See :doc:`/concepts`
|
| 83 |
+
for information about the security of the secret key and salt.
|
| 84 |
+
|
| 85 |
+
:param secret_key: The secret key to sign and verify with. Can be a
|
| 86 |
+
list of keys, oldest to newest, to support key rotation.
|
| 87 |
+
:param salt: Extra key to combine with ``secret_key`` to distinguish
|
| 88 |
+
signatures in different contexts.
|
| 89 |
+
:param sep: Separator between the signature and value.
|
| 90 |
+
:param key_derivation: How to derive the signing key from the secret
|
| 91 |
+
key and salt. Possible values are ``concat``, ``django-concat``,
|
| 92 |
+
or ``hmac``. Defaults to :attr:`default_key_derivation`, which
|
| 93 |
+
defaults to ``django-concat``.
|
| 94 |
+
:param digest_method: Hash function to use when generating the HMAC
|
| 95 |
+
signature. Defaults to :attr:`default_digest_method`, which
|
| 96 |
+
defaults to :func:`hashlib.sha1`. Note that the security of the
|
| 97 |
+
hash alone doesn't apply when used intermediately in HMAC.
|
| 98 |
+
:param algorithm: A :class:`SigningAlgorithm` instance to use
|
| 99 |
+
instead of building a default :class:`HMACAlgorithm` with the
|
| 100 |
+
``digest_method``.
|
| 101 |
+
|
| 102 |
+
.. versionchanged:: 2.0
|
| 103 |
+
Added support for key rotation by passing a list to
|
| 104 |
+
``secret_key``.
|
| 105 |
+
|
| 106 |
+
.. versionchanged:: 0.18
|
| 107 |
+
``algorithm`` was added as an argument to the class constructor.
|
| 108 |
+
|
| 109 |
+
.. versionchanged:: 0.14
|
| 110 |
+
``key_derivation`` and ``digest_method`` were added as arguments
|
| 111 |
+
to the class constructor.
|
| 112 |
+
"""
|
| 113 |
+
|
| 114 |
+
#: The default digest method to use for the signer. The default is
|
| 115 |
+
#: :func:`hashlib.sha1`, but can be changed to any :mod:`hashlib` or
|
| 116 |
+
#: compatible object. Note that the security of the hash alone
|
| 117 |
+
#: doesn't apply when used intermediately in HMAC.
|
| 118 |
+
#:
|
| 119 |
+
#: .. versionadded:: 0.14
|
| 120 |
+
default_digest_method: t.Any = staticmethod(_lazy_sha1)
|
| 121 |
+
|
| 122 |
+
#: The default scheme to use to derive the signing key from the
|
| 123 |
+
#: secret key and salt. The default is ``django-concat``. Possible
|
| 124 |
+
#: values are ``concat``, ``django-concat``, and ``hmac``.
|
| 125 |
+
#:
|
| 126 |
+
#: .. versionadded:: 0.14
|
| 127 |
+
default_key_derivation: str = "django-concat"
|
| 128 |
+
|
| 129 |
+
def __init__(
|
| 130 |
+
self,
|
| 131 |
+
secret_key: str | bytes | cabc.Iterable[str] | cabc.Iterable[bytes],
|
| 132 |
+
salt: str | bytes | None = b"itsdangerous.Signer",
|
| 133 |
+
sep: str | bytes = b".",
|
| 134 |
+
key_derivation: str | None = None,
|
| 135 |
+
digest_method: t.Any | None = None,
|
| 136 |
+
algorithm: SigningAlgorithm | None = None,
|
| 137 |
+
):
|
| 138 |
+
#: The list of secret keys to try for verifying signatures, from
|
| 139 |
+
#: oldest to newest. The newest (last) key is used for signing.
|
| 140 |
+
#:
|
| 141 |
+
#: This allows a key rotation system to keep a list of allowed
|
| 142 |
+
#: keys and remove expired ones.
|
| 143 |
+
self.secret_keys: list[bytes] = _make_keys_list(secret_key)
|
| 144 |
+
self.sep: bytes = want_bytes(sep)
|
| 145 |
+
|
| 146 |
+
if self.sep in _base64_alphabet:
|
| 147 |
+
raise ValueError(
|
| 148 |
+
"The given separator cannot be used because it may be"
|
| 149 |
+
" contained in the signature itself. ASCII letters,"
|
| 150 |
+
" digits, and '-_=' must not be used."
|
| 151 |
+
)
|
| 152 |
+
|
| 153 |
+
if salt is not None:
|
| 154 |
+
salt = want_bytes(salt)
|
| 155 |
+
else:
|
| 156 |
+
salt = b"itsdangerous.Signer"
|
| 157 |
+
|
| 158 |
+
self.salt = salt
|
| 159 |
+
|
| 160 |
+
if key_derivation is None:
|
| 161 |
+
key_derivation = self.default_key_derivation
|
| 162 |
+
|
| 163 |
+
self.key_derivation: str = key_derivation
|
| 164 |
+
|
| 165 |
+
if digest_method is None:
|
| 166 |
+
digest_method = self.default_digest_method
|
| 167 |
+
|
| 168 |
+
self.digest_method: t.Any = digest_method
|
| 169 |
+
|
| 170 |
+
if algorithm is None:
|
| 171 |
+
algorithm = HMACAlgorithm(self.digest_method)
|
| 172 |
+
|
| 173 |
+
self.algorithm: SigningAlgorithm = algorithm
|
| 174 |
+
|
| 175 |
+
@property
|
| 176 |
+
def secret_key(self) -> bytes:
|
| 177 |
+
"""The newest (last) entry in the :attr:`secret_keys` list. This
|
| 178 |
+
is for compatibility from before key rotation support was added.
|
| 179 |
+
"""
|
| 180 |
+
return self.secret_keys[-1]
|
| 181 |
+
|
| 182 |
+
def derive_key(self, secret_key: str | bytes | None = None) -> bytes:
|
| 183 |
+
"""This method is called to derive the key. The default key
|
| 184 |
+
derivation choices can be overridden here. Key derivation is not
|
| 185 |
+
intended to be used as a security method to make a complex key
|
| 186 |
+
out of a short password. Instead you should use large random
|
| 187 |
+
secret keys.
|
| 188 |
+
|
| 189 |
+
:param secret_key: A specific secret key to derive from.
|
| 190 |
+
Defaults to the last item in :attr:`secret_keys`.
|
| 191 |
+
|
| 192 |
+
.. versionchanged:: 2.0
|
| 193 |
+
Added the ``secret_key`` parameter.
|
| 194 |
+
"""
|
| 195 |
+
if secret_key is None:
|
| 196 |
+
secret_key = self.secret_keys[-1]
|
| 197 |
+
else:
|
| 198 |
+
secret_key = want_bytes(secret_key)
|
| 199 |
+
|
| 200 |
+
if self.key_derivation == "concat":
|
| 201 |
+
return t.cast(bytes, self.digest_method(self.salt + secret_key).digest())
|
| 202 |
+
elif self.key_derivation == "django-concat":
|
| 203 |
+
return t.cast(
|
| 204 |
+
bytes, self.digest_method(self.salt + b"signer" + secret_key).digest()
|
| 205 |
+
)
|
| 206 |
+
elif self.key_derivation == "hmac":
|
| 207 |
+
mac = hmac.new(secret_key, digestmod=self.digest_method)
|
| 208 |
+
mac.update(self.salt)
|
| 209 |
+
return mac.digest()
|
| 210 |
+
elif self.key_derivation == "none":
|
| 211 |
+
return secret_key
|
| 212 |
+
else:
|
| 213 |
+
raise TypeError("Unknown key derivation method")
|
| 214 |
+
|
| 215 |
+
def get_signature(self, value: str | bytes) -> bytes:
|
| 216 |
+
"""Returns the signature for the given value."""
|
| 217 |
+
value = want_bytes(value)
|
| 218 |
+
key = self.derive_key()
|
| 219 |
+
sig = self.algorithm.get_signature(key, value)
|
| 220 |
+
return base64_encode(sig)
|
| 221 |
+
|
| 222 |
+
def sign(self, value: str | bytes) -> bytes:
|
| 223 |
+
"""Signs the given string."""
|
| 224 |
+
value = want_bytes(value)
|
| 225 |
+
return value + self.sep + self.get_signature(value)
|
| 226 |
+
|
| 227 |
+
def verify_signature(self, value: str | bytes, sig: str | bytes) -> bool:
|
| 228 |
+
"""Verifies the signature for the given value."""
|
| 229 |
+
try:
|
| 230 |
+
sig = base64_decode(sig)
|
| 231 |
+
except Exception:
|
| 232 |
+
return False
|
| 233 |
+
|
| 234 |
+
value = want_bytes(value)
|
| 235 |
+
|
| 236 |
+
for secret_key in reversed(self.secret_keys):
|
| 237 |
+
key = self.derive_key(secret_key)
|
| 238 |
+
|
| 239 |
+
if self.algorithm.verify_signature(key, value, sig):
|
| 240 |
+
return True
|
| 241 |
+
|
| 242 |
+
return False
|
| 243 |
+
|
| 244 |
+
def unsign(self, signed_value: str | bytes) -> bytes:
|
| 245 |
+
"""Unsigns the given string."""
|
| 246 |
+
signed_value = want_bytes(signed_value)
|
| 247 |
+
|
| 248 |
+
if self.sep not in signed_value:
|
| 249 |
+
raise BadSignature(f"No {self.sep!r} found in value")
|
| 250 |
+
|
| 251 |
+
value, sig = signed_value.rsplit(self.sep, 1)
|
| 252 |
+
|
| 253 |
+
if self.verify_signature(value, sig):
|
| 254 |
+
return value
|
| 255 |
+
|
| 256 |
+
raise BadSignature(f"Signature {sig!r} does not match", payload=value)
|
| 257 |
+
|
| 258 |
+
def validate(self, signed_value: str | bytes) -> bool:
|
| 259 |
+
"""Only validates the given signed value. Returns ``True`` if
|
| 260 |
+
the signature exists and is valid.
|
| 261 |
+
"""
|
| 262 |
+
try:
|
| 263 |
+
self.unsign(signed_value)
|
| 264 |
+
return True
|
| 265 |
+
except BadSignature:
|
| 266 |
+
return False
|
lib/python3.12/site-packages/itsdangerous/timed.py
ADDED
|
@@ -0,0 +1,228 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
|
| 3 |
+
import collections.abc as cabc
|
| 4 |
+
import time
|
| 5 |
+
import typing as t
|
| 6 |
+
from datetime import datetime
|
| 7 |
+
from datetime import timezone
|
| 8 |
+
|
| 9 |
+
from .encoding import base64_decode
|
| 10 |
+
from .encoding import base64_encode
|
| 11 |
+
from .encoding import bytes_to_int
|
| 12 |
+
from .encoding import int_to_bytes
|
| 13 |
+
from .encoding import want_bytes
|
| 14 |
+
from .exc import BadSignature
|
| 15 |
+
from .exc import BadTimeSignature
|
| 16 |
+
from .exc import SignatureExpired
|
| 17 |
+
from .serializer import _TSerialized
|
| 18 |
+
from .serializer import Serializer
|
| 19 |
+
from .signer import Signer
|
| 20 |
+
|
| 21 |
+
|
| 22 |
+
class TimestampSigner(Signer):
|
| 23 |
+
"""Works like the regular :class:`.Signer` but also records the time
|
| 24 |
+
of the signing and can be used to expire signatures. The
|
| 25 |
+
:meth:`unsign` method can raise :exc:`.SignatureExpired` if the
|
| 26 |
+
unsigning failed because the signature is expired.
|
| 27 |
+
"""
|
| 28 |
+
|
| 29 |
+
def get_timestamp(self) -> int:
|
| 30 |
+
"""Returns the current timestamp. The function must return an
|
| 31 |
+
integer.
|
| 32 |
+
"""
|
| 33 |
+
return int(time.time())
|
| 34 |
+
|
| 35 |
+
def timestamp_to_datetime(self, ts: int) -> datetime:
|
| 36 |
+
"""Convert the timestamp from :meth:`get_timestamp` into an
|
| 37 |
+
aware :class`datetime.datetime` in UTC.
|
| 38 |
+
|
| 39 |
+
.. versionchanged:: 2.0
|
| 40 |
+
The timestamp is returned as a timezone-aware ``datetime``
|
| 41 |
+
in UTC rather than a naive ``datetime`` assumed to be UTC.
|
| 42 |
+
"""
|
| 43 |
+
return datetime.fromtimestamp(ts, tz=timezone.utc)
|
| 44 |
+
|
| 45 |
+
def sign(self, value: str | bytes) -> bytes:
|
| 46 |
+
"""Signs the given string and also attaches time information."""
|
| 47 |
+
value = want_bytes(value)
|
| 48 |
+
timestamp = base64_encode(int_to_bytes(self.get_timestamp()))
|
| 49 |
+
sep = want_bytes(self.sep)
|
| 50 |
+
value = value + sep + timestamp
|
| 51 |
+
return value + sep + self.get_signature(value)
|
| 52 |
+
|
| 53 |
+
# Ignore overlapping signatures check, return_timestamp is the only
|
| 54 |
+
# parameter that affects the return type.
|
| 55 |
+
|
| 56 |
+
@t.overload
|
| 57 |
+
def unsign( # type: ignore[overload-overlap]
|
| 58 |
+
self,
|
| 59 |
+
signed_value: str | bytes,
|
| 60 |
+
max_age: int | None = None,
|
| 61 |
+
return_timestamp: t.Literal[False] = False,
|
| 62 |
+
) -> bytes: ...
|
| 63 |
+
|
| 64 |
+
@t.overload
|
| 65 |
+
def unsign(
|
| 66 |
+
self,
|
| 67 |
+
signed_value: str | bytes,
|
| 68 |
+
max_age: int | None = None,
|
| 69 |
+
return_timestamp: t.Literal[True] = True,
|
| 70 |
+
) -> tuple[bytes, datetime]: ...
|
| 71 |
+
|
| 72 |
+
def unsign(
|
| 73 |
+
self,
|
| 74 |
+
signed_value: str | bytes,
|
| 75 |
+
max_age: int | None = None,
|
| 76 |
+
return_timestamp: bool = False,
|
| 77 |
+
) -> tuple[bytes, datetime] | bytes:
|
| 78 |
+
"""Works like the regular :meth:`.Signer.unsign` but can also
|
| 79 |
+
validate the time. See the base docstring of the class for
|
| 80 |
+
the general behavior. If ``return_timestamp`` is ``True`` the
|
| 81 |
+
timestamp of the signature will be returned as an aware
|
| 82 |
+
:class:`datetime.datetime` object in UTC.
|
| 83 |
+
|
| 84 |
+
.. versionchanged:: 2.0
|
| 85 |
+
The timestamp is returned as a timezone-aware ``datetime``
|
| 86 |
+
in UTC rather than a naive ``datetime`` assumed to be UTC.
|
| 87 |
+
"""
|
| 88 |
+
try:
|
| 89 |
+
result = super().unsign(signed_value)
|
| 90 |
+
sig_error = None
|
| 91 |
+
except BadSignature as e:
|
| 92 |
+
sig_error = e
|
| 93 |
+
result = e.payload or b""
|
| 94 |
+
|
| 95 |
+
sep = want_bytes(self.sep)
|
| 96 |
+
|
| 97 |
+
# If there is no timestamp in the result there is something
|
| 98 |
+
# seriously wrong. In case there was a signature error, we raise
|
| 99 |
+
# that one directly, otherwise we have a weird situation in
|
| 100 |
+
# which we shouldn't have come except someone uses a time-based
|
| 101 |
+
# serializer on non-timestamp data, so catch that.
|
| 102 |
+
if sep not in result:
|
| 103 |
+
if sig_error:
|
| 104 |
+
raise sig_error
|
| 105 |
+
|
| 106 |
+
raise BadTimeSignature("timestamp missing", payload=result)
|
| 107 |
+
|
| 108 |
+
value, ts_bytes = result.rsplit(sep, 1)
|
| 109 |
+
ts_int: int | None = None
|
| 110 |
+
ts_dt: datetime | None = None
|
| 111 |
+
|
| 112 |
+
try:
|
| 113 |
+
ts_int = bytes_to_int(base64_decode(ts_bytes))
|
| 114 |
+
except Exception:
|
| 115 |
+
pass
|
| 116 |
+
|
| 117 |
+
# Signature is *not* okay. Raise a proper error now that we have
|
| 118 |
+
# split the value and the timestamp.
|
| 119 |
+
if sig_error is not None:
|
| 120 |
+
if ts_int is not None:
|
| 121 |
+
try:
|
| 122 |
+
ts_dt = self.timestamp_to_datetime(ts_int)
|
| 123 |
+
except (ValueError, OSError, OverflowError) as exc:
|
| 124 |
+
# Windows raises OSError
|
| 125 |
+
# 32-bit raises OverflowError
|
| 126 |
+
raise BadTimeSignature(
|
| 127 |
+
"Malformed timestamp", payload=value
|
| 128 |
+
) from exc
|
| 129 |
+
|
| 130 |
+
raise BadTimeSignature(str(sig_error), payload=value, date_signed=ts_dt)
|
| 131 |
+
|
| 132 |
+
# Signature was okay but the timestamp is actually not there or
|
| 133 |
+
# malformed. Should not happen, but we handle it anyway.
|
| 134 |
+
if ts_int is None:
|
| 135 |
+
raise BadTimeSignature("Malformed timestamp", payload=value)
|
| 136 |
+
|
| 137 |
+
# Check timestamp is not older than max_age
|
| 138 |
+
if max_age is not None:
|
| 139 |
+
age = self.get_timestamp() - ts_int
|
| 140 |
+
|
| 141 |
+
if age > max_age:
|
| 142 |
+
raise SignatureExpired(
|
| 143 |
+
f"Signature age {age} > {max_age} seconds",
|
| 144 |
+
payload=value,
|
| 145 |
+
date_signed=self.timestamp_to_datetime(ts_int),
|
| 146 |
+
)
|
| 147 |
+
|
| 148 |
+
if age < 0:
|
| 149 |
+
raise SignatureExpired(
|
| 150 |
+
f"Signature age {age} < 0 seconds",
|
| 151 |
+
payload=value,
|
| 152 |
+
date_signed=self.timestamp_to_datetime(ts_int),
|
| 153 |
+
)
|
| 154 |
+
|
| 155 |
+
if return_timestamp:
|
| 156 |
+
return value, self.timestamp_to_datetime(ts_int)
|
| 157 |
+
|
| 158 |
+
return value
|
| 159 |
+
|
| 160 |
+
def validate(self, signed_value: str | bytes, max_age: int | None = None) -> bool:
|
| 161 |
+
"""Only validates the given signed value. Returns ``True`` if
|
| 162 |
+
the signature exists and is valid."""
|
| 163 |
+
try:
|
| 164 |
+
self.unsign(signed_value, max_age=max_age)
|
| 165 |
+
return True
|
| 166 |
+
except BadSignature:
|
| 167 |
+
return False
|
| 168 |
+
|
| 169 |
+
|
| 170 |
+
class TimedSerializer(Serializer[_TSerialized]):
|
| 171 |
+
"""Uses :class:`TimestampSigner` instead of the default
|
| 172 |
+
:class:`.Signer`.
|
| 173 |
+
"""
|
| 174 |
+
|
| 175 |
+
default_signer: type[TimestampSigner] = TimestampSigner
|
| 176 |
+
|
| 177 |
+
def iter_unsigners(
|
| 178 |
+
self, salt: str | bytes | None = None
|
| 179 |
+
) -> cabc.Iterator[TimestampSigner]:
|
| 180 |
+
return t.cast("cabc.Iterator[TimestampSigner]", super().iter_unsigners(salt))
|
| 181 |
+
|
| 182 |
+
# TODO: Signature is incompatible because parameters were added
|
| 183 |
+
# before salt.
|
| 184 |
+
|
| 185 |
+
def loads( # type: ignore[override]
|
| 186 |
+
self,
|
| 187 |
+
s: str | bytes,
|
| 188 |
+
max_age: int | None = None,
|
| 189 |
+
return_timestamp: bool = False,
|
| 190 |
+
salt: str | bytes | None = None,
|
| 191 |
+
) -> t.Any:
|
| 192 |
+
"""Reverse of :meth:`dumps`, raises :exc:`.BadSignature` if the
|
| 193 |
+
signature validation fails. If a ``max_age`` is provided it will
|
| 194 |
+
ensure the signature is not older than that time in seconds. In
|
| 195 |
+
case the signature is outdated, :exc:`.SignatureExpired` is
|
| 196 |
+
raised. All arguments are forwarded to the signer's
|
| 197 |
+
:meth:`~TimestampSigner.unsign` method.
|
| 198 |
+
"""
|
| 199 |
+
s = want_bytes(s)
|
| 200 |
+
last_exception = None
|
| 201 |
+
|
| 202 |
+
for signer in self.iter_unsigners(salt):
|
| 203 |
+
try:
|
| 204 |
+
base64d, timestamp = signer.unsign(
|
| 205 |
+
s, max_age=max_age, return_timestamp=True
|
| 206 |
+
)
|
| 207 |
+
payload = self.load_payload(base64d)
|
| 208 |
+
|
| 209 |
+
if return_timestamp:
|
| 210 |
+
return payload, timestamp
|
| 211 |
+
|
| 212 |
+
return payload
|
| 213 |
+
except SignatureExpired:
|
| 214 |
+
# The signature was unsigned successfully but was
|
| 215 |
+
# expired. Do not try the next signer.
|
| 216 |
+
raise
|
| 217 |
+
except BadSignature as err:
|
| 218 |
+
last_exception = err
|
| 219 |
+
|
| 220 |
+
raise t.cast(BadSignature, last_exception)
|
| 221 |
+
|
| 222 |
+
def loads_unsafe( # type: ignore[override]
|
| 223 |
+
self,
|
| 224 |
+
s: str | bytes,
|
| 225 |
+
max_age: int | None = None,
|
| 226 |
+
salt: str | bytes | None = None,
|
| 227 |
+
) -> tuple[bool, t.Any]:
|
| 228 |
+
return self._loads_unsafe_impl(s, salt, load_kwargs={"max_age": max_age})
|
lib/python3.12/site-packages/itsdangerous/url_safe.py
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
|
| 3 |
+
import typing as t
|
| 4 |
+
import zlib
|
| 5 |
+
|
| 6 |
+
from ._json import _CompactJSON
|
| 7 |
+
from .encoding import base64_decode
|
| 8 |
+
from .encoding import base64_encode
|
| 9 |
+
from .exc import BadPayload
|
| 10 |
+
from .serializer import _PDataSerializer
|
| 11 |
+
from .serializer import Serializer
|
| 12 |
+
from .timed import TimedSerializer
|
| 13 |
+
|
| 14 |
+
|
| 15 |
+
class URLSafeSerializerMixin(Serializer[str]):
|
| 16 |
+
"""Mixed in with a regular serializer it will attempt to zlib
|
| 17 |
+
compress the string to make it shorter if necessary. It will also
|
| 18 |
+
base64 encode the string so that it can safely be placed in a URL.
|
| 19 |
+
"""
|
| 20 |
+
|
| 21 |
+
default_serializer: _PDataSerializer[str] = _CompactJSON
|
| 22 |
+
|
| 23 |
+
def load_payload(
|
| 24 |
+
self,
|
| 25 |
+
payload: bytes,
|
| 26 |
+
*args: t.Any,
|
| 27 |
+
serializer: t.Any | None = None,
|
| 28 |
+
**kwargs: t.Any,
|
| 29 |
+
) -> t.Any:
|
| 30 |
+
decompress = False
|
| 31 |
+
|
| 32 |
+
if payload.startswith(b"."):
|
| 33 |
+
payload = payload[1:]
|
| 34 |
+
decompress = True
|
| 35 |
+
|
| 36 |
+
try:
|
| 37 |
+
json = base64_decode(payload)
|
| 38 |
+
except Exception as e:
|
| 39 |
+
raise BadPayload(
|
| 40 |
+
"Could not base64 decode the payload because of an exception",
|
| 41 |
+
original_error=e,
|
| 42 |
+
) from e
|
| 43 |
+
|
| 44 |
+
if decompress:
|
| 45 |
+
try:
|
| 46 |
+
json = zlib.decompress(json)
|
| 47 |
+
except Exception as e:
|
| 48 |
+
raise BadPayload(
|
| 49 |
+
"Could not zlib decompress the payload before decoding the payload",
|
| 50 |
+
original_error=e,
|
| 51 |
+
) from e
|
| 52 |
+
|
| 53 |
+
return super().load_payload(json, *args, **kwargs)
|
| 54 |
+
|
| 55 |
+
def dump_payload(self, obj: t.Any) -> bytes:
|
| 56 |
+
json = super().dump_payload(obj)
|
| 57 |
+
is_compressed = False
|
| 58 |
+
compressed = zlib.compress(json)
|
| 59 |
+
|
| 60 |
+
if len(compressed) < (len(json) - 1):
|
| 61 |
+
json = compressed
|
| 62 |
+
is_compressed = True
|
| 63 |
+
|
| 64 |
+
base64d = base64_encode(json)
|
| 65 |
+
|
| 66 |
+
if is_compressed:
|
| 67 |
+
base64d = b"." + base64d
|
| 68 |
+
|
| 69 |
+
return base64d
|
| 70 |
+
|
| 71 |
+
|
| 72 |
+
class URLSafeSerializer(URLSafeSerializerMixin, Serializer[str]):
|
| 73 |
+
"""Works like :class:`.Serializer` but dumps and loads into a URL
|
| 74 |
+
safe string consisting of the upper and lowercase character of the
|
| 75 |
+
alphabet as well as ``'_'``, ``'-'`` and ``'.'``.
|
| 76 |
+
"""
|
| 77 |
+
|
| 78 |
+
|
| 79 |
+
class URLSafeTimedSerializer(URLSafeSerializerMixin, TimedSerializer[str]):
|
| 80 |
+
"""Works like :class:`.TimedSerializer` but dumps and loads into a
|
| 81 |
+
URL safe string consisting of the upper and lowercase character of
|
| 82 |
+
the alphabet as well as ``'_'``, ``'-'`` and ``'.'``.
|
| 83 |
+
"""
|
lib/python3.12/site-packages/ninja/__init__.py
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
|
| 3 |
+
import os
|
| 4 |
+
import subprocess
|
| 5 |
+
import sys
|
| 6 |
+
import sysconfig
|
| 7 |
+
from collections.abc import Iterable
|
| 8 |
+
from typing import NoReturn
|
| 9 |
+
|
| 10 |
+
from ._version import version as __version__
|
| 11 |
+
from .ninja_syntax import Writer, escape, expand
|
| 12 |
+
|
| 13 |
+
__all__ = ["BIN_DIR", "DATA", "Writer", "__version__", "escape", "expand", "ninja"]
|
| 14 |
+
|
| 15 |
+
|
| 16 |
+
def __dir__() -> list[str]:
|
| 17 |
+
return __all__
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
def _get_ninja_dir() -> str:
|
| 21 |
+
ninja_exe = "ninja" + sysconfig.get_config_var("EXE")
|
| 22 |
+
|
| 23 |
+
# Default path
|
| 24 |
+
path = os.path.join(sysconfig.get_path("scripts"), ninja_exe)
|
| 25 |
+
if os.path.isfile(path):
|
| 26 |
+
return os.path.dirname(path)
|
| 27 |
+
|
| 28 |
+
# User path
|
| 29 |
+
if sys.version_info >= (3, 10):
|
| 30 |
+
user_scheme = sysconfig.get_preferred_scheme("user")
|
| 31 |
+
elif os.name == "nt":
|
| 32 |
+
user_scheme = "nt_user"
|
| 33 |
+
elif sys.platform.startswith("darwin") and getattr(sys, "_framework", None):
|
| 34 |
+
user_scheme = "osx_framework_user"
|
| 35 |
+
else:
|
| 36 |
+
user_scheme = "posix_user"
|
| 37 |
+
|
| 38 |
+
path = sysconfig.get_path("scripts", scheme=user_scheme)
|
| 39 |
+
|
| 40 |
+
if os.path.isfile(os.path.join(path, ninja_exe)):
|
| 41 |
+
return path
|
| 42 |
+
|
| 43 |
+
# Fallback to python location
|
| 44 |
+
path = os.path.dirname(sys.executable)
|
| 45 |
+
if os.path.isfile(os.path.join(path, ninja_exe)):
|
| 46 |
+
return path
|
| 47 |
+
|
| 48 |
+
return ""
|
| 49 |
+
|
| 50 |
+
|
| 51 |
+
BIN_DIR = _get_ninja_dir()
|
| 52 |
+
|
| 53 |
+
|
| 54 |
+
def _program(name: str, args: Iterable[str]) -> int:
|
| 55 |
+
cmd = os.path.join(BIN_DIR, name)
|
| 56 |
+
return subprocess.call([cmd, *args], close_fds=False)
|
| 57 |
+
|
| 58 |
+
|
| 59 |
+
def ninja() -> NoReturn:
|
| 60 |
+
raise SystemExit(_program('ninja', sys.argv[1:]))
|
lib/python3.12/site-packages/ninja/__main__.py
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
|
| 3 |
+
from ninja import ninja
|
| 4 |
+
|
| 5 |
+
if __name__ == '__main__':
|
| 6 |
+
ninja()
|
lib/python3.12/site-packages/ninja/__pycache__/__init__.cpython-312.pyc
ADDED
|
Binary file (2.99 kB). View file
|
|
|
lib/python3.12/site-packages/ninja/__pycache__/__main__.cpython-312.pyc
ADDED
|
Binary file (326 Bytes). View file
|
|
|
lib/python3.12/site-packages/ninja/__pycache__/_version.cpython-312.pyc
ADDED
|
Binary file (207 Bytes). View file
|
|
|
lib/python3.12/site-packages/ninja/__pycache__/ninja_syntax.cpython-312.pyc
ADDED
|
Binary file (10.9 kB). View file
|
|
|
lib/python3.12/site-packages/ninja/_version.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
version = "1.13.0"
|
lib/python3.12/site-packages/ninja/_version.pyi
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
|
| 3 |
+
version: str
|
| 4 |
+
version_tuple: tuple[int, int, int] | tuple[int, int, int, str, str]
|
lib/python3.12/site-packages/ninja/ninja_syntax.py
ADDED
|
@@ -0,0 +1,231 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/python
|
| 2 |
+
|
| 3 |
+
# Copyright 2011 Google Inc. All Rights Reserved.
|
| 4 |
+
#
|
| 5 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 6 |
+
# you may not use this file except in compliance with the License.
|
| 7 |
+
# You may obtain a copy of the License at
|
| 8 |
+
#
|
| 9 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 10 |
+
#
|
| 11 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 12 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 13 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 14 |
+
# See the License for the specific language governing permissions and
|
| 15 |
+
# limitations under the License.
|
| 16 |
+
|
| 17 |
+
"""Python module for generating .ninja files.
|
| 18 |
+
|
| 19 |
+
Note that this is emphatically not a required piece of Ninja; it's
|
| 20 |
+
just a helpful utility for build-file-generation systems that already
|
| 21 |
+
use Python.
|
| 22 |
+
"""
|
| 23 |
+
|
| 24 |
+
import re
|
| 25 |
+
import textwrap
|
| 26 |
+
from io import TextIOWrapper
|
| 27 |
+
from typing import Dict, List, Match, Optional, Tuple, Union
|
| 28 |
+
|
| 29 |
+
def escape_path(word: str) -> str:
|
| 30 |
+
return word.replace('$ ', '$$ ').replace(' ', '$ ').replace(':', '$:')
|
| 31 |
+
|
| 32 |
+
class Writer(object):
|
| 33 |
+
def __init__(self, output: TextIOWrapper, width: int = 78) -> None:
|
| 34 |
+
self.output = output
|
| 35 |
+
self.width = width
|
| 36 |
+
|
| 37 |
+
def newline(self) -> None:
|
| 38 |
+
self.output.write('\n')
|
| 39 |
+
|
| 40 |
+
def comment(self, text: str) -> None:
|
| 41 |
+
for line in textwrap.wrap(text, self.width - 2, break_long_words=False,
|
| 42 |
+
break_on_hyphens=False):
|
| 43 |
+
self.output.write('# ' + line + '\n')
|
| 44 |
+
|
| 45 |
+
def variable(
|
| 46 |
+
self,
|
| 47 |
+
key: str,
|
| 48 |
+
value: Optional[Union[bool, int, float, str, List[str]]],
|
| 49 |
+
indent: int = 0,
|
| 50 |
+
) -> None:
|
| 51 |
+
if value is None:
|
| 52 |
+
return
|
| 53 |
+
if isinstance(value, list):
|
| 54 |
+
value = ' '.join(filter(None, value)) # Filter out empty strings.
|
| 55 |
+
self._line('%s = %s' % (key, value), indent)
|
| 56 |
+
|
| 57 |
+
def pool(self, name: str, depth: int) -> None:
|
| 58 |
+
self._line('pool %s' % name)
|
| 59 |
+
self.variable('depth', depth, indent=1)
|
| 60 |
+
|
| 61 |
+
def rule(
|
| 62 |
+
self,
|
| 63 |
+
name: str,
|
| 64 |
+
command: str,
|
| 65 |
+
description: Optional[str] = None,
|
| 66 |
+
depfile: Optional[str] = None,
|
| 67 |
+
generator: bool = False,
|
| 68 |
+
pool: Optional[str] = None,
|
| 69 |
+
restat: bool = False,
|
| 70 |
+
rspfile: Optional[str] = None,
|
| 71 |
+
rspfile_content: Optional[str] = None,
|
| 72 |
+
deps: Optional[Union[str, List[str]]] = None,
|
| 73 |
+
) -> None:
|
| 74 |
+
self._line('rule %s' % name)
|
| 75 |
+
self.variable('command', command, indent=1)
|
| 76 |
+
if description:
|
| 77 |
+
self.variable('description', description, indent=1)
|
| 78 |
+
if depfile:
|
| 79 |
+
self.variable('depfile', depfile, indent=1)
|
| 80 |
+
if generator:
|
| 81 |
+
self.variable('generator', '1', indent=1)
|
| 82 |
+
if pool:
|
| 83 |
+
self.variable('pool', pool, indent=1)
|
| 84 |
+
if restat:
|
| 85 |
+
self.variable('restat', '1', indent=1)
|
| 86 |
+
if rspfile:
|
| 87 |
+
self.variable('rspfile', rspfile, indent=1)
|
| 88 |
+
if rspfile_content:
|
| 89 |
+
self.variable('rspfile_content', rspfile_content, indent=1)
|
| 90 |
+
if deps:
|
| 91 |
+
self.variable('deps', deps, indent=1)
|
| 92 |
+
|
| 93 |
+
def build(
|
| 94 |
+
self,
|
| 95 |
+
outputs: Union[str, List[str]],
|
| 96 |
+
rule: str,
|
| 97 |
+
inputs: Optional[Union[str, List[str]]] = None,
|
| 98 |
+
implicit: Optional[Union[str, List[str]]] = None,
|
| 99 |
+
order_only: Optional[Union[str, List[str]]] = None,
|
| 100 |
+
variables: Optional[
|
| 101 |
+
Union[
|
| 102 |
+
List[Tuple[str, Optional[Union[str, List[str]]]]],
|
| 103 |
+
Dict[str, Optional[Union[str, List[str]]]],
|
| 104 |
+
]
|
| 105 |
+
] = None,
|
| 106 |
+
implicit_outputs: Optional[Union[str, List[str]]] = None,
|
| 107 |
+
pool: Optional[str] = None,
|
| 108 |
+
dyndep: Optional[str] = None,
|
| 109 |
+
) -> List[str]:
|
| 110 |
+
outputs = as_list(outputs)
|
| 111 |
+
out_outputs = [escape_path(x) for x in outputs]
|
| 112 |
+
all_inputs = [escape_path(x) for x in as_list(inputs)]
|
| 113 |
+
|
| 114 |
+
if implicit:
|
| 115 |
+
implicit = [escape_path(x) for x in as_list(implicit)]
|
| 116 |
+
all_inputs.append('|')
|
| 117 |
+
all_inputs.extend(implicit)
|
| 118 |
+
if order_only:
|
| 119 |
+
order_only = [escape_path(x) for x in as_list(order_only)]
|
| 120 |
+
all_inputs.append('||')
|
| 121 |
+
all_inputs.extend(order_only)
|
| 122 |
+
if implicit_outputs:
|
| 123 |
+
implicit_outputs = [escape_path(x)
|
| 124 |
+
for x in as_list(implicit_outputs)]
|
| 125 |
+
out_outputs.append('|')
|
| 126 |
+
out_outputs.extend(implicit_outputs)
|
| 127 |
+
|
| 128 |
+
self._line('build %s: %s' % (' '.join(out_outputs),
|
| 129 |
+
' '.join([rule] + all_inputs)))
|
| 130 |
+
if pool is not None:
|
| 131 |
+
self._line(' pool = %s' % pool)
|
| 132 |
+
if dyndep is not None:
|
| 133 |
+
self._line(' dyndep = %s' % dyndep)
|
| 134 |
+
|
| 135 |
+
if variables:
|
| 136 |
+
if isinstance(variables, dict):
|
| 137 |
+
iterator = iter(variables.items())
|
| 138 |
+
else:
|
| 139 |
+
iterator = iter(variables)
|
| 140 |
+
|
| 141 |
+
for key, val in iterator:
|
| 142 |
+
self.variable(key, val, indent=1)
|
| 143 |
+
|
| 144 |
+
return outputs
|
| 145 |
+
|
| 146 |
+
def include(self, path: str) -> None:
|
| 147 |
+
self._line('include %s' % path)
|
| 148 |
+
|
| 149 |
+
def subninja(self, path: str) -> None:
|
| 150 |
+
self._line('subninja %s' % path)
|
| 151 |
+
|
| 152 |
+
def default(self, paths: Union[str, List[str]]) -> None:
|
| 153 |
+
self._line('default %s' % ' '.join(as_list(paths)))
|
| 154 |
+
|
| 155 |
+
def _count_dollars_before_index(self, s: str, i: int) -> int:
|
| 156 |
+
"""Returns the number of '$' characters right in front of s[i]."""
|
| 157 |
+
dollar_count = 0
|
| 158 |
+
dollar_index = i - 1
|
| 159 |
+
while dollar_index > 0 and s[dollar_index] == '$':
|
| 160 |
+
dollar_count += 1
|
| 161 |
+
dollar_index -= 1
|
| 162 |
+
return dollar_count
|
| 163 |
+
|
| 164 |
+
def _line(self, text: str, indent: int = 0) -> None:
|
| 165 |
+
"""Write 'text' word-wrapped at self.width characters."""
|
| 166 |
+
leading_space = ' ' * indent
|
| 167 |
+
while len(leading_space) + len(text) > self.width:
|
| 168 |
+
# The text is too wide; wrap if possible.
|
| 169 |
+
|
| 170 |
+
# Find the rightmost space that would obey our width constraint and
|
| 171 |
+
# that's not an escaped space.
|
| 172 |
+
available_space = self.width - len(leading_space) - len(' $')
|
| 173 |
+
space = available_space
|
| 174 |
+
while True:
|
| 175 |
+
space = text.rfind(' ', 0, space)
|
| 176 |
+
if (space < 0 or
|
| 177 |
+
self._count_dollars_before_index(text, space) % 2 == 0):
|
| 178 |
+
break
|
| 179 |
+
|
| 180 |
+
if space < 0:
|
| 181 |
+
# No such space; just use the first unescaped space we can find.
|
| 182 |
+
space = available_space - 1
|
| 183 |
+
while True:
|
| 184 |
+
space = text.find(' ', space + 1)
|
| 185 |
+
if (space < 0 or
|
| 186 |
+
self._count_dollars_before_index(text, space) % 2 == 0):
|
| 187 |
+
break
|
| 188 |
+
if space < 0:
|
| 189 |
+
# Give up on breaking.
|
| 190 |
+
break
|
| 191 |
+
|
| 192 |
+
self.output.write(leading_space + text[0:space] + ' $\n')
|
| 193 |
+
text = text[space+1:]
|
| 194 |
+
|
| 195 |
+
# Subsequent lines are continuations, so indent them.
|
| 196 |
+
leading_space = ' ' * (indent+2)
|
| 197 |
+
|
| 198 |
+
self.output.write(leading_space + text + '\n')
|
| 199 |
+
|
| 200 |
+
def close(self) -> None:
|
| 201 |
+
self.output.close()
|
| 202 |
+
|
| 203 |
+
|
| 204 |
+
def as_list(input: Optional[Union[str, List[str]]]) -> List[str]:
|
| 205 |
+
if input is None:
|
| 206 |
+
return []
|
| 207 |
+
if isinstance(input, list):
|
| 208 |
+
return input
|
| 209 |
+
return [input]
|
| 210 |
+
|
| 211 |
+
|
| 212 |
+
def escape(string: str) -> str:
|
| 213 |
+
"""Escape a string such that it can be embedded into a Ninja file without
|
| 214 |
+
further interpretation."""
|
| 215 |
+
assert '\n' not in string, 'Ninja syntax does not allow newlines'
|
| 216 |
+
# We only have one special metacharacter: '$'.
|
| 217 |
+
return string.replace('$', '$$')
|
| 218 |
+
|
| 219 |
+
|
| 220 |
+
def expand(string: str, vars: Dict[str, str], local_vars: Dict[str, str] = {}) -> str:
|
| 221 |
+
"""Expand a string containing $vars as Ninja would.
|
| 222 |
+
|
| 223 |
+
Note: doesn't handle the full Ninja variable syntax, but it's enough
|
| 224 |
+
to make configure.py's use of it work.
|
| 225 |
+
"""
|
| 226 |
+
def exp(m: Match[str]) -> str:
|
| 227 |
+
var = m.group(1)
|
| 228 |
+
if var == '$':
|
| 229 |
+
return '$'
|
| 230 |
+
return local_vars.get(var, vars.get(var, ''))
|
| 231 |
+
return re.sub(r'\$(\$|\w*)', exp, string)
|
lib/python3.12/site-packages/ninja/ninja_syntax.pyi
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from collections.abc import Mapping, Sequence
|
| 2 |
+
from os import PathLike
|
| 3 |
+
|
| 4 |
+
def escape_path(word: str) -> str: ...
|
| 5 |
+
|
| 6 |
+
class Writer:
|
| 7 |
+
output: str
|
| 8 |
+
width: int
|
| 9 |
+
|
| 10 |
+
def __init__(self, output: str, width: int = ...): ...
|
| 11 |
+
def newline(self) -> None: ...
|
| 12 |
+
def comment(self, text: str) -> None: ...
|
| 13 |
+
def variable(self, key: str, value: list[str] | str, indent: int = ...) -> None: ...
|
| 14 |
+
def pool(self, name: str, depth: int) -> None: ...
|
| 15 |
+
def rule(self, name: str, command: str, description: str | None = None,
|
| 16 |
+
depfile: str | None = None, generator: bool = False,
|
| 17 |
+
pool: str | None = None, restat: bool = False,
|
| 18 |
+
rspfile: str | None = None, rspfile_content: str | None = None,
|
| 19 |
+
deps: str | None = None) -> None:
|
| 20 |
+
...
|
| 21 |
+
|
| 22 |
+
def build(self, outputs: list[str], rule: str, inputs: list[str] | None = None,
|
| 23 |
+
implicit: list[str] | None = None, order_only: list[str] | None = None,
|
| 24 |
+
variables: dict[str, str] | None = None,
|
| 25 |
+
implicit_outputs: list[str] | None = None,
|
| 26 |
+
pool: str | None = None, dyndep: str | None = None) -> None:
|
| 27 |
+
...
|
| 28 |
+
def include(self, path: str | PathLike[str]) -> None: ...
|
| 29 |
+
def subninja(self, path: str | PathLike[str]) -> None: ...
|
| 30 |
+
def default(self, paths: Sequence[str | PathLike[str]]) -> None: ...
|
| 31 |
+
def close(self) -> None: ...
|
| 32 |
+
|
| 33 |
+
def as_list(input: None | list[str] | str) -> list[str]: ...
|
| 34 |
+
|
| 35 |
+
def escape(string: str) -> str: ...
|
| 36 |
+
|
| 37 |
+
def expand(string: str, vars: Mapping[str, str], local_vars: Mapping[str, str]=...) -> str: ...
|
lib/python3.12/site-packages/ninja/py.typed
ADDED
|
File without changes
|
lib/python3.12/site-packages/nvidia/__pycache__/__init__.cpython-312.pyc
ADDED
|
Binary file (185 Bytes). View file
|
|
|
lib/python3.12/site-packages/nvidia/cuda_cupti/__init__.py
ADDED
|
File without changes
|
lib/python3.12/site-packages/nvidia/cuda_cupti/__pycache__/__init__.cpython-312.pyc
ADDED
|
Binary file (196 Bytes). View file
|
|
|
lib/python3.12/site-packages/nvidia/cuda_cupti/include/Openacc/cupti_openacc.h
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
* Copyright 2017 NVIDIA Corporation. All rights reserved.
|
| 3 |
+
*
|
| 4 |
+
* NOTICE TO LICENSEE:
|
| 5 |
+
*
|
| 6 |
+
* This source code and/or documentation ("Licensed Deliverables") are
|
| 7 |
+
* subject to NVIDIA intellectual property rights under U.S. and
|
| 8 |
+
* international Copyright laws.
|
| 9 |
+
*
|
| 10 |
+
* These Licensed Deliverables contained herein is PROPRIETARY and
|
| 11 |
+
* CONFIDENTIAL to NVIDIA and is being provided under the terms and
|
| 12 |
+
* conditions of a form of NVIDIA software license agreement by and
|
| 13 |
+
* between NVIDIA and Licensee ("License Agreement") or electronically
|
| 14 |
+
* accepted by Licensee. Notwithstanding any terms or conditions to
|
| 15 |
+
* the contrary in the License Agreement, reproduction or disclosure
|
| 16 |
+
* of the Licensed Deliverables to any third party without the express
|
| 17 |
+
* written consent of NVIDIA is prohibited.
|
| 18 |
+
*
|
| 19 |
+
* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
|
| 20 |
+
* LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
|
| 21 |
+
* SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. IT IS
|
| 22 |
+
* PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
|
| 23 |
+
* NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
|
| 24 |
+
* DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
|
| 25 |
+
* NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
|
| 26 |
+
* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
|
| 27 |
+
* LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
|
| 28 |
+
* SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
|
| 29 |
+
* DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
| 30 |
+
* WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
| 31 |
+
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
| 32 |
+
* OF THESE LICENSED DELIVERABLES.
|
| 33 |
+
*
|
| 34 |
+
* U.S. Government End Users. These Licensed Deliverables are a
|
| 35 |
+
* "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
|
| 36 |
+
* 1995), consisting of "commercial computer software" and "commercial
|
| 37 |
+
* computer software documentation" as such terms are used in 48
|
| 38 |
+
* C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
|
| 39 |
+
* only as a commercial end item. Consistent with 48 C.F.R.12.212 and
|
| 40 |
+
* 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
|
| 41 |
+
* U.S. Government End Users acquire the Licensed Deliverables with
|
| 42 |
+
* only those rights set forth herein.
|
| 43 |
+
*
|
| 44 |
+
* Any use of the Licensed Deliverables in individual and commercial
|
| 45 |
+
* software must include, in the user documentation and internal
|
| 46 |
+
* comments to the code, the above Disclaimer and U.S. Government End
|
| 47 |
+
* Users Notice.
|
| 48 |
+
*/
|
| 49 |
+
|
| 50 |
+
#include <cuda_stdint.h>
|
| 51 |
+
|
| 52 |
+
#if !defined(_CUPTI_OPENACC_H_)
|
| 53 |
+
#define _CUPTI_OPENACC_H_
|
| 54 |
+
|
| 55 |
+
#ifndef CUPTIAPI
|
| 56 |
+
#ifdef _WIN32
|
| 57 |
+
#define CUPTIAPI __stdcall
|
| 58 |
+
#else
|
| 59 |
+
#define CUPTIAPI
|
| 60 |
+
#endif
|
| 61 |
+
#endif
|
| 62 |
+
|
| 63 |
+
#if defined(__LP64__)
|
| 64 |
+
#define CUPTILP64 1
|
| 65 |
+
#elif defined(_WIN64)
|
| 66 |
+
#define CUPTILP64 1
|
| 67 |
+
#else
|
| 68 |
+
#undef CUPTILP64
|
| 69 |
+
#endif
|
| 70 |
+
|
| 71 |
+
#if defined(__cplusplus)
|
| 72 |
+
extern "C" {
|
| 73 |
+
#endif
|
| 74 |
+
|
| 75 |
+
#if defined(__GNUC__) && defined(CUPTI_LIB)
|
| 76 |
+
#pragma GCC visibility push(default)
|
| 77 |
+
#endif
|
| 78 |
+
|
| 79 |
+
/**
|
| 80 |
+
* \brief Initialize OpenACC support
|
| 81 |
+
*
|
| 82 |
+
* \param profRegister function of type acc_prof_reg as obtained from acc_register_library
|
| 83 |
+
* \param profUnregister function of type acc_prof_reg as obtained from acc_register_library
|
| 84 |
+
* \param profLookup function of type acc_prof_lookup as obtained from acc_register_library
|
| 85 |
+
*/
|
| 86 |
+
CUptiResult CUPTIAPI
|
| 87 |
+
cuptiOpenACCInitialize(void *profRegister, void *profUnregister, void *profLookup);
|
| 88 |
+
|
| 89 |
+
#if defined(__GNUC__) && defined(CUPTI_LIB)
|
| 90 |
+
#pragma GCC visibility pop
|
| 91 |
+
#endif
|
| 92 |
+
|
| 93 |
+
#if defined(__cplusplus)
|
| 94 |
+
}
|
| 95 |
+
#endif
|
| 96 |
+
|
| 97 |
+
#endif /*_CUPTI_OPENACC_H_*/
|
| 98 |
+
|
lib/python3.12/site-packages/nvidia/cuda_cupti/include/Openmp/cupti_openmp.h
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
* Copyright 2018 NVIDIA Corporation. All rights reserved.
|
| 3 |
+
*
|
| 4 |
+
* NOTICE TO LICENSEE:
|
| 5 |
+
*
|
| 6 |
+
* This source code and/or documentation ("Licensed Deliverables") are
|
| 7 |
+
* subject to NVIDIA intellectual property rights under U.S. and
|
| 8 |
+
* international Copyright laws.
|
| 9 |
+
*
|
| 10 |
+
* These Licensed Deliverables contained herein is PROPRIETARY and
|
| 11 |
+
* CONFIDENTIAL to NVIDIA and is being provided under the terms and
|
| 12 |
+
* conditions of a form of NVIDIA software license agreement by and
|
| 13 |
+
* between NVIDIA and Licensee ("License Agreement") or electronically
|
| 14 |
+
* accepted by Licensee. Notwithstanding any terms or conditions to
|
| 15 |
+
* the contrary in the License Agreement, reproduction or disclosure
|
| 16 |
+
* of the Licensed Deliverables to any third party without the express
|
| 17 |
+
* written consent of NVIDIA is prohibited.
|
| 18 |
+
*
|
| 19 |
+
* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
|
| 20 |
+
* LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
|
| 21 |
+
* SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. IT IS
|
| 22 |
+
* PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
|
| 23 |
+
* NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
|
| 24 |
+
* DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
|
| 25 |
+
* NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
|
| 26 |
+
* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
|
| 27 |
+
* LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
|
| 28 |
+
* SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
|
| 29 |
+
* DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
| 30 |
+
* WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
| 31 |
+
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
| 32 |
+
* OF THESE LICENSED DELIVERABLES.
|
| 33 |
+
*
|
| 34 |
+
* U.S. Government End Users. These Licensed Deliverables are a
|
| 35 |
+
* "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
|
| 36 |
+
* 1995), consisting of "commercial computer software" and "commercial
|
| 37 |
+
* computer software documentation" as such terms are used in 48
|
| 38 |
+
* C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
|
| 39 |
+
* only as a commercial end item. Consistent with 48 C.F.R.12.212 and
|
| 40 |
+
* 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
|
| 41 |
+
* U.S. Government End Users acquire the Licensed Deliverables with
|
| 42 |
+
* only those rights set forth herein.
|
| 43 |
+
*
|
| 44 |
+
* Any use of the Licensed Deliverables in individual and commercial
|
| 45 |
+
* software must include, in the user documentation and internal
|
| 46 |
+
* comments to the code, the above Disclaimer and U.S. Government End
|
| 47 |
+
* Users Notice.
|
| 48 |
+
*/
|
| 49 |
+
|
| 50 |
+
#include <cuda_stdint.h>
|
| 51 |
+
#include "Openmp/omp-tools.h"
|
| 52 |
+
|
| 53 |
+
#if !defined(_CUPTI_OPENMP_H_)
|
| 54 |
+
#define _CUPTI_OPENMP_H_
|
| 55 |
+
|
| 56 |
+
#ifndef CUPTIAPI
|
| 57 |
+
#ifdef _WIN32
|
| 58 |
+
#define CUPTIAPI __stdcall
|
| 59 |
+
#else
|
| 60 |
+
#define CUPTIAPI
|
| 61 |
+
#endif
|
| 62 |
+
#endif
|
| 63 |
+
|
| 64 |
+
#if defined(__LP64__)
|
| 65 |
+
#define CUPTILP64 1
|
| 66 |
+
#elif defined(_WIN64)
|
| 67 |
+
#define CUPTILP64 1
|
| 68 |
+
#else
|
| 69 |
+
#undef CUPTILP64
|
| 70 |
+
#endif
|
| 71 |
+
|
| 72 |
+
#if defined(__cplusplus)
|
| 73 |
+
extern "C" {
|
| 74 |
+
#endif
|
| 75 |
+
|
| 76 |
+
#if defined(__GNUC__) && defined(CUPTI_LIB)
|
| 77 |
+
#pragma GCC visibility push(default)
|
| 78 |
+
#endif
|
| 79 |
+
|
| 80 |
+
/**
|
| 81 |
+
* \brief Initialize OPENMP support (deprecated, used before OpenMP 5.0)
|
| 82 |
+
*
|
| 83 |
+
*/
|
| 84 |
+
int CUPTIAPI cuptiOpenMpInitialize(ompt_function_lookup_t ompt_fn_lookup, const char *runtime_version, unsigned int ompt_version);
|
| 85 |
+
|
| 86 |
+
/**
|
| 87 |
+
* \brief Initialize OPENMP support
|
| 88 |
+
*
|
| 89 |
+
*/
|
| 90 |
+
int CUPTIAPI cuptiOpenMpInitialize_v2(ompt_function_lookup_t lookup, int initial_device_num, ompt_data_t *tool_data);
|
| 91 |
+
|
| 92 |
+
#if defined(__GNUC__) && defined(CUPTI_LIB)
|
| 93 |
+
#pragma GCC visibility pop
|
| 94 |
+
#endif
|
| 95 |
+
|
| 96 |
+
#if defined(__cplusplus)
|
| 97 |
+
}
|
| 98 |
+
#endif
|
| 99 |
+
|
| 100 |
+
#endif /*_CUPTI_OPENMP_H_*/
|
lib/python3.12/site-packages/nvidia/cuda_cupti/include/Openmp/omp-tools.h
ADDED
|
@@ -0,0 +1,1083 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
* include/50/omp-tools.h.var
|
| 3 |
+
*/
|
| 4 |
+
|
| 5 |
+
//===----------------------------------------------------------------------===//
|
| 6 |
+
//
|
| 7 |
+
// The LLVM Compiler Infrastructure
|
| 8 |
+
//
|
| 9 |
+
// This file is dual licensed under the MIT and the University of Illinois Open
|
| 10 |
+
// Source Licenses. See LICENSE.txt for details.
|
| 11 |
+
//
|
| 12 |
+
//===----------------------------------------------------------------------===//
|
| 13 |
+
|
| 14 |
+
#ifndef __OMPT__
|
| 15 |
+
#define __OMPT__
|
| 16 |
+
|
| 17 |
+
/*****************************************************************************
|
| 18 |
+
* system include files
|
| 19 |
+
*****************************************************************************/
|
| 20 |
+
|
| 21 |
+
#include <stdint.h>
|
| 22 |
+
#include <stddef.h>
|
| 23 |
+
|
| 24 |
+
/*****************************************************************************
|
| 25 |
+
* iteration macros
|
| 26 |
+
*****************************************************************************/
|
| 27 |
+
|
| 28 |
+
#define FOREACH_OMPT_INQUIRY_FN(macro) \
|
| 29 |
+
macro (ompt_enumerate_states) \
|
| 30 |
+
macro (ompt_enumerate_mutex_impls) \
|
| 31 |
+
\
|
| 32 |
+
macro (ompt_set_callback) \
|
| 33 |
+
macro (ompt_get_callback) \
|
| 34 |
+
\
|
| 35 |
+
macro (ompt_get_state) \
|
| 36 |
+
\
|
| 37 |
+
macro (ompt_get_parallel_info) \
|
| 38 |
+
macro (ompt_get_task_info) \
|
| 39 |
+
macro (ompt_get_task_memory) \
|
| 40 |
+
macro (ompt_get_thread_data) \
|
| 41 |
+
macro (ompt_get_unique_id) \
|
| 42 |
+
macro (ompt_finalize_tool) \
|
| 43 |
+
\
|
| 44 |
+
macro(ompt_get_num_procs) \
|
| 45 |
+
macro(ompt_get_num_places) \
|
| 46 |
+
macro(ompt_get_place_proc_ids) \
|
| 47 |
+
macro(ompt_get_place_num) \
|
| 48 |
+
macro(ompt_get_partition_place_nums) \
|
| 49 |
+
macro(ompt_get_proc_id) \
|
| 50 |
+
\
|
| 51 |
+
macro(ompt_get_target_info) \
|
| 52 |
+
macro(ompt_get_num_devices)
|
| 53 |
+
|
| 54 |
+
#define FOREACH_OMPT_STATE(macro) \
|
| 55 |
+
\
|
| 56 |
+
/* first available state */ \
|
| 57 |
+
macro (ompt_state_undefined, 0x102) /* undefined thread state */ \
|
| 58 |
+
\
|
| 59 |
+
/* work states (0..15) */ \
|
| 60 |
+
macro (ompt_state_work_serial, 0x000) /* working outside parallel */ \
|
| 61 |
+
macro (ompt_state_work_parallel, 0x001) /* working within parallel */ \
|
| 62 |
+
macro (ompt_state_work_reduction, 0x002) /* performing a reduction */ \
|
| 63 |
+
\
|
| 64 |
+
/* barrier wait states (16..31) */ \
|
| 65 |
+
macro (ompt_state_wait_barrier, 0x010) /* waiting at a barrier */ \
|
| 66 |
+
macro (ompt_state_wait_barrier_implicit_parallel, 0x011) \
|
| 67 |
+
/* implicit barrier at the end of parallel region */\
|
| 68 |
+
macro (ompt_state_wait_barrier_implicit_workshare, 0x012) \
|
| 69 |
+
/* implicit barrier at the end of worksharing */ \
|
| 70 |
+
macro (ompt_state_wait_barrier_implicit, 0x013) /* implicit barrier */ \
|
| 71 |
+
macro (ompt_state_wait_barrier_explicit, 0x014) /* explicit barrier */ \
|
| 72 |
+
\
|
| 73 |
+
/* task wait states (32..63) */ \
|
| 74 |
+
macro (ompt_state_wait_taskwait, 0x020) /* waiting at a taskwait */ \
|
| 75 |
+
macro (ompt_state_wait_taskgroup, 0x021) /* waiting at a taskgroup */ \
|
| 76 |
+
\
|
| 77 |
+
/* mutex wait states (64..127) */ \
|
| 78 |
+
macro (ompt_state_wait_mutex, 0x040) \
|
| 79 |
+
macro (ompt_state_wait_lock, 0x041) /* waiting for lock */ \
|
| 80 |
+
macro (ompt_state_wait_critical, 0x042) /* waiting for critical */ \
|
| 81 |
+
macro (ompt_state_wait_atomic, 0x043) /* waiting for atomic */ \
|
| 82 |
+
macro (ompt_state_wait_ordered, 0x044) /* waiting for ordered */ \
|
| 83 |
+
\
|
| 84 |
+
/* target wait states (128..255) */ \
|
| 85 |
+
macro (ompt_state_wait_target, 0x080) /* waiting for target region */ \
|
| 86 |
+
macro (ompt_state_wait_target_map, 0x081) /* waiting for target data mapping operation */ \
|
| 87 |
+
macro (ompt_state_wait_target_update, 0x082) /* waiting for target update operation */ \
|
| 88 |
+
\
|
| 89 |
+
/* misc (256..511) */ \
|
| 90 |
+
macro (ompt_state_idle, 0x100) /* waiting for work */ \
|
| 91 |
+
macro (ompt_state_overhead, 0x101) /* overhead excluding wait states */ \
|
| 92 |
+
\
|
| 93 |
+
/* implementation-specific states (512..) */
|
| 94 |
+
|
| 95 |
+
|
| 96 |
+
#define FOREACH_KMP_MUTEX_IMPL(macro) \
|
| 97 |
+
macro (kmp_mutex_impl_none, 0) /* unknown implementation */ \
|
| 98 |
+
macro (kmp_mutex_impl_spin, 1) /* based on spin */ \
|
| 99 |
+
macro (kmp_mutex_impl_queuing, 2) /* based on some fair policy */ \
|
| 100 |
+
macro (kmp_mutex_impl_speculative, 3) /* based on HW-supported speculation */
|
| 101 |
+
|
| 102 |
+
#define FOREACH_OMPT_EVENT(macro) \
|
| 103 |
+
\
|
| 104 |
+
/*--- Mandatory Events ---*/ \
|
| 105 |
+
macro (ompt_callback_thread_begin, ompt_callback_thread_begin_t, 1) /* thread begin */ \
|
| 106 |
+
macro (ompt_callback_thread_end, ompt_callback_thread_end_t, 2) /* thread end */ \
|
| 107 |
+
\
|
| 108 |
+
macro (ompt_callback_parallel_begin, ompt_callback_parallel_begin_t, 3) /* parallel begin */ \
|
| 109 |
+
macro (ompt_callback_parallel_end, ompt_callback_parallel_end_t, 4) /* parallel end */ \
|
| 110 |
+
\
|
| 111 |
+
macro (ompt_callback_task_create, ompt_callback_task_create_t, 5) /* task begin */ \
|
| 112 |
+
macro (ompt_callback_task_schedule, ompt_callback_task_schedule_t, 6) /* task schedule */ \
|
| 113 |
+
macro (ompt_callback_implicit_task, ompt_callback_implicit_task_t, 7) /* implicit task */ \
|
| 114 |
+
\
|
| 115 |
+
macro (ompt_callback_target, ompt_callback_target_t, 8) /* target */ \
|
| 116 |
+
macro (ompt_callback_target_data_op, ompt_callback_target_data_op_t, 9) /* target data op */ \
|
| 117 |
+
macro (ompt_callback_target_submit, ompt_callback_target_submit_t, 10) /* target submit */ \
|
| 118 |
+
\
|
| 119 |
+
macro (ompt_callback_control_tool, ompt_callback_control_tool_t, 11) /* control tool */ \
|
| 120 |
+
\
|
| 121 |
+
macro (ompt_callback_device_initialize, ompt_callback_device_initialize_t, 12) /* device initialize */ \
|
| 122 |
+
macro (ompt_callback_device_finalize, ompt_callback_device_finalize_t, 13) /* device finalize */ \
|
| 123 |
+
\
|
| 124 |
+
macro (ompt_callback_device_load, ompt_callback_device_load_t, 14) /* device load */ \
|
| 125 |
+
macro (ompt_callback_device_unload, ompt_callback_device_unload_t, 15) /* device unload */ \
|
| 126 |
+
\
|
| 127 |
+
/* Optional Events */ \
|
| 128 |
+
macro (ompt_callback_sync_region_wait, ompt_callback_sync_region_t, 16) /* sync region wait begin or end */ \
|
| 129 |
+
\
|
| 130 |
+
macro (ompt_callback_mutex_released, ompt_callback_mutex_t, 17) /* mutex released */ \
|
| 131 |
+
\
|
| 132 |
+
macro (ompt_callback_dependences, ompt_callback_dependences_t, 18) /* report task dependences */ \
|
| 133 |
+
macro (ompt_callback_task_dependence, ompt_callback_task_dependence_t, 19) /* report task dependence */ \
|
| 134 |
+
\
|
| 135 |
+
macro (ompt_callback_work, ompt_callback_work_t, 20) /* task at work begin or end */ \
|
| 136 |
+
\
|
| 137 |
+
macro (ompt_callback_master, ompt_callback_master_t, 21) /* task at master begin or end */ \
|
| 138 |
+
\
|
| 139 |
+
macro (ompt_callback_target_map, ompt_callback_target_map_t, 22) /* target map */ \
|
| 140 |
+
\
|
| 141 |
+
macro (ompt_callback_sync_region, ompt_callback_sync_region_t, 23) /* sync region begin or end */ \
|
| 142 |
+
\
|
| 143 |
+
macro (ompt_callback_lock_init, ompt_callback_mutex_acquire_t, 24) /* lock init */ \
|
| 144 |
+
macro (ompt_callback_lock_destroy, ompt_callback_mutex_t, 25) /* lock destroy */ \
|
| 145 |
+
\
|
| 146 |
+
macro (ompt_callback_mutex_acquire, ompt_callback_mutex_acquire_t, 26) /* mutex acquire */ \
|
| 147 |
+
macro (ompt_callback_mutex_acquired, ompt_callback_mutex_t, 27) /* mutex acquired */ \
|
| 148 |
+
\
|
| 149 |
+
macro (ompt_callback_nest_lock, ompt_callback_nest_lock_t, 28) /* nest lock */ \
|
| 150 |
+
\
|
| 151 |
+
macro (ompt_callback_flush, ompt_callback_flush_t, 29) /* after executing flush */ \
|
| 152 |
+
\
|
| 153 |
+
macro (ompt_callback_cancel, ompt_callback_cancel_t, 30) /* cancel innermost binding region */ \
|
| 154 |
+
\
|
| 155 |
+
macro (ompt_callback_reduction, ompt_callback_sync_region_t, 31) /* reduction */ \
|
| 156 |
+
\
|
| 157 |
+
macro (ompt_callback_dispatch, ompt_callback_dispatch_t, 32) /* dispatch of work */
|
| 158 |
+
|
| 159 |
+
/*****************************************************************************
|
| 160 |
+
* implementation specific types
|
| 161 |
+
*****************************************************************************/
|
| 162 |
+
|
| 163 |
+
typedef enum kmp_mutex_impl_t {
|
| 164 |
+
#define kmp_mutex_impl_macro(impl, code) impl = code,
|
| 165 |
+
FOREACH_KMP_MUTEX_IMPL(kmp_mutex_impl_macro)
|
| 166 |
+
#undef kmp_mutex_impl_macro
|
| 167 |
+
} kmp_mutex_impl_t;
|
| 168 |
+
|
| 169 |
+
/*****************************************************************************
|
| 170 |
+
* definitions generated from spec
|
| 171 |
+
*****************************************************************************/
|
| 172 |
+
|
| 173 |
+
typedef enum ompt_callbacks_t {
|
| 174 |
+
ompt_callback_thread_begin = 1,
|
| 175 |
+
ompt_callback_thread_end = 2,
|
| 176 |
+
ompt_callback_parallel_begin = 3,
|
| 177 |
+
ompt_callback_parallel_end = 4,
|
| 178 |
+
ompt_callback_task_create = 5,
|
| 179 |
+
ompt_callback_task_schedule = 6,
|
| 180 |
+
ompt_callback_implicit_task = 7,
|
| 181 |
+
ompt_callback_target = 8,
|
| 182 |
+
ompt_callback_target_data_op = 9,
|
| 183 |
+
ompt_callback_target_submit = 10,
|
| 184 |
+
ompt_callback_control_tool = 11,
|
| 185 |
+
ompt_callback_device_initialize = 12,
|
| 186 |
+
ompt_callback_device_finalize = 13,
|
| 187 |
+
ompt_callback_device_load = 14,
|
| 188 |
+
ompt_callback_device_unload = 15,
|
| 189 |
+
ompt_callback_sync_region_wait = 16,
|
| 190 |
+
ompt_callback_mutex_released = 17,
|
| 191 |
+
ompt_callback_dependences = 18,
|
| 192 |
+
ompt_callback_task_dependence = 19,
|
| 193 |
+
ompt_callback_work = 20,
|
| 194 |
+
ompt_callback_master = 21,
|
| 195 |
+
ompt_callback_target_map = 22,
|
| 196 |
+
ompt_callback_sync_region = 23,
|
| 197 |
+
ompt_callback_lock_init = 24,
|
| 198 |
+
ompt_callback_lock_destroy = 25,
|
| 199 |
+
ompt_callback_mutex_acquire = 26,
|
| 200 |
+
ompt_callback_mutex_acquired = 27,
|
| 201 |
+
ompt_callback_nest_lock = 28,
|
| 202 |
+
ompt_callback_flush = 29,
|
| 203 |
+
ompt_callback_cancel = 30,
|
| 204 |
+
ompt_callback_reduction = 31,
|
| 205 |
+
ompt_callback_dispatch = 32
|
| 206 |
+
} ompt_callbacks_t;
|
| 207 |
+
|
| 208 |
+
typedef enum ompt_record_t {
|
| 209 |
+
ompt_record_ompt = 1,
|
| 210 |
+
ompt_record_native = 2,
|
| 211 |
+
ompt_record_invalid = 3
|
| 212 |
+
} ompt_record_t;
|
| 213 |
+
|
| 214 |
+
typedef enum ompt_record_native_t {
|
| 215 |
+
ompt_record_native_info = 1,
|
| 216 |
+
ompt_record_native_event = 2
|
| 217 |
+
} ompt_record_native_t;
|
| 218 |
+
|
| 219 |
+
typedef enum ompt_set_result_t {
|
| 220 |
+
ompt_set_error = 0,
|
| 221 |
+
ompt_set_never = 1,
|
| 222 |
+
ompt_set_impossible = 2,
|
| 223 |
+
ompt_set_sometimes = 3,
|
| 224 |
+
ompt_set_sometimes_paired = 4,
|
| 225 |
+
ompt_set_always = 5
|
| 226 |
+
} ompt_set_result_t;
|
| 227 |
+
|
| 228 |
+
typedef uint64_t ompt_id_t;
|
| 229 |
+
|
| 230 |
+
typedef uint64_t ompt_device_time_t;
|
| 231 |
+
|
| 232 |
+
typedef uint64_t ompt_buffer_cursor_t;
|
| 233 |
+
|
| 234 |
+
typedef enum ompt_thread_t {
|
| 235 |
+
ompt_thread_initial = 1,
|
| 236 |
+
ompt_thread_worker = 2,
|
| 237 |
+
ompt_thread_other = 3,
|
| 238 |
+
ompt_thread_unknown = 4
|
| 239 |
+
} ompt_thread_t;
|
| 240 |
+
|
| 241 |
+
typedef enum ompt_scope_endpoint_t {
|
| 242 |
+
ompt_scope_begin = 1,
|
| 243 |
+
ompt_scope_end = 2
|
| 244 |
+
} ompt_scope_endpoint_t;
|
| 245 |
+
|
| 246 |
+
typedef enum ompt_dispatch_t {
|
| 247 |
+
ompt_dispatch_iteration = 1,
|
| 248 |
+
ompt_dispatch_section = 2
|
| 249 |
+
} ompt_dispatch_t;
|
| 250 |
+
|
| 251 |
+
typedef enum ompt_sync_region_t {
|
| 252 |
+
ompt_sync_region_barrier = 1,
|
| 253 |
+
ompt_sync_region_barrier_implicit = 2,
|
| 254 |
+
ompt_sync_region_barrier_explicit = 3,
|
| 255 |
+
ompt_sync_region_barrier_implementation = 4,
|
| 256 |
+
ompt_sync_region_taskwait = 5,
|
| 257 |
+
ompt_sync_region_taskgroup = 6,
|
| 258 |
+
ompt_sync_region_reduction = 7
|
| 259 |
+
} ompt_sync_region_t;
|
| 260 |
+
|
| 261 |
+
typedef enum ompt_target_data_op_t {
|
| 262 |
+
ompt_target_data_alloc = 1,
|
| 263 |
+
ompt_target_data_transfer_to_device = 2,
|
| 264 |
+
ompt_target_data_transfer_from_device = 3,
|
| 265 |
+
ompt_target_data_delete = 4,
|
| 266 |
+
ompt_target_data_associate = 5,
|
| 267 |
+
ompt_target_data_disassociate = 6
|
| 268 |
+
} ompt_target_data_op_t;
|
| 269 |
+
|
| 270 |
+
typedef enum ompt_work_t {
|
| 271 |
+
ompt_work_loop = 1,
|
| 272 |
+
ompt_work_sections = 2,
|
| 273 |
+
ompt_work_single_executor = 3,
|
| 274 |
+
ompt_work_single_other = 4,
|
| 275 |
+
ompt_work_workshare = 5,
|
| 276 |
+
ompt_work_distribute = 6,
|
| 277 |
+
ompt_work_taskloop = 7
|
| 278 |
+
} ompt_work_t;
|
| 279 |
+
|
| 280 |
+
typedef enum ompt_mutex_t {
|
| 281 |
+
ompt_mutex_lock = 1,
|
| 282 |
+
ompt_mutex_test_lock = 2,
|
| 283 |
+
ompt_mutex_nest_lock = 3,
|
| 284 |
+
ompt_mutex_test_nest_lock = 4,
|
| 285 |
+
ompt_mutex_critical = 5,
|
| 286 |
+
ompt_mutex_atomic = 6,
|
| 287 |
+
ompt_mutex_ordered = 7
|
| 288 |
+
} ompt_mutex_t;
|
| 289 |
+
|
| 290 |
+
typedef enum ompt_native_mon_flag_t {
|
| 291 |
+
ompt_native_data_motion_explicit = 0x01,
|
| 292 |
+
ompt_native_data_motion_implicit = 0x02,
|
| 293 |
+
ompt_native_kernel_invocation = 0x04,
|
| 294 |
+
ompt_native_kernel_execution = 0x08,
|
| 295 |
+
ompt_native_driver = 0x10,
|
| 296 |
+
ompt_native_runtime = 0x20,
|
| 297 |
+
ompt_native_overhead = 0x40,
|
| 298 |
+
ompt_native_idleness = 0x80
|
| 299 |
+
} ompt_native_mon_flag_t;
|
| 300 |
+
|
| 301 |
+
typedef enum ompt_task_flag_t {
|
| 302 |
+
ompt_task_initial = 0x00000001,
|
| 303 |
+
ompt_task_implicit = 0x00000002,
|
| 304 |
+
ompt_task_explicit = 0x00000004,
|
| 305 |
+
ompt_task_target = 0x00000008,
|
| 306 |
+
ompt_task_undeferred = 0x08000000,
|
| 307 |
+
ompt_task_untied = 0x10000000,
|
| 308 |
+
ompt_task_final = 0x20000000,
|
| 309 |
+
ompt_task_mergeable = 0x40000000,
|
| 310 |
+
ompt_task_merged = 0x80000000
|
| 311 |
+
} ompt_task_flag_t;
|
| 312 |
+
|
| 313 |
+
typedef enum ompt_task_status_t {
|
| 314 |
+
ompt_task_complete = 1,
|
| 315 |
+
ompt_task_yield = 2,
|
| 316 |
+
ompt_task_cancel = 3,
|
| 317 |
+
ompt_task_detach = 4,
|
| 318 |
+
ompt_task_early_fulfill = 5,
|
| 319 |
+
ompt_task_late_fulfill = 6,
|
| 320 |
+
ompt_task_switch = 7
|
| 321 |
+
} ompt_task_status_t;
|
| 322 |
+
|
| 323 |
+
typedef enum ompt_target_t {
|
| 324 |
+
ompt_target = 1,
|
| 325 |
+
ompt_target_enter_data = 2,
|
| 326 |
+
ompt_target_exit_data = 3,
|
| 327 |
+
ompt_target_update = 4
|
| 328 |
+
} ompt_target_t;
|
| 329 |
+
|
| 330 |
+
typedef enum ompt_parallel_flag_t {
|
| 331 |
+
ompt_parallel_invoker_program = 0x00000001,
|
| 332 |
+
ompt_parallel_invoker_runtime = 0x00000002,
|
| 333 |
+
ompt_parallel_league = 0x40000000,
|
| 334 |
+
ompt_parallel_team = 0x80000000
|
| 335 |
+
} ompt_parallel_flag_t;
|
| 336 |
+
|
| 337 |
+
typedef enum ompt_target_map_flag_t {
|
| 338 |
+
ompt_target_map_flag_to = 0x01,
|
| 339 |
+
ompt_target_map_flag_from = 0x02,
|
| 340 |
+
ompt_target_map_flag_alloc = 0x04,
|
| 341 |
+
ompt_target_map_flag_release = 0x08,
|
| 342 |
+
ompt_target_map_flag_delete = 0x10,
|
| 343 |
+
ompt_target_map_flag_implicit = 0x20
|
| 344 |
+
} ompt_target_map_flag_t;
|
| 345 |
+
|
| 346 |
+
typedef enum ompt_dependence_type_t {
|
| 347 |
+
ompt_dependence_type_in = 1,
|
| 348 |
+
ompt_dependence_type_out = 2,
|
| 349 |
+
ompt_dependence_type_inout = 3,
|
| 350 |
+
ompt_dependence_type_mutexinoutset = 4,
|
| 351 |
+
ompt_dependence_type_source = 5,
|
| 352 |
+
ompt_dependence_type_sink = 6
|
| 353 |
+
} ompt_dependence_type_t;
|
| 354 |
+
|
| 355 |
+
typedef enum ompt_cancel_flag_t {
|
| 356 |
+
ompt_cancel_parallel = 0x01,
|
| 357 |
+
ompt_cancel_sections = 0x02,
|
| 358 |
+
ompt_cancel_loop = 0x04,
|
| 359 |
+
ompt_cancel_taskgroup = 0x08,
|
| 360 |
+
ompt_cancel_activated = 0x10,
|
| 361 |
+
ompt_cancel_detected = 0x20,
|
| 362 |
+
ompt_cancel_discarded_task = 0x40
|
| 363 |
+
} ompt_cancel_flag_t;
|
| 364 |
+
|
| 365 |
+
typedef uint64_t ompt_hwid_t;
|
| 366 |
+
|
| 367 |
+
typedef uint64_t ompt_wait_id_t;
|
| 368 |
+
|
| 369 |
+
typedef enum ompt_frame_flag_t {
|
| 370 |
+
ompt_frame_runtime = 0x00,
|
| 371 |
+
ompt_frame_application = 0x01,
|
| 372 |
+
ompt_frame_cfa = 0x10,
|
| 373 |
+
ompt_frame_framepointer = 0x20,
|
| 374 |
+
ompt_frame_stackaddress = 0x30
|
| 375 |
+
} ompt_frame_flag_t;
|
| 376 |
+
|
| 377 |
+
typedef enum ompt_state_t {
|
| 378 |
+
ompt_state_work_serial = 0x000,
|
| 379 |
+
ompt_state_work_parallel = 0x001,
|
| 380 |
+
ompt_state_work_reduction = 0x002,
|
| 381 |
+
|
| 382 |
+
ompt_state_wait_barrier = 0x010,
|
| 383 |
+
ompt_state_wait_barrier_implicit_parallel = 0x011,
|
| 384 |
+
ompt_state_wait_barrier_implicit_workshare = 0x012,
|
| 385 |
+
ompt_state_wait_barrier_implicit = 0x013,
|
| 386 |
+
ompt_state_wait_barrier_explicit = 0x014,
|
| 387 |
+
|
| 388 |
+
ompt_state_wait_taskwait = 0x020,
|
| 389 |
+
ompt_state_wait_taskgroup = 0x021,
|
| 390 |
+
|
| 391 |
+
ompt_state_wait_mutex = 0x040,
|
| 392 |
+
ompt_state_wait_lock = 0x041,
|
| 393 |
+
ompt_state_wait_critical = 0x042,
|
| 394 |
+
ompt_state_wait_atomic = 0x043,
|
| 395 |
+
ompt_state_wait_ordered = 0x044,
|
| 396 |
+
|
| 397 |
+
ompt_state_wait_target = 0x080,
|
| 398 |
+
ompt_state_wait_target_map = 0x081,
|
| 399 |
+
ompt_state_wait_target_update = 0x082,
|
| 400 |
+
|
| 401 |
+
ompt_state_idle = 0x100,
|
| 402 |
+
ompt_state_overhead = 0x101,
|
| 403 |
+
ompt_state_undefined = 0x102
|
| 404 |
+
} ompt_state_t;
|
| 405 |
+
|
| 406 |
+
typedef uint64_t (*ompt_get_unique_id_t) (void);
|
| 407 |
+
|
| 408 |
+
typedef uint64_t ompd_size_t;
|
| 409 |
+
|
| 410 |
+
typedef uint64_t ompd_wait_id_t;
|
| 411 |
+
|
| 412 |
+
typedef uint64_t ompd_addr_t;
|
| 413 |
+
typedef int64_t ompd_word_t;
|
| 414 |
+
typedef uint64_t ompd_seg_t;
|
| 415 |
+
|
| 416 |
+
typedef uint64_t ompd_device_t;
|
| 417 |
+
|
| 418 |
+
typedef uint64_t ompd_thread_id_t;
|
| 419 |
+
|
| 420 |
+
typedef enum ompd_scope_t {
|
| 421 |
+
ompd_scope_global = 1,
|
| 422 |
+
ompd_scope_address_space = 2,
|
| 423 |
+
ompd_scope_thread = 3,
|
| 424 |
+
ompd_scope_parallel = 4,
|
| 425 |
+
ompd_scope_implicit_task = 5,
|
| 426 |
+
ompd_scope_task = 6
|
| 427 |
+
} ompd_scope_t;
|
| 428 |
+
|
| 429 |
+
typedef uint64_t ompd_icv_id_t;
|
| 430 |
+
|
| 431 |
+
typedef enum ompd_rc_t {
|
| 432 |
+
ompd_rc_ok = 0,
|
| 433 |
+
ompd_rc_unavailable = 1,
|
| 434 |
+
ompd_rc_stale_handle = 2,
|
| 435 |
+
ompd_rc_bad_input = 3,
|
| 436 |
+
ompd_rc_error = 4,
|
| 437 |
+
ompd_rc_unsupported = 5,
|
| 438 |
+
ompd_rc_needs_state_tracking = 6,
|
| 439 |
+
ompd_rc_incompatible = 7,
|
| 440 |
+
ompd_rc_device_read_error = 8,
|
| 441 |
+
ompd_rc_device_write_error = 9,
|
| 442 |
+
ompd_rc_nomem = 10,
|
| 443 |
+
} ompd_rc_t;
|
| 444 |
+
|
| 445 |
+
typedef void (*ompt_interface_fn_t) (void);
|
| 446 |
+
|
| 447 |
+
typedef ompt_interface_fn_t (*ompt_function_lookup_t) (
|
| 448 |
+
const char *interface_function_name
|
| 449 |
+
);
|
| 450 |
+
|
| 451 |
+
typedef union ompt_data_t {
|
| 452 |
+
uint64_t value;
|
| 453 |
+
void *ptr;
|
| 454 |
+
} ompt_data_t;
|
| 455 |
+
|
| 456 |
+
typedef struct ompt_frame_t {
|
| 457 |
+
ompt_data_t exit_frame;
|
| 458 |
+
ompt_data_t enter_frame;
|
| 459 |
+
int exit_frame_flags;
|
| 460 |
+
int enter_frame_flags;
|
| 461 |
+
} ompt_frame_t;
|
| 462 |
+
|
| 463 |
+
typedef void (*ompt_callback_t) (void);
|
| 464 |
+
|
| 465 |
+
typedef void ompt_device_t;
|
| 466 |
+
|
| 467 |
+
typedef void ompt_buffer_t;
|
| 468 |
+
|
| 469 |
+
typedef void (*ompt_callback_buffer_request_t) (
|
| 470 |
+
int device_num,
|
| 471 |
+
ompt_buffer_t **buffer,
|
| 472 |
+
size_t *bytes
|
| 473 |
+
);
|
| 474 |
+
|
| 475 |
+
typedef void (*ompt_callback_buffer_complete_t) (
|
| 476 |
+
int device_num,
|
| 477 |
+
ompt_buffer_t *buffer,
|
| 478 |
+
size_t bytes,
|
| 479 |
+
ompt_buffer_cursor_t begin,
|
| 480 |
+
int buffer_owned
|
| 481 |
+
);
|
| 482 |
+
|
| 483 |
+
typedef void (*ompt_finalize_t) (
|
| 484 |
+
ompt_data_t *tool_data
|
| 485 |
+
);
|
| 486 |
+
|
| 487 |
+
typedef int (*ompt_initialize_t) (
|
| 488 |
+
ompt_function_lookup_t lookup,
|
| 489 |
+
int initial_device_num,
|
| 490 |
+
ompt_data_t *tool_data
|
| 491 |
+
);
|
| 492 |
+
|
| 493 |
+
typedef struct ompt_start_tool_result_t {
|
| 494 |
+
ompt_initialize_t initialize;
|
| 495 |
+
ompt_finalize_t finalize;
|
| 496 |
+
ompt_data_t tool_data;
|
| 497 |
+
} ompt_start_tool_result_t;
|
| 498 |
+
|
| 499 |
+
typedef struct ompt_record_abstract_t {
|
| 500 |
+
ompt_record_native_t rclass;
|
| 501 |
+
const char *type;
|
| 502 |
+
ompt_device_time_t start_time;
|
| 503 |
+
ompt_device_time_t end_time;
|
| 504 |
+
ompt_hwid_t hwid;
|
| 505 |
+
} ompt_record_abstract_t;
|
| 506 |
+
|
| 507 |
+
typedef struct ompt_dependence_t {
|
| 508 |
+
ompt_data_t variable;
|
| 509 |
+
ompt_dependence_type_t dependence_type;
|
| 510 |
+
} ompt_dependence_t;
|
| 511 |
+
|
| 512 |
+
typedef int (*ompt_enumerate_states_t) (
|
| 513 |
+
int current_state,
|
| 514 |
+
int *next_state,
|
| 515 |
+
const char **next_state_name
|
| 516 |
+
);
|
| 517 |
+
|
| 518 |
+
typedef int (*ompt_enumerate_mutex_impls_t) (
|
| 519 |
+
int current_impl,
|
| 520 |
+
int *next_impl,
|
| 521 |
+
const char **next_impl_name
|
| 522 |
+
);
|
| 523 |
+
|
| 524 |
+
typedef ompt_set_result_t (*ompt_set_callback_t) (
|
| 525 |
+
ompt_callbacks_t event,
|
| 526 |
+
ompt_callback_t callback
|
| 527 |
+
);
|
| 528 |
+
|
| 529 |
+
typedef int (*ompt_get_callback_t) (
|
| 530 |
+
ompt_callbacks_t event,
|
| 531 |
+
ompt_callback_t *callback
|
| 532 |
+
);
|
| 533 |
+
|
| 534 |
+
typedef ompt_data_t *(*ompt_get_thread_data_t) (void);
|
| 535 |
+
|
| 536 |
+
typedef int (*ompt_get_num_procs_t) (void);
|
| 537 |
+
|
| 538 |
+
typedef int (*ompt_get_num_places_t) (void);
|
| 539 |
+
|
| 540 |
+
typedef int (*ompt_get_place_proc_ids_t) (
|
| 541 |
+
int place_num,
|
| 542 |
+
int ids_size,
|
| 543 |
+
int *ids
|
| 544 |
+
);
|
| 545 |
+
|
| 546 |
+
typedef int (*ompt_get_place_num_t) (void);
|
| 547 |
+
|
| 548 |
+
typedef int (*ompt_get_partition_place_nums_t) (
|
| 549 |
+
int place_nums_size,
|
| 550 |
+
int *place_nums
|
| 551 |
+
);
|
| 552 |
+
|
| 553 |
+
typedef int (*ompt_get_proc_id_t) (void);
|
| 554 |
+
|
| 555 |
+
typedef int (*ompt_get_state_t) (
|
| 556 |
+
ompt_wait_id_t *wait_id
|
| 557 |
+
);
|
| 558 |
+
|
| 559 |
+
typedef int (*ompt_get_parallel_info_t) (
|
| 560 |
+
int ancestor_level,
|
| 561 |
+
ompt_data_t **parallel_data,
|
| 562 |
+
int *team_size
|
| 563 |
+
);
|
| 564 |
+
|
| 565 |
+
typedef int (*ompt_get_task_info_t) (
|
| 566 |
+
int ancestor_level,
|
| 567 |
+
int *flags,
|
| 568 |
+
ompt_data_t **task_data,
|
| 569 |
+
ompt_frame_t **task_frame,
|
| 570 |
+
ompt_data_t **parallel_data,
|
| 571 |
+
int *thread_num
|
| 572 |
+
);
|
| 573 |
+
|
| 574 |
+
typedef int (*ompt_get_task_memory_t)(
|
| 575 |
+
void **addr,
|
| 576 |
+
size_t *size,
|
| 577 |
+
int block
|
| 578 |
+
);
|
| 579 |
+
|
| 580 |
+
typedef int (*ompt_get_target_info_t) (
|
| 581 |
+
uint64_t *device_num,
|
| 582 |
+
ompt_id_t *target_id,
|
| 583 |
+
ompt_id_t *host_op_id
|
| 584 |
+
);
|
| 585 |
+
|
| 586 |
+
typedef int (*ompt_get_num_devices_t) (void);
|
| 587 |
+
|
| 588 |
+
typedef void (*ompt_finalize_tool_t) (void);
|
| 589 |
+
|
| 590 |
+
typedef int (*ompt_get_device_num_procs_t) (
|
| 591 |
+
ompt_device_t *device
|
| 592 |
+
);
|
| 593 |
+
|
| 594 |
+
typedef ompt_device_time_t (*ompt_get_device_time_t) (
|
| 595 |
+
ompt_device_t *device
|
| 596 |
+
);
|
| 597 |
+
|
| 598 |
+
typedef double (*ompt_translate_time_t) (
|
| 599 |
+
ompt_device_t *device,
|
| 600 |
+
ompt_device_time_t time
|
| 601 |
+
);
|
| 602 |
+
|
| 603 |
+
typedef ompt_set_result_t (*ompt_set_trace_ompt_t) (
|
| 604 |
+
ompt_device_t *device,
|
| 605 |
+
unsigned int enable,
|
| 606 |
+
unsigned int etype
|
| 607 |
+
);
|
| 608 |
+
|
| 609 |
+
typedef ompt_set_result_t (*ompt_set_trace_native_t) (
|
| 610 |
+
ompt_device_t *device,
|
| 611 |
+
int enable,
|
| 612 |
+
int flags
|
| 613 |
+
);
|
| 614 |
+
|
| 615 |
+
typedef int (*ompt_start_trace_t) (
|
| 616 |
+
ompt_device_t *device,
|
| 617 |
+
ompt_callback_buffer_request_t request,
|
| 618 |
+
ompt_callback_buffer_complete_t complete
|
| 619 |
+
);
|
| 620 |
+
|
| 621 |
+
typedef int (*ompt_pause_trace_t) (
|
| 622 |
+
ompt_device_t *device,
|
| 623 |
+
int begin_pause
|
| 624 |
+
);
|
| 625 |
+
|
| 626 |
+
typedef int (*ompt_flush_trace_t) (
|
| 627 |
+
ompt_device_t *device
|
| 628 |
+
);
|
| 629 |
+
|
| 630 |
+
typedef int (*ompt_stop_trace_t) (
|
| 631 |
+
ompt_device_t *device
|
| 632 |
+
);
|
| 633 |
+
|
| 634 |
+
typedef int (*ompt_advance_buffer_cursor_t) (
|
| 635 |
+
ompt_device_t *device,
|
| 636 |
+
ompt_buffer_t *buffer,
|
| 637 |
+
size_t size,
|
| 638 |
+
ompt_buffer_cursor_t current,
|
| 639 |
+
ompt_buffer_cursor_t *next
|
| 640 |
+
);
|
| 641 |
+
|
| 642 |
+
typedef ompt_record_t (*ompt_get_record_type_t) (
|
| 643 |
+
ompt_buffer_t *buffer,
|
| 644 |
+
ompt_buffer_cursor_t current
|
| 645 |
+
);
|
| 646 |
+
|
| 647 |
+
typedef void *(*ompt_get_record_native_t) (
|
| 648 |
+
ompt_buffer_t *buffer,
|
| 649 |
+
ompt_buffer_cursor_t current,
|
| 650 |
+
ompt_id_t *host_op_id
|
| 651 |
+
);
|
| 652 |
+
|
| 653 |
+
typedef ompt_record_abstract_t *
|
| 654 |
+
(*ompt_get_record_abstract_t) (
|
| 655 |
+
void *native_record
|
| 656 |
+
);
|
| 657 |
+
|
| 658 |
+
typedef void (*ompt_callback_thread_begin_t) (
|
| 659 |
+
ompt_thread_t thread_type,
|
| 660 |
+
ompt_data_t *thread_data
|
| 661 |
+
);
|
| 662 |
+
|
| 663 |
+
typedef struct ompt_record_thread_begin_t {
|
| 664 |
+
ompt_thread_t thread_type;
|
| 665 |
+
} ompt_record_thread_begin_t;
|
| 666 |
+
|
| 667 |
+
typedef void (*ompt_callback_thread_end_t) (
|
| 668 |
+
ompt_data_t *thread_data
|
| 669 |
+
);
|
| 670 |
+
|
| 671 |
+
typedef void (*ompt_callback_parallel_begin_t) (
|
| 672 |
+
ompt_data_t *encountering_task_data,
|
| 673 |
+
const ompt_frame_t *encountering_task_frame,
|
| 674 |
+
ompt_data_t *parallel_data,
|
| 675 |
+
unsigned int requested_parallelism,
|
| 676 |
+
int flags,
|
| 677 |
+
const void *codeptr_ra
|
| 678 |
+
);
|
| 679 |
+
|
| 680 |
+
typedef struct ompt_record_parallel_begin_t {
|
| 681 |
+
ompt_id_t encountering_task_id;
|
| 682 |
+
ompt_id_t parallel_id;
|
| 683 |
+
unsigned int requested_parallelism;
|
| 684 |
+
int flags;
|
| 685 |
+
const void *codeptr_ra;
|
| 686 |
+
} ompt_record_parallel_begin_t;
|
| 687 |
+
|
| 688 |
+
typedef void (*ompt_callback_parallel_end_t) (
|
| 689 |
+
ompt_data_t *parallel_data,
|
| 690 |
+
ompt_data_t *encountering_task_data,
|
| 691 |
+
int flags,
|
| 692 |
+
const void *codeptr_ra
|
| 693 |
+
);
|
| 694 |
+
|
| 695 |
+
typedef struct ompt_record_parallel_end_t {
|
| 696 |
+
ompt_id_t parallel_id;
|
| 697 |
+
ompt_id_t encountering_task_id;
|
| 698 |
+
int flags;
|
| 699 |
+
const void *codeptr_ra;
|
| 700 |
+
} ompt_record_parallel_end_t;
|
| 701 |
+
|
| 702 |
+
typedef void (*ompt_callback_work_t) (
|
| 703 |
+
ompt_work_t wstype,
|
| 704 |
+
ompt_scope_endpoint_t endpoint,
|
| 705 |
+
ompt_data_t *parallel_data,
|
| 706 |
+
ompt_data_t *task_data,
|
| 707 |
+
uint64_t count,
|
| 708 |
+
const void *codeptr_ra
|
| 709 |
+
);
|
| 710 |
+
|
| 711 |
+
typedef struct ompt_record_work_t {
|
| 712 |
+
ompt_work_t wstype;
|
| 713 |
+
ompt_scope_endpoint_t endpoint;
|
| 714 |
+
ompt_id_t parallel_id;
|
| 715 |
+
ompt_id_t task_id;
|
| 716 |
+
uint64_t count;
|
| 717 |
+
const void *codeptr_ra;
|
| 718 |
+
} ompt_record_work_t;
|
| 719 |
+
|
| 720 |
+
typedef void (*ompt_callback_dispatch_t) (
|
| 721 |
+
ompt_data_t *parallel_data,
|
| 722 |
+
ompt_data_t *task_data,
|
| 723 |
+
ompt_dispatch_t kind,
|
| 724 |
+
ompt_data_t instance
|
| 725 |
+
);
|
| 726 |
+
|
| 727 |
+
typedef struct ompt_record_dispatch_t {
|
| 728 |
+
ompt_id_t parallel_id;
|
| 729 |
+
ompt_id_t task_id;
|
| 730 |
+
ompt_dispatch_t kind;
|
| 731 |
+
ompt_data_t instance;
|
| 732 |
+
} ompt_record_dispatch_t;
|
| 733 |
+
|
| 734 |
+
typedef void (*ompt_callback_task_create_t) (
|
| 735 |
+
ompt_data_t *encountering_task_data,
|
| 736 |
+
const ompt_frame_t *encountering_task_frame,
|
| 737 |
+
ompt_data_t *new_task_data,
|
| 738 |
+
int flags,
|
| 739 |
+
int has_dependences,
|
| 740 |
+
const void *codeptr_ra
|
| 741 |
+
);
|
| 742 |
+
|
| 743 |
+
typedef struct ompt_record_task_create_t {
|
| 744 |
+
ompt_id_t encountering_task_id;
|
| 745 |
+
ompt_id_t new_task_id;
|
| 746 |
+
int flags;
|
| 747 |
+
int has_dependences;
|
| 748 |
+
const void *codeptr_ra;
|
| 749 |
+
} ompt_record_task_create_t;
|
| 750 |
+
|
| 751 |
+
typedef void (*ompt_callback_dependences_t) (
|
| 752 |
+
ompt_data_t *task_data,
|
| 753 |
+
const ompt_dependence_t *deps,
|
| 754 |
+
int ndeps
|
| 755 |
+
);
|
| 756 |
+
|
| 757 |
+
typedef struct ompt_record_dependences_t {
|
| 758 |
+
ompt_id_t task_id;
|
| 759 |
+
ompt_dependence_t dep;
|
| 760 |
+
int ndeps;
|
| 761 |
+
} ompt_record_dependences_t;
|
| 762 |
+
|
| 763 |
+
typedef void (*ompt_callback_task_dependence_t) (
|
| 764 |
+
ompt_data_t *src_task_data,
|
| 765 |
+
ompt_data_t *sink_task_data
|
| 766 |
+
);
|
| 767 |
+
|
| 768 |
+
typedef struct ompt_record_task_dependence_t {
|
| 769 |
+
ompt_id_t src_task_id;
|
| 770 |
+
ompt_id_t sink_task_id;
|
| 771 |
+
} ompt_record_task_dependence_t;
|
| 772 |
+
|
| 773 |
+
typedef void (*ompt_callback_task_schedule_t) (
|
| 774 |
+
ompt_data_t *prior_task_data,
|
| 775 |
+
ompt_task_status_t prior_task_status,
|
| 776 |
+
ompt_data_t *next_task_data
|
| 777 |
+
);
|
| 778 |
+
|
| 779 |
+
typedef struct ompt_record_task_schedule_t {
|
| 780 |
+
ompt_id_t prior_task_id;
|
| 781 |
+
ompt_task_status_t prior_task_status;
|
| 782 |
+
ompt_id_t next_task_id;
|
| 783 |
+
} ompt_record_task_schedule_t;
|
| 784 |
+
|
| 785 |
+
typedef void (*ompt_callback_implicit_task_t) (
|
| 786 |
+
ompt_scope_endpoint_t endpoint,
|
| 787 |
+
ompt_data_t *parallel_data,
|
| 788 |
+
ompt_data_t *task_data,
|
| 789 |
+
unsigned int actual_parallelism,
|
| 790 |
+
unsigned int index,
|
| 791 |
+
int flags
|
| 792 |
+
);
|
| 793 |
+
|
| 794 |
+
typedef struct ompt_record_implicit_task_t {
|
| 795 |
+
ompt_scope_endpoint_t endpoint;
|
| 796 |
+
ompt_id_t parallel_id;
|
| 797 |
+
ompt_id_t task_id;
|
| 798 |
+
unsigned int actual_parallelism;
|
| 799 |
+
unsigned int index;
|
| 800 |
+
int flags;
|
| 801 |
+
} ompt_record_implicit_task_t;
|
| 802 |
+
|
| 803 |
+
typedef void (*ompt_callback_master_t) (
|
| 804 |
+
ompt_scope_endpoint_t endpoint,
|
| 805 |
+
ompt_data_t *parallel_data,
|
| 806 |
+
ompt_data_t *task_data,
|
| 807 |
+
const void *codeptr_ra
|
| 808 |
+
);
|
| 809 |
+
|
| 810 |
+
typedef struct ompt_record_master_t {
|
| 811 |
+
ompt_scope_endpoint_t endpoint;
|
| 812 |
+
ompt_id_t parallel_id;
|
| 813 |
+
ompt_id_t task_id;
|
| 814 |
+
const void *codeptr_ra;
|
| 815 |
+
} ompt_record_master_t;
|
| 816 |
+
|
| 817 |
+
typedef void (*ompt_callback_sync_region_t) (
|
| 818 |
+
ompt_sync_region_t kind,
|
| 819 |
+
ompt_scope_endpoint_t endpoint,
|
| 820 |
+
ompt_data_t *parallel_data,
|
| 821 |
+
ompt_data_t *task_data,
|
| 822 |
+
const void *codeptr_ra
|
| 823 |
+
);
|
| 824 |
+
|
| 825 |
+
typedef struct ompt_record_sync_region_t {
|
| 826 |
+
ompt_sync_region_t kind;
|
| 827 |
+
ompt_scope_endpoint_t endpoint;
|
| 828 |
+
ompt_id_t parallel_id;
|
| 829 |
+
ompt_id_t task_id;
|
| 830 |
+
const void *codeptr_ra;
|
| 831 |
+
} ompt_record_sync_region_t;
|
| 832 |
+
|
| 833 |
+
typedef void (*ompt_callback_mutex_acquire_t) (
|
| 834 |
+
ompt_mutex_t kind,
|
| 835 |
+
unsigned int hint,
|
| 836 |
+
unsigned int impl,
|
| 837 |
+
ompt_wait_id_t wait_id,
|
| 838 |
+
const void *codeptr_ra
|
| 839 |
+
);
|
| 840 |
+
|
| 841 |
+
typedef struct ompt_record_mutex_acquire_t {
|
| 842 |
+
ompt_mutex_t kind;
|
| 843 |
+
unsigned int hint;
|
| 844 |
+
unsigned int impl;
|
| 845 |
+
ompt_wait_id_t wait_id;
|
| 846 |
+
const void *codeptr_ra;
|
| 847 |
+
} ompt_record_mutex_acquire_t;
|
| 848 |
+
|
| 849 |
+
typedef void (*ompt_callback_mutex_t) (
|
| 850 |
+
ompt_mutex_t kind,
|
| 851 |
+
ompt_wait_id_t wait_id,
|
| 852 |
+
const void *codeptr_ra
|
| 853 |
+
);
|
| 854 |
+
|
| 855 |
+
typedef struct ompt_record_mutex_t {
|
| 856 |
+
ompt_mutex_t kind;
|
| 857 |
+
ompt_wait_id_t wait_id;
|
| 858 |
+
const void *codeptr_ra;
|
| 859 |
+
} ompt_record_mutex_t;
|
| 860 |
+
|
| 861 |
+
typedef void (*ompt_callback_nest_lock_t) (
|
| 862 |
+
ompt_scope_endpoint_t endpoint,
|
| 863 |
+
ompt_wait_id_t wait_id,
|
| 864 |
+
const void *codeptr_ra
|
| 865 |
+
);
|
| 866 |
+
|
| 867 |
+
typedef struct ompt_record_nest_lock_t {
|
| 868 |
+
ompt_scope_endpoint_t endpoint;
|
| 869 |
+
ompt_wait_id_t wait_id;
|
| 870 |
+
const void *codeptr_ra;
|
| 871 |
+
} ompt_record_nest_lock_t;
|
| 872 |
+
|
| 873 |
+
typedef void (*ompt_callback_flush_t) (
|
| 874 |
+
ompt_data_t *thread_data,
|
| 875 |
+
const void *codeptr_ra
|
| 876 |
+
);
|
| 877 |
+
|
| 878 |
+
typedef struct ompt_record_flush_t {
|
| 879 |
+
const void *codeptr_ra;
|
| 880 |
+
} ompt_record_flush_t;
|
| 881 |
+
|
| 882 |
+
typedef void (*ompt_callback_cancel_t) (
|
| 883 |
+
ompt_data_t *task_data,
|
| 884 |
+
int flags,
|
| 885 |
+
const void *codeptr_ra
|
| 886 |
+
);
|
| 887 |
+
|
| 888 |
+
typedef struct ompt_record_cancel_t {
|
| 889 |
+
ompt_id_t task_id;
|
| 890 |
+
int flags;
|
| 891 |
+
const void *codeptr_ra;
|
| 892 |
+
} ompt_record_cancel_t;
|
| 893 |
+
|
| 894 |
+
typedef void (*ompt_callback_device_initialize_t) (
|
| 895 |
+
int device_num,
|
| 896 |
+
const char *type,
|
| 897 |
+
ompt_device_t *device,
|
| 898 |
+
ompt_function_lookup_t lookup,
|
| 899 |
+
const char *documentation
|
| 900 |
+
);
|
| 901 |
+
|
| 902 |
+
typedef void (*ompt_callback_device_finalize_t) (
|
| 903 |
+
int device_num
|
| 904 |
+
);
|
| 905 |
+
|
| 906 |
+
typedef void (*ompt_callback_device_load_t) (
|
| 907 |
+
int device_num,
|
| 908 |
+
const char *filename,
|
| 909 |
+
int64_t offset_in_file,
|
| 910 |
+
void *vma_in_file,
|
| 911 |
+
size_t bytes,
|
| 912 |
+
void *host_addr,
|
| 913 |
+
void *device_addr,
|
| 914 |
+
uint64_t module_id
|
| 915 |
+
);
|
| 916 |
+
|
| 917 |
+
typedef void (*ompt_callback_device_unload_t) (
|
| 918 |
+
int device_num,
|
| 919 |
+
uint64_t module_id
|
| 920 |
+
);
|
| 921 |
+
|
| 922 |
+
typedef void (*ompt_callback_target_data_op_t) (
|
| 923 |
+
ompt_id_t target_id,
|
| 924 |
+
ompt_id_t host_op_id,
|
| 925 |
+
ompt_target_data_op_t optype,
|
| 926 |
+
void *src_addr,
|
| 927 |
+
int src_device_num,
|
| 928 |
+
void *dest_addr,
|
| 929 |
+
int dest_device_num,
|
| 930 |
+
size_t bytes,
|
| 931 |
+
const void *codeptr_ra
|
| 932 |
+
);
|
| 933 |
+
|
| 934 |
+
typedef struct ompt_record_target_data_op_t {
|
| 935 |
+
ompt_id_t host_op_id;
|
| 936 |
+
ompt_target_data_op_t optype;
|
| 937 |
+
void *src_addr;
|
| 938 |
+
int src_device_num;
|
| 939 |
+
void *dest_addr;
|
| 940 |
+
int dest_device_num;
|
| 941 |
+
size_t bytes;
|
| 942 |
+
ompt_device_time_t end_time;
|
| 943 |
+
const void *codeptr_ra;
|
| 944 |
+
} ompt_record_target_data_op_t;
|
| 945 |
+
|
| 946 |
+
typedef void (*ompt_callback_target_t) (
|
| 947 |
+
ompt_target_t kind,
|
| 948 |
+
ompt_scope_endpoint_t endpoint,
|
| 949 |
+
int device_num,
|
| 950 |
+
ompt_data_t *task_data,
|
| 951 |
+
ompt_id_t target_id,
|
| 952 |
+
const void *codeptr_ra
|
| 953 |
+
);
|
| 954 |
+
|
| 955 |
+
typedef struct ompt_record_target_t {
|
| 956 |
+
ompt_target_t kind;
|
| 957 |
+
ompt_scope_endpoint_t endpoint;
|
| 958 |
+
int device_num;
|
| 959 |
+
ompt_id_t task_id;
|
| 960 |
+
ompt_id_t target_id;
|
| 961 |
+
const void *codeptr_ra;
|
| 962 |
+
} ompt_record_target_t;
|
| 963 |
+
|
| 964 |
+
typedef void (*ompt_callback_target_map_t) (
|
| 965 |
+
ompt_id_t target_id,
|
| 966 |
+
unsigned int nitems,
|
| 967 |
+
void **host_addr,
|
| 968 |
+
void **device_addr,
|
| 969 |
+
size_t *bytes,
|
| 970 |
+
unsigned int *mapping_flags,
|
| 971 |
+
const void *codeptr_ra
|
| 972 |
+
);
|
| 973 |
+
|
| 974 |
+
typedef struct ompt_record_target_map_t {
|
| 975 |
+
ompt_id_t target_id;
|
| 976 |
+
unsigned int nitems;
|
| 977 |
+
void **host_addr;
|
| 978 |
+
void **device_addr;
|
| 979 |
+
size_t *bytes;
|
| 980 |
+
unsigned int *mapping_flags;
|
| 981 |
+
const void *codeptr_ra;
|
| 982 |
+
} ompt_record_target_map_t;
|
| 983 |
+
|
| 984 |
+
typedef void (*ompt_callback_target_submit_t) (
|
| 985 |
+
ompt_id_t target_id,
|
| 986 |
+
ompt_id_t host_op_id,
|
| 987 |
+
unsigned int requested_num_teams
|
| 988 |
+
);
|
| 989 |
+
|
| 990 |
+
typedef struct ompt_record_target_kernel_t {
|
| 991 |
+
ompt_id_t host_op_id;
|
| 992 |
+
unsigned int requested_num_teams;
|
| 993 |
+
unsigned int granted_num_teams;
|
| 994 |
+
ompt_device_time_t end_time;
|
| 995 |
+
} ompt_record_target_kernel_t;
|
| 996 |
+
|
| 997 |
+
typedef int (*ompt_callback_control_tool_t) (
|
| 998 |
+
uint64_t command,
|
| 999 |
+
uint64_t modifier,
|
| 1000 |
+
void *arg,
|
| 1001 |
+
const void *codeptr_ra
|
| 1002 |
+
);
|
| 1003 |
+
|
| 1004 |
+
typedef struct ompt_record_control_tool_t {
|
| 1005 |
+
uint64_t command;
|
| 1006 |
+
uint64_t modifier;
|
| 1007 |
+
const void *codeptr_ra;
|
| 1008 |
+
} ompt_record_control_tool_t;
|
| 1009 |
+
|
| 1010 |
+
typedef struct ompd_address_t {
|
| 1011 |
+
ompd_seg_t segment;
|
| 1012 |
+
ompd_addr_t address;
|
| 1013 |
+
} ompd_address_t;
|
| 1014 |
+
|
| 1015 |
+
typedef struct ompd_frame_info_t {
|
| 1016 |
+
ompd_address_t frame_address;
|
| 1017 |
+
ompd_word_t frame_flag;
|
| 1018 |
+
} ompd_frame_info_t;
|
| 1019 |
+
|
| 1020 |
+
typedef struct _ompd_aspace_handle ompd_address_space_handle_t;
|
| 1021 |
+
typedef struct _ompd_thread_handle ompd_thread_handle_t;
|
| 1022 |
+
typedef struct _ompd_parallel_handle ompd_parallel_handle_t;
|
| 1023 |
+
typedef struct _ompd_task_handle ompd_task_handle_t;
|
| 1024 |
+
|
| 1025 |
+
typedef struct _ompd_aspace_cont ompd_address_space_context_t;
|
| 1026 |
+
typedef struct _ompd_thread_cont ompd_thread_context_t;
|
| 1027 |
+
|
| 1028 |
+
typedef struct ompd_device_type_sizes_t {
|
| 1029 |
+
uint8_t sizeof_char;
|
| 1030 |
+
uint8_t sizeof_short;
|
| 1031 |
+
uint8_t sizeof_int;
|
| 1032 |
+
uint8_t sizeof_long;
|
| 1033 |
+
uint8_t sizeof_long_long;
|
| 1034 |
+
uint8_t sizeof_pointer;
|
| 1035 |
+
} ompd_device_type_sizes_t;
|
| 1036 |
+
|
| 1037 |
+
typedef struct ompt_record_ompt_t {
|
| 1038 |
+
ompt_callbacks_t type;
|
| 1039 |
+
ompt_device_time_t time;
|
| 1040 |
+
ompt_id_t thread_id;
|
| 1041 |
+
ompt_id_t target_id;
|
| 1042 |
+
union {
|
| 1043 |
+
ompt_record_thread_begin_t thread_begin;
|
| 1044 |
+
ompt_record_parallel_begin_t parallel_begin;
|
| 1045 |
+
ompt_record_parallel_end_t parallel_end;
|
| 1046 |
+
ompt_record_work_t work;
|
| 1047 |
+
ompt_record_dispatch_t dispatch;
|
| 1048 |
+
ompt_record_task_create_t task_create;
|
| 1049 |
+
ompt_record_dependences_t dependences;
|
| 1050 |
+
ompt_record_task_dependence_t task_dependence;
|
| 1051 |
+
ompt_record_task_schedule_t task_schedule;
|
| 1052 |
+
ompt_record_implicit_task_t implicit_task;
|
| 1053 |
+
ompt_record_master_t master;
|
| 1054 |
+
ompt_record_sync_region_t sync_region;
|
| 1055 |
+
ompt_record_mutex_acquire_t mutex_acquire;
|
| 1056 |
+
ompt_record_mutex_t mutex;
|
| 1057 |
+
ompt_record_nest_lock_t nest_lock;
|
| 1058 |
+
ompt_record_flush_t flush;
|
| 1059 |
+
ompt_record_cancel_t cancel;
|
| 1060 |
+
ompt_record_target_t target;
|
| 1061 |
+
ompt_record_target_data_op_t target_data_op;
|
| 1062 |
+
ompt_record_target_map_t target_map;
|
| 1063 |
+
ompt_record_target_kernel_t target_kernel;
|
| 1064 |
+
ompt_record_control_tool_t control_tool;
|
| 1065 |
+
} record;
|
| 1066 |
+
} ompt_record_ompt_t;
|
| 1067 |
+
|
| 1068 |
+
typedef ompt_record_ompt_t *(*ompt_get_record_ompt_t) (
|
| 1069 |
+
ompt_buffer_t *buffer,
|
| 1070 |
+
ompt_buffer_cursor_t current
|
| 1071 |
+
);
|
| 1072 |
+
|
| 1073 |
+
#define ompt_id_none 0
|
| 1074 |
+
#define ompt_data_none {0}
|
| 1075 |
+
#define ompt_time_none 0
|
| 1076 |
+
#define ompt_hwid_none 0
|
| 1077 |
+
#define ompt_addr_none ~0
|
| 1078 |
+
#define ompt_mutex_impl_none 0
|
| 1079 |
+
#define ompt_wait_id_none 0
|
| 1080 |
+
|
| 1081 |
+
#define ompd_segment_none 0
|
| 1082 |
+
|
| 1083 |
+
#endif /* __OMPT__ */
|
lib/python3.12/site-packages/nvidia/cuda_cupti/include/__init__.py
ADDED
|
File without changes
|
lib/python3.12/site-packages/nvidia/cuda_cupti/include/__pycache__/__init__.cpython-312.pyc
ADDED
|
Binary file (204 Bytes). View file
|
|
|
lib/python3.12/site-packages/nvidia/cuda_cupti/include/cuda_stdint.h
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
* Copyright 2009-2017 NVIDIA Corporation. All rights reserved.
|
| 3 |
+
*
|
| 4 |
+
* Redistribution and use in source and binary forms, with or without
|
| 5 |
+
* modification, are permitted provided that the following conditions
|
| 6 |
+
* are met:
|
| 7 |
+
* * Redistributions of source code must retain the above copyright
|
| 8 |
+
* notice, this list of conditions and the following disclaimer.
|
| 9 |
+
* * Redistributions in binary form must reproduce the above copyright
|
| 10 |
+
* notice, this list of conditions and the following disclaimer in the
|
| 11 |
+
* documentation and/or other materials provided with the distribution.
|
| 12 |
+
* * Neither the name of NVIDIA CORPORATION nor the names of its
|
| 13 |
+
* contributors may be used to endorse or promote products derived
|
| 14 |
+
* from this software without specific prior written permission.
|
| 15 |
+
*
|
| 16 |
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
|
| 17 |
+
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
| 18 |
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
| 19 |
+
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
| 20 |
+
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
| 21 |
+
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
| 22 |
+
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
| 23 |
+
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
| 24 |
+
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| 25 |
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| 26 |
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| 27 |
+
*/
|
| 28 |
+
|
| 29 |
+
#ifndef __cuda_stdint_h__
|
| 30 |
+
#define __cuda_stdint_h__
|
| 31 |
+
|
| 32 |
+
// Compiler-specific treatment for C99's stdint.h
|
| 33 |
+
//
|
| 34 |
+
// By default, this header will use the standard headers (so it
|
| 35 |
+
// is your responsibility to make sure they are available), except
|
| 36 |
+
// on MSVC before Visual Studio 2010, when they were not provided.
|
| 37 |
+
// To support old MSVC, a few of the commonly-used definitions are
|
| 38 |
+
// provided here. If more definitions are needed, add them here,
|
| 39 |
+
// or replace these definitions with a complete implementation,
|
| 40 |
+
// such as the ones available from Google, Boost, or MSVC10. You
|
| 41 |
+
// can prevent the definition of any of these types (in order to
|
| 42 |
+
// use your own) by #defining CU_STDINT_TYPES_ALREADY_DEFINED.
|
| 43 |
+
|
| 44 |
+
#if !defined(CU_STDINT_TYPES_ALREADY_DEFINED)
|
| 45 |
+
|
| 46 |
+
// In VS including stdint.h forces the C++ runtime dep - provide an opt-out
|
| 47 |
+
// (CU_STDINT_VS_FORCE_NO_STDINT_H) for users that care (notably static
|
| 48 |
+
// cudart).
|
| 49 |
+
#if defined(_MSC_VER) && ((_MSC_VER < 1600) || defined(CU_STDINT_VS_FORCE_NO_STDINT_H))
|
| 50 |
+
|
| 51 |
+
// These definitions can be used with MSVC 8 and 9,
|
| 52 |
+
// which don't ship with stdint.h:
|
| 53 |
+
|
| 54 |
+
typedef unsigned char uint8_t;
|
| 55 |
+
|
| 56 |
+
typedef short int16_t;
|
| 57 |
+
typedef unsigned short uint16_t;
|
| 58 |
+
|
| 59 |
+
// To keep it consistent with all MSVC build. define those types
|
| 60 |
+
// in the exact same way they are defined with the MSVC headers
|
| 61 |
+
#if defined(_MSC_VER)
|
| 62 |
+
typedef signed char int8_t;
|
| 63 |
+
|
| 64 |
+
typedef int int32_t;
|
| 65 |
+
typedef unsigned int uint32_t;
|
| 66 |
+
|
| 67 |
+
typedef long long int64_t;
|
| 68 |
+
typedef unsigned long long uint64_t;
|
| 69 |
+
#else
|
| 70 |
+
typedef char int8_t;
|
| 71 |
+
|
| 72 |
+
typedef long int32_t;
|
| 73 |
+
typedef unsigned long uint32_t;
|
| 74 |
+
|
| 75 |
+
typedef __int64 int64_t;
|
| 76 |
+
typedef unsigned __int64 uint64_t;
|
| 77 |
+
#endif
|
| 78 |
+
|
| 79 |
+
#elif defined(__DJGPP__)
|
| 80 |
+
|
| 81 |
+
// These definitions can be used when compiling
|
| 82 |
+
// C code with DJGPP, which only provides stdint.h
|
| 83 |
+
// when compiling C++ code with TR1 enabled.
|
| 84 |
+
|
| 85 |
+
typedef char int8_t;
|
| 86 |
+
typedef unsigned char uint8_t;
|
| 87 |
+
|
| 88 |
+
typedef short int16_t;
|
| 89 |
+
typedef unsigned short uint16_t;
|
| 90 |
+
|
| 91 |
+
typedef long int32_t;
|
| 92 |
+
typedef unsigned long uint32_t;
|
| 93 |
+
|
| 94 |
+
typedef long long int64_t;
|
| 95 |
+
typedef unsigned long long uint64_t;
|
| 96 |
+
|
| 97 |
+
#else
|
| 98 |
+
|
| 99 |
+
// Use standard headers, as specified by C99 and C++ TR1.
|
| 100 |
+
// Known to be provided by:
|
| 101 |
+
// - gcc/glibc, supported by all versions of glibc
|
| 102 |
+
// - djgpp, supported since 2001
|
| 103 |
+
// - MSVC, supported by Visual Studio 2010 and later
|
| 104 |
+
|
| 105 |
+
#include <stdint.h>
|
| 106 |
+
|
| 107 |
+
#endif
|
| 108 |
+
|
| 109 |
+
#endif // !defined(CU_STDINT_TYPES_ALREADY_DEFINED)
|
| 110 |
+
|
| 111 |
+
|
| 112 |
+
#endif // file guard
|
lib/python3.12/site-packages/nvidia/cuda_cupti/include/cupti.h
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
* Copyright 2010-2017 NVIDIA Corporation. All rights reserved.
|
| 3 |
+
*
|
| 4 |
+
* NOTICE TO LICENSEE:
|
| 5 |
+
*
|
| 6 |
+
* This source code and/or documentation ("Licensed Deliverables") are
|
| 7 |
+
* subject to NVIDIA intellectual property rights under U.S. and
|
| 8 |
+
* international Copyright laws.
|
| 9 |
+
*
|
| 10 |
+
* These Licensed Deliverables contained herein is PROPRIETARY and
|
| 11 |
+
* CONFIDENTIAL to NVIDIA and is being provided under the terms and
|
| 12 |
+
* conditions of a form of NVIDIA software license agreement by and
|
| 13 |
+
* between NVIDIA and Licensee ("License Agreement") or electronically
|
| 14 |
+
* accepted by Licensee. Notwithstanding any terms or conditions to
|
| 15 |
+
* the contrary in the License Agreement, reproduction or disclosure
|
| 16 |
+
* of the Licensed Deliverables to any third party without the express
|
| 17 |
+
* written consent of NVIDIA is prohibited.
|
| 18 |
+
*
|
| 19 |
+
* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
|
| 20 |
+
* LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
|
| 21 |
+
* SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. IT IS
|
| 22 |
+
* PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
|
| 23 |
+
* NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
|
| 24 |
+
* DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
|
| 25 |
+
* NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
|
| 26 |
+
* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
|
| 27 |
+
* LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
|
| 28 |
+
* SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
|
| 29 |
+
* DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
| 30 |
+
* WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
| 31 |
+
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
| 32 |
+
* OF THESE LICENSED DELIVERABLES.
|
| 33 |
+
*
|
| 34 |
+
* U.S. Government End Users. These Licensed Deliverables are a
|
| 35 |
+
* "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
|
| 36 |
+
* 1995), consisting of "commercial computer software" and "commercial
|
| 37 |
+
* computer software documentation" as such terms are used in 48
|
| 38 |
+
* C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
|
| 39 |
+
* only as a commercial end item. Consistent with 48 C.F.R.12.212 and
|
| 40 |
+
* 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
|
| 41 |
+
* U.S. Government End Users acquire the Licensed Deliverables with
|
| 42 |
+
* only those rights set forth herein.
|
| 43 |
+
*
|
| 44 |
+
* Any use of the Licensed Deliverables in individual and commercial
|
| 45 |
+
* software must include, in the user documentation and internal
|
| 46 |
+
* comments to the code, the above Disclaimer and U.S. Government End
|
| 47 |
+
* Users Notice.
|
| 48 |
+
*/
|
| 49 |
+
|
| 50 |
+
#if !defined(_CUPTI_H_)
|
| 51 |
+
#define _CUPTI_H_
|
| 52 |
+
|
| 53 |
+
#ifdef _WIN32
|
| 54 |
+
#ifndef WIN32_LEAN_AND_MEAN
|
| 55 |
+
#define WIN32_LEAN_AND_MEAN
|
| 56 |
+
#endif
|
| 57 |
+
#ifdef NOMINMAX
|
| 58 |
+
#include <windows.h>
|
| 59 |
+
#else
|
| 60 |
+
#define NOMINMAX
|
| 61 |
+
#include <windows.h>
|
| 62 |
+
#undef NOMINMAX
|
| 63 |
+
#endif
|
| 64 |
+
#endif
|
| 65 |
+
|
| 66 |
+
#include <cuda.h>
|
| 67 |
+
#include <cupti_result.h>
|
| 68 |
+
#include <cupti_version.h>
|
| 69 |
+
|
| 70 |
+
/* Activity, callback, event and metric APIs */
|
| 71 |
+
#include <cupti_activity.h>
|
| 72 |
+
#include <cupti_callbacks.h>
|
| 73 |
+
#include <cupti_events.h>
|
| 74 |
+
#include <cupti_metrics.h>
|
| 75 |
+
|
| 76 |
+
/* Runtime, driver, and nvtx function identifiers */
|
| 77 |
+
#include <cupti_driver_cbid.h>
|
| 78 |
+
#include <cupti_runtime_cbid.h>
|
| 79 |
+
#include <cupti_nvtx_cbid.h>
|
| 80 |
+
|
| 81 |
+
/* To support function parameter structures for obsoleted API. See
|
| 82 |
+
cuda.h for the actual definition of these structures. */
|
| 83 |
+
typedef unsigned int CUdeviceptr_v1;
|
| 84 |
+
typedef struct CUDA_MEMCPY2D_v1_st { int dummy; } CUDA_MEMCPY2D_v1;
|
| 85 |
+
typedef struct CUDA_MEMCPY3D_v1_st { int dummy; } CUDA_MEMCPY3D_v1;
|
| 86 |
+
typedef struct CUDA_ARRAY_DESCRIPTOR_v1_st { int dummy; } CUDA_ARRAY_DESCRIPTOR_v1;
|
| 87 |
+
typedef struct CUDA_ARRAY3D_DESCRIPTOR_v1_st { int dummy; } CUDA_ARRAY3D_DESCRIPTOR_v1;
|
| 88 |
+
|
| 89 |
+
/* Function parameter structures */
|
| 90 |
+
#include <generated_cuda_runtime_api_meta.h>
|
| 91 |
+
#include <generated_cuda_meta.h>
|
| 92 |
+
|
| 93 |
+
/* The following parameter structures cannot be included unless a
|
| 94 |
+
header that defines GL_VERSION is included before including them.
|
| 95 |
+
If these are needed then make sure such a header is included
|
| 96 |
+
already. */
|
| 97 |
+
#ifdef GL_VERSION
|
| 98 |
+
#include <generated_cuda_gl_interop_meta.h>
|
| 99 |
+
#include <generated_cudaGL_meta.h>
|
| 100 |
+
#endif
|
| 101 |
+
|
| 102 |
+
//#include <generated_nvtx_meta.h>
|
| 103 |
+
|
| 104 |
+
/* The following parameter structures cannot be included by default as
|
| 105 |
+
they are not guaranteed to be available on all systems. Uncomment
|
| 106 |
+
the includes that are available, or use the include explicitly. */
|
| 107 |
+
#if defined(__linux__)
|
| 108 |
+
//#include <generated_cuda_vdpau_interop_meta.h>
|
| 109 |
+
//#include <generated_cudaVDPAU_meta.h>
|
| 110 |
+
#endif
|
| 111 |
+
|
| 112 |
+
#ifdef _WIN32
|
| 113 |
+
//#include <generated_cuda_d3d9_interop_meta.h>
|
| 114 |
+
//#include <generated_cuda_d3d10_interop_meta.h>
|
| 115 |
+
//#include <generated_cuda_d3d11_interop_meta.h>
|
| 116 |
+
//#include <generated_cudaD3D9_meta.h>
|
| 117 |
+
//#include <generated_cudaD3D10_meta.h>
|
| 118 |
+
//#include <generated_cudaD3D11_meta.h>
|
| 119 |
+
#endif
|
| 120 |
+
|
| 121 |
+
#endif /*_CUPTI_H_*/
|
| 122 |
+
|
| 123 |
+
|
lib/python3.12/site-packages/nvidia/cuda_cupti/include/cupti_activity.h
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
lib/python3.12/site-packages/nvidia/cuda_cupti/include/cupti_activity_deprecated.h
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
lib/python3.12/site-packages/nvidia/cuda_cupti/include/cupti_callbacks.h
ADDED
|
@@ -0,0 +1,860 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
* Copyright 2010-2023 NVIDIA Corporation. All rights reserved.
|
| 3 |
+
*
|
| 4 |
+
* NOTICE TO LICENSEE:
|
| 5 |
+
*
|
| 6 |
+
* This source code and/or documentation ("Licensed Deliverables") are
|
| 7 |
+
* subject to NVIDIA intellectual property rights under U.S. and
|
| 8 |
+
* international Copyright laws.
|
| 9 |
+
*
|
| 10 |
+
* These Licensed Deliverables contained herein is PROPRIETARY and
|
| 11 |
+
* CONFIDENTIAL to NVIDIA and is being provided under the terms and
|
| 12 |
+
* conditions of a form of NVIDIA software license agreement by and
|
| 13 |
+
* between NVIDIA and Licensee ("License Agreement") or electronically
|
| 14 |
+
* accepted by Licensee. Notwithstanding any terms or conditions to
|
| 15 |
+
* the contrary in the License Agreement, reproduction or disclosure
|
| 16 |
+
* of the Licensed Deliverables to any third party without the express
|
| 17 |
+
* written consent of NVIDIA is prohibited.
|
| 18 |
+
*
|
| 19 |
+
* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
|
| 20 |
+
* LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
|
| 21 |
+
* SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. IT IS
|
| 22 |
+
* PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
|
| 23 |
+
* NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
|
| 24 |
+
* DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
|
| 25 |
+
* NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
|
| 26 |
+
* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
|
| 27 |
+
* LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
|
| 28 |
+
* SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
|
| 29 |
+
* DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
| 30 |
+
* WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
| 31 |
+
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
| 32 |
+
* OF THESE LICENSED DELIVERABLES.
|
| 33 |
+
*
|
| 34 |
+
* U.S. Government End Users. These Licensed Deliverables are a
|
| 35 |
+
* "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
|
| 36 |
+
* 1995), consisting of "commercial computer software" and "commercial
|
| 37 |
+
* computer software documentation" as such terms are used in 48
|
| 38 |
+
* C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
|
| 39 |
+
* only as a commercial end item. Consistent with 48 C.F.R.12.212 and
|
| 40 |
+
* 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
|
| 41 |
+
* U.S. Government End Users acquire the Licensed Deliverables with
|
| 42 |
+
* only those rights set forth herein.
|
| 43 |
+
*
|
| 44 |
+
* Any use of the Licensed Deliverables in individual and commercial
|
| 45 |
+
* software must include, in the user documentation and internal
|
| 46 |
+
* comments to the code, the above Disclaimer and U.S. Government End
|
| 47 |
+
* Users Notice.
|
| 48 |
+
*/
|
| 49 |
+
|
| 50 |
+
#if !defined(__CUPTI_CALLBACKS_H__)
|
| 51 |
+
#define __CUPTI_CALLBACKS_H__
|
| 52 |
+
|
| 53 |
+
#include <cuda.h>
|
| 54 |
+
#include <builtin_types.h>
|
| 55 |
+
#include <string.h>
|
| 56 |
+
#include <cuda_stdint.h>
|
| 57 |
+
#include <cupti_result.h>
|
| 58 |
+
|
| 59 |
+
#ifndef CUPTIAPI
|
| 60 |
+
#ifdef _WIN32
|
| 61 |
+
#define CUPTIAPI __stdcall
|
| 62 |
+
#else
|
| 63 |
+
#define CUPTIAPI
|
| 64 |
+
#endif
|
| 65 |
+
#endif
|
| 66 |
+
|
| 67 |
+
#if defined(__cplusplus)
|
| 68 |
+
extern "C" {
|
| 69 |
+
#endif
|
| 70 |
+
|
| 71 |
+
#if defined(__GNUC__) && defined(CUPTI_LIB)
|
| 72 |
+
#pragma GCC visibility push(default)
|
| 73 |
+
#endif
|
| 74 |
+
|
| 75 |
+
/**
|
| 76 |
+
* \defgroup CUPTI_CALLBACK_API CUPTI Callback API
|
| 77 |
+
* Functions, types, and enums that implement the CUPTI Callback API.
|
| 78 |
+
* @{
|
| 79 |
+
*/
|
| 80 |
+
|
| 81 |
+
/**
|
| 82 |
+
* \brief Specifies the point in an API call that a callback is issued.
|
| 83 |
+
*
|
| 84 |
+
* Specifies the point in an API call that a callback is issued. This
|
| 85 |
+
* value is communicated to the callback function via \ref
|
| 86 |
+
* CUpti_CallbackData::callbackSite.
|
| 87 |
+
*/
|
| 88 |
+
typedef enum {
|
| 89 |
+
/**
|
| 90 |
+
* The callback is at the entry of the API call.
|
| 91 |
+
*/
|
| 92 |
+
CUPTI_API_ENTER = 0,
|
| 93 |
+
/**
|
| 94 |
+
* The callback is at the exit of the API call.
|
| 95 |
+
*/
|
| 96 |
+
CUPTI_API_EXIT = 1,
|
| 97 |
+
CUPTI_API_CBSITE_FORCE_INT = 0x7fffffff
|
| 98 |
+
} CUpti_ApiCallbackSite;
|
| 99 |
+
|
| 100 |
+
/**
|
| 101 |
+
* \brief Callback domains.
|
| 102 |
+
*
|
| 103 |
+
* Callback domains. Each domain represents callback points for a
|
| 104 |
+
* group of related API functions or CUDA driver activity.
|
| 105 |
+
*/
|
| 106 |
+
typedef enum {
|
| 107 |
+
/**
|
| 108 |
+
* Invalid domain.
|
| 109 |
+
*/
|
| 110 |
+
CUPTI_CB_DOMAIN_INVALID = 0,
|
| 111 |
+
/**
|
| 112 |
+
* Domain containing callback points for all driver API functions.
|
| 113 |
+
*/
|
| 114 |
+
CUPTI_CB_DOMAIN_DRIVER_API = 1,
|
| 115 |
+
/**
|
| 116 |
+
* Domain containing callback points for all runtime API
|
| 117 |
+
* functions.
|
| 118 |
+
*/
|
| 119 |
+
CUPTI_CB_DOMAIN_RUNTIME_API = 2,
|
| 120 |
+
/**
|
| 121 |
+
* Domain containing callback points for CUDA resource tracking.
|
| 122 |
+
*/
|
| 123 |
+
CUPTI_CB_DOMAIN_RESOURCE = 3,
|
| 124 |
+
/**
|
| 125 |
+
* Domain containing callback points for CUDA synchronization.
|
| 126 |
+
*/
|
| 127 |
+
CUPTI_CB_DOMAIN_SYNCHRONIZE = 4,
|
| 128 |
+
/**
|
| 129 |
+
* Domain containing callback points for NVTX API functions.
|
| 130 |
+
*/
|
| 131 |
+
CUPTI_CB_DOMAIN_NVTX = 5,
|
| 132 |
+
/**
|
| 133 |
+
* Domain containing callback points for various states.
|
| 134 |
+
*/
|
| 135 |
+
CUPTI_CB_DOMAIN_STATE,
|
| 136 |
+
CUPTI_CB_DOMAIN_SIZE,
|
| 137 |
+
|
| 138 |
+
CUPTI_CB_DOMAIN_FORCE_INT = 0x7fffffff
|
| 139 |
+
} CUpti_CallbackDomain;
|
| 140 |
+
|
| 141 |
+
/**
|
| 142 |
+
* \brief Callback IDs for resource domain.
|
| 143 |
+
*
|
| 144 |
+
* Callback IDs for resource domain, CUPTI_CB_DOMAIN_RESOURCE. This
|
| 145 |
+
* value is communicated to the callback function via the \p cbid
|
| 146 |
+
* parameter.
|
| 147 |
+
*/
|
| 148 |
+
typedef enum {
|
| 149 |
+
/**
|
| 150 |
+
* Invalid resource callback ID.
|
| 151 |
+
*/
|
| 152 |
+
CUPTI_CBID_RESOURCE_INVALID = 0,
|
| 153 |
+
/**
|
| 154 |
+
* A new context has been created.
|
| 155 |
+
*/
|
| 156 |
+
CUPTI_CBID_RESOURCE_CONTEXT_CREATED = 1,
|
| 157 |
+
/**
|
| 158 |
+
* A context is about to be destroyed.
|
| 159 |
+
*/
|
| 160 |
+
CUPTI_CBID_RESOURCE_CONTEXT_DESTROY_STARTING = 2,
|
| 161 |
+
/**
|
| 162 |
+
* A new stream has been created.
|
| 163 |
+
*/
|
| 164 |
+
CUPTI_CBID_RESOURCE_STREAM_CREATED = 3,
|
| 165 |
+
/**
|
| 166 |
+
* A stream is about to be destroyed.
|
| 167 |
+
*/
|
| 168 |
+
CUPTI_CBID_RESOURCE_STREAM_DESTROY_STARTING = 4,
|
| 169 |
+
/**
|
| 170 |
+
* The driver has finished initializing.
|
| 171 |
+
*/
|
| 172 |
+
CUPTI_CBID_RESOURCE_CU_INIT_FINISHED = 5,
|
| 173 |
+
/**
|
| 174 |
+
* A module has been loaded.
|
| 175 |
+
*/
|
| 176 |
+
CUPTI_CBID_RESOURCE_MODULE_LOADED = 6,
|
| 177 |
+
/**
|
| 178 |
+
* A module is about to be unloaded.
|
| 179 |
+
*/
|
| 180 |
+
CUPTI_CBID_RESOURCE_MODULE_UNLOAD_STARTING = 7,
|
| 181 |
+
/**
|
| 182 |
+
* The current module which is being profiled.
|
| 183 |
+
*/
|
| 184 |
+
CUPTI_CBID_RESOURCE_MODULE_PROFILED = 8,
|
| 185 |
+
/**
|
| 186 |
+
* CUDA graph has been created.
|
| 187 |
+
*/
|
| 188 |
+
CUPTI_CBID_RESOURCE_GRAPH_CREATED = 9,
|
| 189 |
+
/**
|
| 190 |
+
* CUDA graph is about to be destroyed.
|
| 191 |
+
*/
|
| 192 |
+
CUPTI_CBID_RESOURCE_GRAPH_DESTROY_STARTING = 10,
|
| 193 |
+
/**
|
| 194 |
+
* CUDA graph is cloned.
|
| 195 |
+
*/
|
| 196 |
+
CUPTI_CBID_RESOURCE_GRAPH_CLONED = 11,
|
| 197 |
+
/**
|
| 198 |
+
* CUDA graph node is about to be created
|
| 199 |
+
*/
|
| 200 |
+
CUPTI_CBID_RESOURCE_GRAPHNODE_CREATE_STARTING = 12,
|
| 201 |
+
/**
|
| 202 |
+
* CUDA graph node is created.
|
| 203 |
+
*/
|
| 204 |
+
CUPTI_CBID_RESOURCE_GRAPHNODE_CREATED = 13,
|
| 205 |
+
/**
|
| 206 |
+
* CUDA graph node is about to be destroyed.
|
| 207 |
+
*/
|
| 208 |
+
CUPTI_CBID_RESOURCE_GRAPHNODE_DESTROY_STARTING = 14,
|
| 209 |
+
/**
|
| 210 |
+
* Dependency on a CUDA graph node is created.
|
| 211 |
+
*/
|
| 212 |
+
CUPTI_CBID_RESOURCE_GRAPHNODE_DEPENDENCY_CREATED = 15,
|
| 213 |
+
/**
|
| 214 |
+
* Dependency on a CUDA graph node is destroyed.
|
| 215 |
+
*/
|
| 216 |
+
CUPTI_CBID_RESOURCE_GRAPHNODE_DEPENDENCY_DESTROY_STARTING = 16,
|
| 217 |
+
/**
|
| 218 |
+
* An executable CUDA graph is about to be created.
|
| 219 |
+
*/
|
| 220 |
+
CUPTI_CBID_RESOURCE_GRAPHEXEC_CREATE_STARTING = 17,
|
| 221 |
+
/**
|
| 222 |
+
* An executable CUDA graph is created.
|
| 223 |
+
*/
|
| 224 |
+
CUPTI_CBID_RESOURCE_GRAPHEXEC_CREATED = 18,
|
| 225 |
+
/**
|
| 226 |
+
* An executable CUDA graph is about to be destroyed.
|
| 227 |
+
*/
|
| 228 |
+
CUPTI_CBID_RESOURCE_GRAPHEXEC_DESTROY_STARTING = 19,
|
| 229 |
+
/**
|
| 230 |
+
* CUDA graph node is cloned.
|
| 231 |
+
*/
|
| 232 |
+
CUPTI_CBID_RESOURCE_GRAPHNODE_CLONED = 20,
|
| 233 |
+
/**
|
| 234 |
+
* CUDA stream attribute is changed.
|
| 235 |
+
*/
|
| 236 |
+
CUPTI_CBID_RESOURCE_STREAM_ATTRIBUTE_CHANGED = 21,
|
| 237 |
+
|
| 238 |
+
CUPTI_CBID_RESOURCE_SIZE,
|
| 239 |
+
CUPTI_CBID_RESOURCE_FORCE_INT = 0x7fffffff
|
| 240 |
+
} CUpti_CallbackIdResource;
|
| 241 |
+
|
| 242 |
+
/**
|
| 243 |
+
* \brief Callback IDs for synchronization domain.
|
| 244 |
+
*
|
| 245 |
+
* Callback IDs for synchronization domain,
|
| 246 |
+
* CUPTI_CB_DOMAIN_SYNCHRONIZE. This value is communicated to the
|
| 247 |
+
* callback function via the \p cbid parameter.
|
| 248 |
+
*/
|
| 249 |
+
typedef enum {
|
| 250 |
+
/**
|
| 251 |
+
* Invalid synchronize callback ID.
|
| 252 |
+
*/
|
| 253 |
+
CUPTI_CBID_SYNCHRONIZE_INVALID = 0,
|
| 254 |
+
/**
|
| 255 |
+
* Stream synchronization has completed for the stream.
|
| 256 |
+
*/
|
| 257 |
+
CUPTI_CBID_SYNCHRONIZE_STREAM_SYNCHRONIZED = 1,
|
| 258 |
+
/**
|
| 259 |
+
* Context synchronization has completed for the context.
|
| 260 |
+
*/
|
| 261 |
+
CUPTI_CBID_SYNCHRONIZE_CONTEXT_SYNCHRONIZED = 2,
|
| 262 |
+
CUPTI_CBID_SYNCHRONIZE_SIZE,
|
| 263 |
+
CUPTI_CBID_SYNCHRONIZE_FORCE_INT = 0x7fffffff
|
| 264 |
+
} CUpti_CallbackIdSync;
|
| 265 |
+
|
| 266 |
+
/**
|
| 267 |
+
* \brief Callback IDs for state domain.
|
| 268 |
+
*
|
| 269 |
+
* Callback IDs for state domain,
|
| 270 |
+
* CUPTI_CB_DOMAIN_STATE. This value is communicated to the
|
| 271 |
+
* callback function via the \p cbid parameter.
|
| 272 |
+
*/
|
| 273 |
+
typedef enum {
|
| 274 |
+
/**
|
| 275 |
+
* Invalid state callback ID.
|
| 276 |
+
*/
|
| 277 |
+
CUPTI_CBID_STATE_INVALID = 0,
|
| 278 |
+
/**
|
| 279 |
+
* Notification of fatal errors - high impact, non-recoverable
|
| 280 |
+
* When encountered, CUPTI automatically invokes cuptiFinalize()
|
| 281 |
+
* User can control behavior of the application in future from
|
| 282 |
+
* receiving this callback - such as continuing without profiling, or
|
| 283 |
+
* terminating the whole application.
|
| 284 |
+
*/
|
| 285 |
+
CUPTI_CBID_STATE_FATAL_ERROR = 1,
|
| 286 |
+
/**
|
| 287 |
+
* Notification of non fatal errors - high impact, but recoverable
|
| 288 |
+
* This notification is not issued in the current release.
|
| 289 |
+
*/
|
| 290 |
+
CUPTI_CBID_STATE_ERROR = 2,
|
| 291 |
+
/**
|
| 292 |
+
* Notification of warnings - low impact, recoverable
|
| 293 |
+
* This notification is not issued in the current release.
|
| 294 |
+
*/
|
| 295 |
+
CUPTI_CBID_STATE_WARNING = 3,
|
| 296 |
+
|
| 297 |
+
CUPTI_CBID_STATE_SIZE,
|
| 298 |
+
CUPTI_CBID_STATE_FORCE_INT = 0x7fffffff
|
| 299 |
+
} CUpti_CallbackIdState;
|
| 300 |
+
|
| 301 |
+
/**
|
| 302 |
+
* \brief Data passed into a runtime or driver API callback function.
|
| 303 |
+
*
|
| 304 |
+
* Data passed into a runtime or driver API callback function as the
|
| 305 |
+
* \p cbdata argument to \ref CUpti_CallbackFunc. The \p cbdata will
|
| 306 |
+
* be this type for \p domain equal to CUPTI_CB_DOMAIN_DRIVER_API or
|
| 307 |
+
* CUPTI_CB_DOMAIN_RUNTIME_API. The callback data is valid only within
|
| 308 |
+
* the invocation of the callback function that is passed the data. If
|
| 309 |
+
* you need to retain some data for use outside of the callback, you
|
| 310 |
+
* must make a copy of that data. For example, if you make a shallow
|
| 311 |
+
* copy of CUpti_CallbackData within a callback, you cannot
|
| 312 |
+
* dereference \p functionParams outside of that callback to access
|
| 313 |
+
* the function parameters. \p functionName is an exception: the
|
| 314 |
+
* string pointed to by \p functionName is a global constant and so
|
| 315 |
+
* may be accessed outside of the callback.
|
| 316 |
+
*/
|
| 317 |
+
typedef struct {
|
| 318 |
+
/**
|
| 319 |
+
* Point in the runtime or driver function from where the callback
|
| 320 |
+
* was issued.
|
| 321 |
+
*/
|
| 322 |
+
CUpti_ApiCallbackSite callbackSite;
|
| 323 |
+
|
| 324 |
+
/**
|
| 325 |
+
* Name of the runtime or driver API function which issued the
|
| 326 |
+
* callback. This string is a global constant and so may be
|
| 327 |
+
* accessed outside of the callback.
|
| 328 |
+
*/
|
| 329 |
+
const char *functionName;
|
| 330 |
+
|
| 331 |
+
/**
|
| 332 |
+
* Pointer to the arguments passed to the runtime or driver API
|
| 333 |
+
* call. See generated_cuda_runtime_api_meta.h and
|
| 334 |
+
* generated_cuda_meta.h for structure definitions for the
|
| 335 |
+
* parameters for each runtime and driver API function.
|
| 336 |
+
*/
|
| 337 |
+
const void *functionParams;
|
| 338 |
+
|
| 339 |
+
/**
|
| 340 |
+
* Pointer to the return value of the runtime or driver API
|
| 341 |
+
* call. This field is only valid within the exit::CUPTI_API_EXIT
|
| 342 |
+
* callback. For a runtime API \p functionReturnValue points to a
|
| 343 |
+
* \p cudaError_t. For a driver API \p functionReturnValue points
|
| 344 |
+
* to a \p CUresult.
|
| 345 |
+
*/
|
| 346 |
+
void *functionReturnValue;
|
| 347 |
+
|
| 348 |
+
/**
|
| 349 |
+
* Name of the symbol operated on by the runtime or driver API
|
| 350 |
+
* function which issued the callback. This entry is valid only for
|
| 351 |
+
* driver and runtime launch callbacks, where it returns the name of
|
| 352 |
+
* the kernel.
|
| 353 |
+
*/
|
| 354 |
+
const char *symbolName;
|
| 355 |
+
|
| 356 |
+
/**
|
| 357 |
+
* Driver context current to the thread, or null if no context is
|
| 358 |
+
* current. This value can change from the entry to exit callback
|
| 359 |
+
* of a runtime API function if the runtime initializes a context.
|
| 360 |
+
*/
|
| 361 |
+
CUcontext context;
|
| 362 |
+
|
| 363 |
+
/**
|
| 364 |
+
* Unique ID for the CUDA context associated with the thread. The
|
| 365 |
+
* UIDs are assigned sequentially as contexts are created and are
|
| 366 |
+
* unique within a process.
|
| 367 |
+
*/
|
| 368 |
+
uint32_t contextUid;
|
| 369 |
+
|
| 370 |
+
/**
|
| 371 |
+
* Pointer to data shared between the entry and exit callbacks of
|
| 372 |
+
* a given runtime or drive API function invocation. This field
|
| 373 |
+
* can be used to pass 64-bit values from the entry callback to
|
| 374 |
+
* the corresponding exit callback.
|
| 375 |
+
*/
|
| 376 |
+
uint64_t *correlationData;
|
| 377 |
+
|
| 378 |
+
/**
|
| 379 |
+
* The activity record correlation ID for this callback. For a
|
| 380 |
+
* driver domain callback (i.e. \p domain
|
| 381 |
+
* CUPTI_CB_DOMAIN_DRIVER_API) this ID will equal the correlation ID
|
| 382 |
+
* in the CUpti_ActivityAPI record corresponding to the CUDA driver
|
| 383 |
+
* function call. For a runtime domain callback (i.e. \p domain
|
| 384 |
+
* CUPTI_CB_DOMAIN_RUNTIME_API) this ID will equal the correlation
|
| 385 |
+
* ID in the CUpti_ActivityAPI record corresponding to the CUDA
|
| 386 |
+
* runtime function call. Within the callback, this ID can be
|
| 387 |
+
* recorded to correlate user data with the activity record. This
|
| 388 |
+
* field is new in 4.1.
|
| 389 |
+
*/
|
| 390 |
+
uint32_t correlationId;
|
| 391 |
+
|
| 392 |
+
} CUpti_CallbackData;
|
| 393 |
+
|
| 394 |
+
/**
|
| 395 |
+
* \brief Data passed into a resource callback function.
|
| 396 |
+
*
|
| 397 |
+
* Data passed into a resource callback function as the \p cbdata
|
| 398 |
+
* argument to \ref CUpti_CallbackFunc. The \p cbdata will be this
|
| 399 |
+
* type for \p domain equal to CUPTI_CB_DOMAIN_RESOURCE. The callback
|
| 400 |
+
* data is valid only within the invocation of the callback function
|
| 401 |
+
* that is passed the data. If you need to retain some data for use
|
| 402 |
+
* outside of the callback, you must make a copy of that data.
|
| 403 |
+
*/
|
| 404 |
+
typedef struct {
|
| 405 |
+
/**
|
| 406 |
+
* For CUPTI_CBID_RESOURCE_CONTEXT_CREATED and
|
| 407 |
+
* CUPTI_CBID_RESOURCE_CONTEXT_DESTROY_STARTING, the context being
|
| 408 |
+
* created or destroyed. For CUPTI_CBID_RESOURCE_STREAM_CREATED and
|
| 409 |
+
* CUPTI_CBID_RESOURCE_STREAM_DESTROY_STARTING, the context
|
| 410 |
+
* containing the stream being created or destroyed.
|
| 411 |
+
*/
|
| 412 |
+
CUcontext context;
|
| 413 |
+
|
| 414 |
+
union {
|
| 415 |
+
/**
|
| 416 |
+
* For CUPTI_CBID_RESOURCE_STREAM_CREATED and
|
| 417 |
+
* CUPTI_CBID_RESOURCE_STREAM_DESTROY_STARTING, the stream being
|
| 418 |
+
* created or destroyed.
|
| 419 |
+
*/
|
| 420 |
+
CUstream stream;
|
| 421 |
+
} resourceHandle;
|
| 422 |
+
|
| 423 |
+
/**
|
| 424 |
+
* Reserved for future use.
|
| 425 |
+
*/
|
| 426 |
+
void *resourceDescriptor;
|
| 427 |
+
} CUpti_ResourceData;
|
| 428 |
+
|
| 429 |
+
|
| 430 |
+
/**
|
| 431 |
+
* \brief Module data passed into a resource callback function.
|
| 432 |
+
*
|
| 433 |
+
* CUDA module data passed into a resource callback function as the \p cbdata
|
| 434 |
+
* argument to \ref CUpti_CallbackFunc. The \p cbdata will be this
|
| 435 |
+
* type for \p domain equal to CUPTI_CB_DOMAIN_RESOURCE. The module
|
| 436 |
+
* data is valid only within the invocation of the callback function
|
| 437 |
+
* that is passed the data. If you need to retain some data for use
|
| 438 |
+
* outside of the callback, you must make a copy of that data.
|
| 439 |
+
*/
|
| 440 |
+
|
| 441 |
+
typedef struct {
|
| 442 |
+
/**
|
| 443 |
+
* Identifier to associate with the CUDA module.
|
| 444 |
+
*/
|
| 445 |
+
uint32_t moduleId;
|
| 446 |
+
|
| 447 |
+
/**
|
| 448 |
+
* The size of the cubin.
|
| 449 |
+
*/
|
| 450 |
+
size_t cubinSize;
|
| 451 |
+
|
| 452 |
+
/**
|
| 453 |
+
* Pointer to the associated cubin.
|
| 454 |
+
*/
|
| 455 |
+
const char *pCubin;
|
| 456 |
+
} CUpti_ModuleResourceData;
|
| 457 |
+
|
| 458 |
+
/**
|
| 459 |
+
* \brief CUDA graphs data passed into a resource callback function.
|
| 460 |
+
*
|
| 461 |
+
* CUDA graphs data passed into a resource callback function as the \p cbdata
|
| 462 |
+
* argument to \ref CUpti_CallbackFunc. The \p cbdata will be this
|
| 463 |
+
* type for \p domain equal to CUPTI_CB_DOMAIN_RESOURCE. The graph
|
| 464 |
+
* data is valid only within the invocation of the callback function
|
| 465 |
+
* that is passed the data. If you need to retain some data for use
|
| 466 |
+
* outside of the callback, you must make a copy of that data.
|
| 467 |
+
*/
|
| 468 |
+
|
| 469 |
+
typedef struct {
|
| 470 |
+
/**
|
| 471 |
+
* CUDA graph
|
| 472 |
+
*/
|
| 473 |
+
CUgraph graph;
|
| 474 |
+
/**
|
| 475 |
+
* The original CUDA graph from which \param graph is cloned
|
| 476 |
+
*/
|
| 477 |
+
CUgraph originalGraph;
|
| 478 |
+
/**
|
| 479 |
+
* CUDA graph node
|
| 480 |
+
*/
|
| 481 |
+
CUgraphNode node;
|
| 482 |
+
/**
|
| 483 |
+
* The original CUDA graph node from which \param node is cloned
|
| 484 |
+
*/
|
| 485 |
+
CUgraphNode originalNode;
|
| 486 |
+
/**
|
| 487 |
+
* Type of the \param node
|
| 488 |
+
*/
|
| 489 |
+
CUgraphNodeType nodeType;
|
| 490 |
+
/**
|
| 491 |
+
* The dependent graph node
|
| 492 |
+
* The size of the array is \param numDependencies.
|
| 493 |
+
*/
|
| 494 |
+
CUgraphNode dependency;
|
| 495 |
+
/**
|
| 496 |
+
* CUDA executable graph
|
| 497 |
+
*/
|
| 498 |
+
CUgraphExec graphExec;
|
| 499 |
+
} CUpti_GraphData;
|
| 500 |
+
|
| 501 |
+
/**
|
| 502 |
+
* \brief Data passed into a synchronize callback function.
|
| 503 |
+
*
|
| 504 |
+
* Data passed into a synchronize callback function as the \p cbdata
|
| 505 |
+
* argument to \ref CUpti_CallbackFunc. The \p cbdata will be this
|
| 506 |
+
* type for \p domain equal to CUPTI_CB_DOMAIN_SYNCHRONIZE. The
|
| 507 |
+
* callback data is valid only within the invocation of the callback
|
| 508 |
+
* function that is passed the data. If you need to retain some data
|
| 509 |
+
* for use outside of the callback, you must make a copy of that data.
|
| 510 |
+
*/
|
| 511 |
+
typedef struct {
|
| 512 |
+
/**
|
| 513 |
+
* The context of the stream being synchronized.
|
| 514 |
+
*/
|
| 515 |
+
CUcontext context;
|
| 516 |
+
/**
|
| 517 |
+
* The stream being synchronized.
|
| 518 |
+
*/
|
| 519 |
+
CUstream stream;
|
| 520 |
+
} CUpti_SynchronizeData;
|
| 521 |
+
|
| 522 |
+
/**
|
| 523 |
+
* \brief Data passed into a NVTX callback function.
|
| 524 |
+
*
|
| 525 |
+
* Data passed into a NVTX callback function as the \p cbdata argument
|
| 526 |
+
* to \ref CUpti_CallbackFunc. The \p cbdata will be this type for \p
|
| 527 |
+
* domain equal to CUPTI_CB_DOMAIN_NVTX. Unless otherwise notes, the
|
| 528 |
+
* callback data is valid only within the invocation of the callback
|
| 529 |
+
* function that is passed the data. If you need to retain some data
|
| 530 |
+
* for use outside of the callback, you must make a copy of that data.
|
| 531 |
+
*/
|
| 532 |
+
typedef struct {
|
| 533 |
+
/**
|
| 534 |
+
* Name of the NVTX API function which issued the callback. This
|
| 535 |
+
* string is a global constant and so may be accessed outside of the
|
| 536 |
+
* callback.
|
| 537 |
+
*/
|
| 538 |
+
const char *functionName;
|
| 539 |
+
|
| 540 |
+
/**
|
| 541 |
+
* Pointer to the arguments passed to the NVTX API call. See
|
| 542 |
+
* generated_nvtx_meta.h for structure definitions for the
|
| 543 |
+
* parameters for each NVTX API function.
|
| 544 |
+
*/
|
| 545 |
+
const void *functionParams;
|
| 546 |
+
|
| 547 |
+
/**
|
| 548 |
+
* Pointer to the return value of the NVTX API call. See
|
| 549 |
+
* nvToolsExt.h for each NVTX API function's return value.
|
| 550 |
+
*/
|
| 551 |
+
const void *functionReturnValue;
|
| 552 |
+
} CUpti_NvtxData;
|
| 553 |
+
|
| 554 |
+
/**
|
| 555 |
+
* \brief Stream attribute data passed into a resource callback function
|
| 556 |
+
* for CUPTI_CBID_RESOURCE_STREAM_ATTRIBUTE_CHANGED callback
|
| 557 |
+
|
| 558 |
+
* Data passed into a resource callback function as the \p cbdata
|
| 559 |
+
* argument to \ref CUpti_CallbackFunc. The \p cbdata will be this
|
| 560 |
+
* type for \p domain equal to CUPTI_CB_DOMAIN_RESOURCE. The
|
| 561 |
+
* stream attribute data is valid only within the invocation of the callback
|
| 562 |
+
* function that is passed the data. If you need to retain some data
|
| 563 |
+
* for use outside of the callback, you must make a copy of that data.
|
| 564 |
+
*/
|
| 565 |
+
typedef struct {
|
| 566 |
+
/**
|
| 567 |
+
* The CUDA stream handle for the attribute
|
| 568 |
+
*/
|
| 569 |
+
CUstream stream;
|
| 570 |
+
|
| 571 |
+
/**
|
| 572 |
+
* The type of the CUDA stream attribute
|
| 573 |
+
*/
|
| 574 |
+
CUstreamAttrID attr;
|
| 575 |
+
|
| 576 |
+
/**
|
| 577 |
+
* The value of the CUDA stream attribute
|
| 578 |
+
*/
|
| 579 |
+
const CUstreamAttrValue *value;
|
| 580 |
+
} CUpti_StreamAttrData;
|
| 581 |
+
|
| 582 |
+
/**
|
| 583 |
+
* \brief Data passed into a State callback function.
|
| 584 |
+
*
|
| 585 |
+
* Data passed into a State callback function as the \p cbdata argument
|
| 586 |
+
* to \ref CUpti_CallbackFunc. The \p cbdata will be this type for \p
|
| 587 |
+
* domain equal to CUPTI_CB_DOMAIN_STATE and callback Ids belonging to CUpti_CallbackIdState.
|
| 588 |
+
* Unless otherwise noted, the callback data is valid only within the invocation of the callback
|
| 589 |
+
* function that is passed the data. If you need to retain some data
|
| 590 |
+
* for use outside of the callback, you must make a copy of that data.
|
| 591 |
+
*/
|
| 592 |
+
typedef struct {
|
| 593 |
+
union {
|
| 594 |
+
/**
|
| 595 |
+
* Data passed along with the callback Ids
|
| 596 |
+
* Enum CUpti_CallbackIdState used to denote callback ids
|
| 597 |
+
*/
|
| 598 |
+
struct {
|
| 599 |
+
/**
|
| 600 |
+
* Error code
|
| 601 |
+
*/
|
| 602 |
+
CUptiResult result;
|
| 603 |
+
/**
|
| 604 |
+
* String containing more details. It can be NULL.
|
| 605 |
+
*/
|
| 606 |
+
const char *message;
|
| 607 |
+
} notification;
|
| 608 |
+
};
|
| 609 |
+
} CUpti_StateData;
|
| 610 |
+
/**
|
| 611 |
+
* \brief An ID for a driver API, runtime API, resource or
|
| 612 |
+
* synchronization callback.
|
| 613 |
+
*
|
| 614 |
+
* An ID for a driver API, runtime API, resource or synchronization
|
| 615 |
+
* callback. Within a driver API callback this should be interpreted
|
| 616 |
+
* as a CUpti_driver_api_trace_cbid value (these values are defined in
|
| 617 |
+
* cupti_driver_cbid.h). Within a runtime API callback this should be
|
| 618 |
+
* interpreted as a CUpti_runtime_api_trace_cbid value (these values
|
| 619 |
+
* are defined in cupti_runtime_cbid.h). Within a resource API
|
| 620 |
+
* callback this should be interpreted as a \ref
|
| 621 |
+
* CUpti_CallbackIdResource value. Within a synchronize API callback
|
| 622 |
+
* this should be interpreted as a \ref CUpti_CallbackIdSync value.
|
| 623 |
+
*/
|
| 624 |
+
typedef uint32_t CUpti_CallbackId;
|
| 625 |
+
|
| 626 |
+
/**
|
| 627 |
+
* \brief Function type for a callback.
|
| 628 |
+
*
|
| 629 |
+
* Function type for a callback. The type of the data passed to the
|
| 630 |
+
* callback in \p cbdata depends on the \p domain. If \p domain is
|
| 631 |
+
* CUPTI_CB_DOMAIN_DRIVER_API or CUPTI_CB_DOMAIN_RUNTIME_API the type
|
| 632 |
+
* of \p cbdata will be CUpti_CallbackData. If \p domain is
|
| 633 |
+
* CUPTI_CB_DOMAIN_RESOURCE the type of \p cbdata will be
|
| 634 |
+
* CUpti_ResourceData. If \p domain is CUPTI_CB_DOMAIN_SYNCHRONIZE the
|
| 635 |
+
* type of \p cbdata will be CUpti_SynchronizeData. If \p domain is
|
| 636 |
+
* CUPTI_CB_DOMAIN_NVTX the type of \p cbdata will be CUpti_NvtxData.
|
| 637 |
+
*
|
| 638 |
+
* \param userdata User data supplied at subscription of the callback
|
| 639 |
+
* \param domain The domain of the callback
|
| 640 |
+
* \param cbid The ID of the callback
|
| 641 |
+
* \param cbdata Data passed to the callback.
|
| 642 |
+
*/
|
| 643 |
+
typedef void (CUPTIAPI *CUpti_CallbackFunc)(
|
| 644 |
+
void *userdata,
|
| 645 |
+
CUpti_CallbackDomain domain,
|
| 646 |
+
CUpti_CallbackId cbid,
|
| 647 |
+
const void *cbdata);
|
| 648 |
+
|
| 649 |
+
/**
|
| 650 |
+
* \brief A callback subscriber.
|
| 651 |
+
*/
|
| 652 |
+
typedef struct CUpti_Subscriber_st *CUpti_SubscriberHandle;
|
| 653 |
+
|
| 654 |
+
/**
|
| 655 |
+
* \brief Pointer to an array of callback domains.
|
| 656 |
+
*/
|
| 657 |
+
typedef CUpti_CallbackDomain *CUpti_DomainTable;
|
| 658 |
+
|
| 659 |
+
/**
|
| 660 |
+
* \brief Get the available callback domains.
|
| 661 |
+
*
|
| 662 |
+
* Returns in \p *domainTable an array of size \p *domainCount of all
|
| 663 |
+
* the available callback domains.
|
| 664 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 665 |
+
*
|
| 666 |
+
* \param domainCount Returns number of callback domains
|
| 667 |
+
* \param domainTable Returns pointer to array of available callback domains
|
| 668 |
+
*
|
| 669 |
+
* \retval CUPTI_SUCCESS on success
|
| 670 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED if unable to initialize CUPTI
|
| 671 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p domainCount or \p domainTable are NULL
|
| 672 |
+
*/
|
| 673 |
+
CUptiResult CUPTIAPI cuptiSupportedDomains(size_t *domainCount,
|
| 674 |
+
CUpti_DomainTable *domainTable);
|
| 675 |
+
|
| 676 |
+
/**
|
| 677 |
+
* \brief Initialize a callback subscriber with a callback function
|
| 678 |
+
* and user data.
|
| 679 |
+
*
|
| 680 |
+
* Initializes a callback subscriber with a callback function and
|
| 681 |
+
* (optionally) a pointer to user data. The returned subscriber handle
|
| 682 |
+
* can be used to enable and disable the callback for specific domains
|
| 683 |
+
* and callback IDs.
|
| 684 |
+
* \note Only a single subscriber can be registered at a time. To ensure
|
| 685 |
+
* that no other CUPTI client interrupts the profiling session, it's the
|
| 686 |
+
* responsibility of all the CUPTI clients to call this function before
|
| 687 |
+
* starting the profling session. In case profiling session is already
|
| 688 |
+
* started by another CUPTI client, this function returns the error code
|
| 689 |
+
* CUPTI_ERROR_MULTIPLE_SUBSCRIBERS_NOT_SUPPORTED.
|
| 690 |
+
* Note that this function returns the same error when application is
|
| 691 |
+
* launched using NVIDIA tools like nvprof, Visual Profiler, Nsight Systems,
|
| 692 |
+
* Nsight Compute, cuda-gdb and cuda-memcheck.
|
| 693 |
+
* \note This function does not enable any callbacks.
|
| 694 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 695 |
+
*
|
| 696 |
+
* \param subscriber Returns handle to initialize subscriber
|
| 697 |
+
* \param callback The callback function
|
| 698 |
+
* \param userdata A pointer to user data. This data will be passed to
|
| 699 |
+
* the callback function via the \p userdata parameter.
|
| 700 |
+
*
|
| 701 |
+
* \retval CUPTI_SUCCESS on success
|
| 702 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED if unable to initialize CUPTI
|
| 703 |
+
* \retval CUPTI_ERROR_MULTIPLE_SUBSCRIBERS_NOT_SUPPORTED if there is already a CUPTI subscriber
|
| 704 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p subscriber is NULL
|
| 705 |
+
*/
|
| 706 |
+
CUptiResult CUPTIAPI cuptiSubscribe(CUpti_SubscriberHandle *subscriber,
|
| 707 |
+
CUpti_CallbackFunc callback,
|
| 708 |
+
void *userdata);
|
| 709 |
+
|
| 710 |
+
/**
|
| 711 |
+
* \brief Unregister a callback subscriber.
|
| 712 |
+
*
|
| 713 |
+
* Removes a callback subscriber so that no future callbacks will be
|
| 714 |
+
* issued to that subscriber.
|
| 715 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 716 |
+
*
|
| 717 |
+
* \param subscriber Handle to the initialize subscriber
|
| 718 |
+
*
|
| 719 |
+
* \retval CUPTI_SUCCESS on success
|
| 720 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED if unable to initialized CUPTI
|
| 721 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p subscriber is NULL or not initialized
|
| 722 |
+
*/
|
| 723 |
+
CUptiResult CUPTIAPI cuptiUnsubscribe(CUpti_SubscriberHandle subscriber);
|
| 724 |
+
|
| 725 |
+
/**
|
| 726 |
+
* \brief Get the current enabled/disabled state of a callback for a specific
|
| 727 |
+
* domain and function ID.
|
| 728 |
+
*
|
| 729 |
+
* Returns non-zero in \p *enable if the callback for a domain and
|
| 730 |
+
* callback ID is enabled, and zero if not enabled.
|
| 731 |
+
*
|
| 732 |
+
* \note \b Thread-safety: a subscriber must serialize access to
|
| 733 |
+
* cuptiGetCallbackState, cuptiEnableCallback, cuptiEnableDomain, and
|
| 734 |
+
* cuptiEnableAllDomains. For example, if cuptiGetCallbackState(sub,
|
| 735 |
+
* d, c) and cuptiEnableCallback(sub, d, c) are called concurrently,
|
| 736 |
+
* the results are undefined.
|
| 737 |
+
*
|
| 738 |
+
* \param enable Returns non-zero if callback enabled, zero if not enabled
|
| 739 |
+
* \param subscriber Handle to the initialize subscriber
|
| 740 |
+
* \param domain The domain of the callback
|
| 741 |
+
* \param cbid The ID of the callback
|
| 742 |
+
*
|
| 743 |
+
* \retval CUPTI_SUCCESS on success
|
| 744 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED if unable to initialized CUPTI
|
| 745 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p enabled is NULL, or if \p
|
| 746 |
+
* subscriber, \p domain or \p cbid is invalid.
|
| 747 |
+
*/
|
| 748 |
+
CUptiResult CUPTIAPI cuptiGetCallbackState(uint32_t *enable,
|
| 749 |
+
CUpti_SubscriberHandle subscriber,
|
| 750 |
+
CUpti_CallbackDomain domain,
|
| 751 |
+
CUpti_CallbackId cbid);
|
| 752 |
+
|
| 753 |
+
/**
|
| 754 |
+
* \brief Enable or disabled callbacks for a specific domain and
|
| 755 |
+
* callback ID.
|
| 756 |
+
*
|
| 757 |
+
* Enable or disabled callbacks for a subscriber for a specific domain
|
| 758 |
+
* and callback ID.
|
| 759 |
+
*
|
| 760 |
+
* \note \b Thread-safety: a subscriber must serialize access to
|
| 761 |
+
* cuptiGetCallbackState, cuptiEnableCallback, cuptiEnableDomain, and
|
| 762 |
+
* cuptiEnableAllDomains. For example, if cuptiGetCallbackState(sub,
|
| 763 |
+
* d, c) and cuptiEnableCallback(sub, d, c) are called concurrently,
|
| 764 |
+
* the results are undefined.
|
| 765 |
+
*
|
| 766 |
+
* \param enable New enable state for the callback. Zero disables the
|
| 767 |
+
* callback, non-zero enables the callback.
|
| 768 |
+
* \param subscriber - Handle to callback subscription
|
| 769 |
+
* \param domain The domain of the callback
|
| 770 |
+
* \param cbid The ID of the callback
|
| 771 |
+
*
|
| 772 |
+
* \retval CUPTI_SUCCESS on success
|
| 773 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED if unable to initialized CUPTI
|
| 774 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p subscriber, \p domain or \p
|
| 775 |
+
* cbid is invalid.
|
| 776 |
+
*/
|
| 777 |
+
CUptiResult CUPTIAPI cuptiEnableCallback(uint32_t enable,
|
| 778 |
+
CUpti_SubscriberHandle subscriber,
|
| 779 |
+
CUpti_CallbackDomain domain,
|
| 780 |
+
CUpti_CallbackId cbid);
|
| 781 |
+
|
| 782 |
+
/**
|
| 783 |
+
* \brief Enable or disabled all callbacks for a specific domain.
|
| 784 |
+
*
|
| 785 |
+
* Enable or disabled all callbacks for a specific domain.
|
| 786 |
+
*
|
| 787 |
+
* \note \b Thread-safety: a subscriber must serialize access to
|
| 788 |
+
* cuptiGetCallbackState, cuptiEnableCallback, cuptiEnableDomain, and
|
| 789 |
+
* cuptiEnableAllDomains. For example, if cuptiGetCallbackEnabled(sub,
|
| 790 |
+
* d, *) and cuptiEnableDomain(sub, d) are called concurrently, the
|
| 791 |
+
* results are undefined.
|
| 792 |
+
*
|
| 793 |
+
* \param enable New enable state for all callbacks in the
|
| 794 |
+
* domain. Zero disables all callbacks, non-zero enables all
|
| 795 |
+
* callbacks.
|
| 796 |
+
* \param subscriber - Handle to callback subscription
|
| 797 |
+
* \param domain The domain of the callback
|
| 798 |
+
*
|
| 799 |
+
* \retval CUPTI_SUCCESS on success
|
| 800 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED if unable to initialized CUPTI
|
| 801 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p subscriber or \p domain is invalid
|
| 802 |
+
*/
|
| 803 |
+
CUptiResult CUPTIAPI cuptiEnableDomain(uint32_t enable,
|
| 804 |
+
CUpti_SubscriberHandle subscriber,
|
| 805 |
+
CUpti_CallbackDomain domain);
|
| 806 |
+
|
| 807 |
+
/**
|
| 808 |
+
* \brief Enable or disable all callbacks in all domains.
|
| 809 |
+
*
|
| 810 |
+
* Enable or disable all callbacks in all domains.
|
| 811 |
+
*
|
| 812 |
+
* \note \b Thread-safety: a subscriber must serialize access to
|
| 813 |
+
* cuptiGetCallbackState, cuptiEnableCallback, cuptiEnableDomain, and
|
| 814 |
+
* cuptiEnableAllDomains. For example, if cuptiGetCallbackState(sub,
|
| 815 |
+
* d, *) and cuptiEnableAllDomains(sub) are called concurrently, the
|
| 816 |
+
* results are undefined.
|
| 817 |
+
*
|
| 818 |
+
* \param enable New enable state for all callbacks in all
|
| 819 |
+
* domain. Zero disables all callbacks, non-zero enables all
|
| 820 |
+
* callbacks.
|
| 821 |
+
* \param subscriber - Handle to callback subscription
|
| 822 |
+
*
|
| 823 |
+
* \retval CUPTI_SUCCESS on success
|
| 824 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED if unable to initialized CUPTI
|
| 825 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p subscriber is invalid
|
| 826 |
+
*/
|
| 827 |
+
CUptiResult CUPTIAPI cuptiEnableAllDomains(uint32_t enable,
|
| 828 |
+
CUpti_SubscriberHandle subscriber);
|
| 829 |
+
|
| 830 |
+
/**
|
| 831 |
+
* \brief Get the name of a callback for a specific domain and callback ID.
|
| 832 |
+
*
|
| 833 |
+
* Returns a pointer to the name c_string in \p **name.
|
| 834 |
+
*
|
| 835 |
+
* \note \b Names are available only for the DRIVER and RUNTIME domains.
|
| 836 |
+
*
|
| 837 |
+
* \param domain The domain of the callback
|
| 838 |
+
* \param cbid The ID of the callback
|
| 839 |
+
* \param name Returns pointer to the name string on success, NULL otherwise
|
| 840 |
+
*
|
| 841 |
+
* \retval CUPTI_SUCCESS on success
|
| 842 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p name is NULL, or if
|
| 843 |
+
* \p domain or \p cbid is invalid.
|
| 844 |
+
*/
|
| 845 |
+
CUptiResult CUPTIAPI cuptiGetCallbackName(CUpti_CallbackDomain domain,
|
| 846 |
+
uint32_t cbid,
|
| 847 |
+
const char **name);
|
| 848 |
+
|
| 849 |
+
/** @} */ /* END CUPTI_CALLBACK_API */
|
| 850 |
+
|
| 851 |
+
#if defined(__GNUC__) && defined(CUPTI_LIB)
|
| 852 |
+
#pragma GCC visibility pop
|
| 853 |
+
#endif
|
| 854 |
+
|
| 855 |
+
#if defined(__cplusplus)
|
| 856 |
+
}
|
| 857 |
+
#endif
|
| 858 |
+
|
| 859 |
+
#endif // file guard
|
| 860 |
+
|
lib/python3.12/site-packages/nvidia/cuda_cupti/include/cupti_checkpoint.h
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#pragma once
|
| 2 |
+
|
| 3 |
+
#include <cuda.h>
|
| 4 |
+
#include <cupti_result.h>
|
| 5 |
+
|
| 6 |
+
#include <stddef.h>
|
| 7 |
+
#include <stdint.h>
|
| 8 |
+
|
| 9 |
+
namespace NV { namespace Cupti { namespace Checkpoint {
|
| 10 |
+
|
| 11 |
+
#ifdef __cplusplus
|
| 12 |
+
extern "C"
|
| 13 |
+
{
|
| 14 |
+
#endif
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* \defgroup CUPTI_CHECKPOINT_API CUPTI Checkpoint API
|
| 18 |
+
* Functions, types, and enums that implement the CUPTI Checkpoint API.
|
| 19 |
+
* @{
|
| 20 |
+
*/
|
| 21 |
+
|
| 22 |
+
/**
|
| 23 |
+
* \brief Specifies optimization options for a checkpoint, may be OR'd together to specify multiple options.
|
| 24 |
+
*/
|
| 25 |
+
typedef enum
|
| 26 |
+
{
|
| 27 |
+
CUPTI_CHECKPOINT_OPT_NONE = 0, //!< Default behavior
|
| 28 |
+
CUPTI_CHECKPOINT_OPT_TRANSFER = 1, //!< Determine which mem blocks have changed, and only restore those. This optimization is cached, which means cuptiCheckpointRestore must always be called at the same point in the application when this option is enabled, or the result may be incorrect.
|
| 29 |
+
} CUpti_CheckpointOptimizations;
|
| 30 |
+
|
| 31 |
+
/**
|
| 32 |
+
* \brief Configuration and handle for a CUPTI Checkpoint
|
| 33 |
+
*
|
| 34 |
+
* A CUptiCheckpoint object should be initialized with desired options prior to passing into any
|
| 35 |
+
* CUPTI Checkpoint API function. The first call into a Checkpoint API function will initialize internal
|
| 36 |
+
* state based on these options. Subsequent changes to these options will not have any effect.
|
| 37 |
+
*
|
| 38 |
+
* Checkpoint data is saved in device, host, and filesystem space. There are options to reserve memory
|
| 39 |
+
* at each level (device, host, filesystem) which are intended to allow a guarantee that a certain amount
|
| 40 |
+
* of memory will remain free for use after the checkpoint is saved.
|
| 41 |
+
* Note, however, that falling back to slower levels of memory (host, and then filesystem) to save the checkpoint
|
| 42 |
+
* will result in performance degradation.
|
| 43 |
+
* Currently, the filesystem limitation is not implemented. Note that falling back to filesystem storage may
|
| 44 |
+
* significantly impact the performance for saving and restoring a checkpoint.
|
| 45 |
+
*/
|
| 46 |
+
typedef struct
|
| 47 |
+
{
|
| 48 |
+
size_t structSize; //!< [in] Must be set to CUpti_Checkpoint_STRUCT_SIZE
|
| 49 |
+
|
| 50 |
+
CUcontext ctx; //!< [in] Set to context to save from, or will use current context if NULL
|
| 51 |
+
|
| 52 |
+
size_t reserveDeviceMB; //!< [in] Restrict checkpoint from using last N MB of device memory (-1 = use no device memory)
|
| 53 |
+
size_t reserveHostMB; //!< [in] Restrict checkpoint from using last N MB of host memory (-1 = use no host memory)
|
| 54 |
+
uint8_t allowOverwrite; //!< [in] Boolean, Allow checkpoint to save over existing checkpoint
|
| 55 |
+
uint8_t optimizations; //!< [in] Mask of CUpti_CheckpointOptimizations flags for this checkpoint
|
| 56 |
+
|
| 57 |
+
void * pPriv; //!< [in] Assign to NULL
|
| 58 |
+
} CUpti_Checkpoint;
|
| 59 |
+
|
| 60 |
+
#define CUpti_Checkpoint_STRUCT_SIZE \
|
| 61 |
+
(offsetof(CUpti_Checkpoint, pPriv) + \
|
| 62 |
+
sizeof(((CUpti_Checkpoint*)(nullptr))->pPriv))
|
| 63 |
+
|
| 64 |
+
#if defined(__GNUC__) && defined(CUPTI_LIB)
|
| 65 |
+
#pragma GCC visibility push(default)
|
| 66 |
+
#endif
|
| 67 |
+
|
| 68 |
+
/**
|
| 69 |
+
* \brief Initialize and save a checkpoint of the device state associated with the handle context
|
| 70 |
+
*
|
| 71 |
+
* Uses the handle options to configure and save a checkpoint of the device state associated with the specified context.
|
| 72 |
+
*
|
| 73 |
+
* \param handle A pointer to a CUpti_Checkpoint object
|
| 74 |
+
*
|
| 75 |
+
* \retval CUPTI_SUCCESS if a checkpoint was successfully initialized and saved
|
| 76 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p handle does not appear to refer to a valid CUpti_Checkpoint
|
| 77 |
+
* \retval CUPTI_ERROR_INVALID_CONTEXT
|
| 78 |
+
* \retval CUPTI_ERROR_INVALID_DEVICE if device associated with context is not compatible with checkpoint API
|
| 79 |
+
* \retval CUPTI_ERROR_INVALID_OPERATION if Save is requested over an existing checkpoint, but \p allowOverwrite was not originally specified
|
| 80 |
+
* \retval CUPTI_ERROR_OUT_OF_MEMORY if as configured, not enough backing storage space to save the checkpoint
|
| 81 |
+
*/
|
| 82 |
+
CUptiResult cuptiCheckpointSave(CUpti_Checkpoint * const handle);
|
| 83 |
+
|
| 84 |
+
/**
|
| 85 |
+
* \brief Restore a checkpoint to the device associated with its context
|
| 86 |
+
*
|
| 87 |
+
* Restores device, pinned, and allocated memory to the state when the checkpoint was saved
|
| 88 |
+
*
|
| 89 |
+
* \param handle A pointer to a previously saved CUpti_Checkpoint object
|
| 90 |
+
*
|
| 91 |
+
* \retval CUTPI_SUCCESS if the checkpoint was successfully restored
|
| 92 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED if the checkpoint was not previously initialized
|
| 93 |
+
* \retval CUPTI_ERROR_INVALID_CONTEXT
|
| 94 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if the handle appears invalid
|
| 95 |
+
* \retval CUPTI_ERROR_UNKNOWN if the restore or optimization operation fails
|
| 96 |
+
*/
|
| 97 |
+
CUptiResult cuptiCheckpointRestore(CUpti_Checkpoint * const handle);
|
| 98 |
+
|
| 99 |
+
/**
|
| 100 |
+
* \brief Free the backing data for a checkpoint
|
| 101 |
+
*
|
| 102 |
+
* Frees all associated device, host memory and filesystem storage used for this context.
|
| 103 |
+
* After freeing a handle, it may be re-used as if it was new - options may be re-configured and will
|
| 104 |
+
* take effect on the next call to \p cuptiCheckpointSave.
|
| 105 |
+
*
|
| 106 |
+
* \param handle A pointer to a previously saved CUpti_Checkpoint object
|
| 107 |
+
*
|
| 108 |
+
* \retval CUPTI_SUCCESS if the handle was successfully freed
|
| 109 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if the handle was already freed or appears invalid
|
| 110 |
+
* \retval CUPTI_ERROR_INVALID_CONTEXT if the context is no longer valid
|
| 111 |
+
*/
|
| 112 |
+
CUptiResult cuptiCheckpointFree(CUpti_Checkpoint * const handle);
|
| 113 |
+
|
| 114 |
+
#if defined(__GNUC__) && defined(CUPTI_LIB)
|
| 115 |
+
#pragma GCC visibility pop
|
| 116 |
+
#endif
|
| 117 |
+
|
| 118 |
+
/**
|
| 119 |
+
* @}
|
| 120 |
+
*/
|
| 121 |
+
|
| 122 |
+
#ifdef __cplusplus
|
| 123 |
+
}
|
| 124 |
+
#endif
|
| 125 |
+
|
| 126 |
+
// Exit namespace NV::Cupti::Checkpoint
|
| 127 |
+
}}}
|
lib/python3.12/site-packages/nvidia/cuda_cupti/include/cupti_common.h
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
* Copyright 2023 NVIDIA Corporation. All rights reserved.
|
| 3 |
+
*
|
| 4 |
+
* NOTICE TO LICENSEE:
|
| 5 |
+
*
|
| 6 |
+
* This source code and/or documentation ("Licensed Deliverables") are
|
| 7 |
+
* subject to NVIDIA intellectual property rights under U.S. and
|
| 8 |
+
* international Copyright laws.
|
| 9 |
+
*
|
| 10 |
+
* These Licensed Deliverables contained herein is PROPRIETARY and
|
| 11 |
+
* CONFIDENTIAL to NVIDIA and is being provided under the terms and
|
| 12 |
+
* conditions of a form of NVIDIA software license agreement by and
|
| 13 |
+
* between NVIDIA and Licensee ("License Agreement") or electronically
|
| 14 |
+
* accepted by Licensee. Notwithstanding any terms or conditions to
|
| 15 |
+
* the contrary in the License Agreement, reproduction or disclosure
|
| 16 |
+
* of the Licensed Deliverables to any third party without the express
|
| 17 |
+
* written consent of NVIDIA is prohibited.
|
| 18 |
+
*
|
| 19 |
+
* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
|
| 20 |
+
* LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
|
| 21 |
+
* SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. IT IS
|
| 22 |
+
* PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
|
| 23 |
+
* NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
|
| 24 |
+
* DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
|
| 25 |
+
* NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
|
| 26 |
+
* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
|
| 27 |
+
* LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
|
| 28 |
+
* SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
|
| 29 |
+
* DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
| 30 |
+
* WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
| 31 |
+
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
| 32 |
+
* OF THESE LICENSED DELIVERABLES.
|
| 33 |
+
*
|
| 34 |
+
* U.S. Government End Users. These Licensed Deliverables are a
|
| 35 |
+
* "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
|
| 36 |
+
* 1995), consisting of "commercial computer software" and "commercial
|
| 37 |
+
* computer software documentation" as such terms are used in 48
|
| 38 |
+
* C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
|
| 39 |
+
* only as a commercial end item. Consistent with 48 C.F.R.12.212 and
|
| 40 |
+
* 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
|
| 41 |
+
* U.S. Government End Users acquire the Licensed Deliverables with
|
| 42 |
+
* only those rights set forth herein.
|
| 43 |
+
*
|
| 44 |
+
* Any use of the Licensed Deliverables in individual and commercial
|
| 45 |
+
* software must include, in the user documentation and internal
|
| 46 |
+
* comments to the code, the above Disclaimer and U.S. Government End
|
| 47 |
+
* Users Notice.
|
| 48 |
+
*/
|
| 49 |
+
|
| 50 |
+
#if !defined(__CUPTI_COMMON_H__)
|
| 51 |
+
#define __CUPTI_COMMON_H__
|
| 52 |
+
|
| 53 |
+
#ifndef CUPTIAPI
|
| 54 |
+
#ifdef _WIN32
|
| 55 |
+
#define CUPTIAPI __stdcall
|
| 56 |
+
#else
|
| 57 |
+
#define CUPTIAPI
|
| 58 |
+
#endif
|
| 59 |
+
#endif
|
| 60 |
+
|
| 61 |
+
#ifndef CUPTIUTILAPI
|
| 62 |
+
#ifdef _WIN32
|
| 63 |
+
#define CUPTIUTILAPI __stdcall
|
| 64 |
+
#else
|
| 65 |
+
#define CUPTIUTILAPI
|
| 66 |
+
#endif
|
| 67 |
+
#endif
|
| 68 |
+
|
| 69 |
+
#if defined(__LP64__)
|
| 70 |
+
#define CUPTILP64 1
|
| 71 |
+
#elif defined(_WIN64)
|
| 72 |
+
#define CUPTILP64 1
|
| 73 |
+
#else
|
| 74 |
+
#undef CUPTILP64
|
| 75 |
+
#endif
|
| 76 |
+
|
| 77 |
+
#define ACTIVITY_RECORD_ALIGNMENT 8
|
| 78 |
+
#if defined(_WIN32) // Windows 32- and 64-bit
|
| 79 |
+
#define START_PACKED_ALIGNMENT __pragma(pack(push,1)) // exact fit - no padding
|
| 80 |
+
#define PACKED_ALIGNMENT __declspec(align(ACTIVITY_RECORD_ALIGNMENT))
|
| 81 |
+
#define END_PACKED_ALIGNMENT __pragma(pack(pop))
|
| 82 |
+
#elif defined(__GNUC__) // GCC
|
| 83 |
+
#define START_PACKED_ALIGNMENT
|
| 84 |
+
#define PACKED_ALIGNMENT __attribute__ ((__packed__)) __attribute__ ((aligned (ACTIVITY_RECORD_ALIGNMENT)))
|
| 85 |
+
#define END_PACKED_ALIGNMENT
|
| 86 |
+
#else // all other compilers
|
| 87 |
+
#define START_PACKED_ALIGNMENT
|
| 88 |
+
#define PACKED_ALIGNMENT
|
| 89 |
+
#define END_PACKED_ALIGNMENT
|
| 90 |
+
#endif
|
| 91 |
+
|
| 92 |
+
#endif /*__CUPTI_COMMON_H__*/
|
| 93 |
+
|
lib/python3.12/site-packages/nvidia/cuda_cupti/include/cupti_driver_cbid.h
ADDED
|
@@ -0,0 +1,767 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
// *************************************************************************
|
| 3 |
+
// Definitions of indices for API functions, unique across entire API
|
| 4 |
+
// *************************************************************************
|
| 5 |
+
|
| 6 |
+
// This file is generated. Any changes you make will be lost during the next clean build.
|
| 7 |
+
// CUDA public interface, for type definitions and cu* function prototypes
|
| 8 |
+
|
| 9 |
+
typedef enum CUpti_driver_api_trace_cbid_enum {
|
| 10 |
+
CUPTI_DRIVER_TRACE_CBID_INVALID = 0,
|
| 11 |
+
CUPTI_DRIVER_TRACE_CBID_cuInit = 1,
|
| 12 |
+
CUPTI_DRIVER_TRACE_CBID_cuDriverGetVersion = 2,
|
| 13 |
+
CUPTI_DRIVER_TRACE_CBID_cuDeviceGet = 3,
|
| 14 |
+
CUPTI_DRIVER_TRACE_CBID_cuDeviceGetCount = 4,
|
| 15 |
+
CUPTI_DRIVER_TRACE_CBID_cuDeviceGetName = 5,
|
| 16 |
+
CUPTI_DRIVER_TRACE_CBID_cuDeviceComputeCapability = 6,
|
| 17 |
+
CUPTI_DRIVER_TRACE_CBID_cuDeviceTotalMem = 7,
|
| 18 |
+
CUPTI_DRIVER_TRACE_CBID_cuDeviceGetProperties = 8,
|
| 19 |
+
CUPTI_DRIVER_TRACE_CBID_cuDeviceGetAttribute = 9,
|
| 20 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxCreate = 10,
|
| 21 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxDestroy = 11,
|
| 22 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxAttach = 12,
|
| 23 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxDetach = 13,
|
| 24 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxPushCurrent = 14,
|
| 25 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxPopCurrent = 15,
|
| 26 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxGetDevice = 16,
|
| 27 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxSynchronize = 17,
|
| 28 |
+
CUPTI_DRIVER_TRACE_CBID_cuModuleLoad = 18,
|
| 29 |
+
CUPTI_DRIVER_TRACE_CBID_cuModuleLoadData = 19,
|
| 30 |
+
CUPTI_DRIVER_TRACE_CBID_cuModuleLoadDataEx = 20,
|
| 31 |
+
CUPTI_DRIVER_TRACE_CBID_cuModuleLoadFatBinary = 21,
|
| 32 |
+
CUPTI_DRIVER_TRACE_CBID_cuModuleUnload = 22,
|
| 33 |
+
CUPTI_DRIVER_TRACE_CBID_cuModuleGetFunction = 23,
|
| 34 |
+
CUPTI_DRIVER_TRACE_CBID_cuModuleGetGlobal = 24,
|
| 35 |
+
CUPTI_DRIVER_TRACE_CBID_cu64ModuleGetGlobal = 25,
|
| 36 |
+
CUPTI_DRIVER_TRACE_CBID_cuModuleGetTexRef = 26,
|
| 37 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemGetInfo = 27,
|
| 38 |
+
CUPTI_DRIVER_TRACE_CBID_cu64MemGetInfo = 28,
|
| 39 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemAlloc = 29,
|
| 40 |
+
CUPTI_DRIVER_TRACE_CBID_cu64MemAlloc = 30,
|
| 41 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemAllocPitch = 31,
|
| 42 |
+
CUPTI_DRIVER_TRACE_CBID_cu64MemAllocPitch = 32,
|
| 43 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemFree = 33,
|
| 44 |
+
CUPTI_DRIVER_TRACE_CBID_cu64MemFree = 34,
|
| 45 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemGetAddressRange = 35,
|
| 46 |
+
CUPTI_DRIVER_TRACE_CBID_cu64MemGetAddressRange = 36,
|
| 47 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemAllocHost = 37,
|
| 48 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemFreeHost = 38,
|
| 49 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemHostAlloc = 39,
|
| 50 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemHostGetDevicePointer = 40,
|
| 51 |
+
CUPTI_DRIVER_TRACE_CBID_cu64MemHostGetDevicePointer = 41,
|
| 52 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemHostGetFlags = 42,
|
| 53 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyHtoD = 43,
|
| 54 |
+
CUPTI_DRIVER_TRACE_CBID_cu64MemcpyHtoD = 44,
|
| 55 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyDtoH = 45,
|
| 56 |
+
CUPTI_DRIVER_TRACE_CBID_cu64MemcpyDtoH = 46,
|
| 57 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyDtoD = 47,
|
| 58 |
+
CUPTI_DRIVER_TRACE_CBID_cu64MemcpyDtoD = 48,
|
| 59 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyDtoA = 49,
|
| 60 |
+
CUPTI_DRIVER_TRACE_CBID_cu64MemcpyDtoA = 50,
|
| 61 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyAtoD = 51,
|
| 62 |
+
CUPTI_DRIVER_TRACE_CBID_cu64MemcpyAtoD = 52,
|
| 63 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyHtoA = 53,
|
| 64 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyAtoH = 54,
|
| 65 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyAtoA = 55,
|
| 66 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpy2D = 56,
|
| 67 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpy2DUnaligned = 57,
|
| 68 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpy3D = 58,
|
| 69 |
+
CUPTI_DRIVER_TRACE_CBID_cu64Memcpy3D = 59,
|
| 70 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyHtoDAsync = 60,
|
| 71 |
+
CUPTI_DRIVER_TRACE_CBID_cu64MemcpyHtoDAsync = 61,
|
| 72 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyDtoHAsync = 62,
|
| 73 |
+
CUPTI_DRIVER_TRACE_CBID_cu64MemcpyDtoHAsync = 63,
|
| 74 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyDtoDAsync = 64,
|
| 75 |
+
CUPTI_DRIVER_TRACE_CBID_cu64MemcpyDtoDAsync = 65,
|
| 76 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyHtoAAsync = 66,
|
| 77 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyAtoHAsync = 67,
|
| 78 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpy2DAsync = 68,
|
| 79 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpy3DAsync = 69,
|
| 80 |
+
CUPTI_DRIVER_TRACE_CBID_cu64Memcpy3DAsync = 70,
|
| 81 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD8 = 71,
|
| 82 |
+
CUPTI_DRIVER_TRACE_CBID_cu64MemsetD8 = 72,
|
| 83 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD16 = 73,
|
| 84 |
+
CUPTI_DRIVER_TRACE_CBID_cu64MemsetD16 = 74,
|
| 85 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD32 = 75,
|
| 86 |
+
CUPTI_DRIVER_TRACE_CBID_cu64MemsetD32 = 76,
|
| 87 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD2D8 = 77,
|
| 88 |
+
CUPTI_DRIVER_TRACE_CBID_cu64MemsetD2D8 = 78,
|
| 89 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD2D16 = 79,
|
| 90 |
+
CUPTI_DRIVER_TRACE_CBID_cu64MemsetD2D16 = 80,
|
| 91 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD2D32 = 81,
|
| 92 |
+
CUPTI_DRIVER_TRACE_CBID_cu64MemsetD2D32 = 82,
|
| 93 |
+
CUPTI_DRIVER_TRACE_CBID_cuFuncSetBlockShape = 83,
|
| 94 |
+
CUPTI_DRIVER_TRACE_CBID_cuFuncSetSharedSize = 84,
|
| 95 |
+
CUPTI_DRIVER_TRACE_CBID_cuFuncGetAttribute = 85,
|
| 96 |
+
CUPTI_DRIVER_TRACE_CBID_cuFuncSetCacheConfig = 86,
|
| 97 |
+
CUPTI_DRIVER_TRACE_CBID_cuArrayCreate = 87,
|
| 98 |
+
CUPTI_DRIVER_TRACE_CBID_cuArrayGetDescriptor = 88,
|
| 99 |
+
CUPTI_DRIVER_TRACE_CBID_cuArrayDestroy = 89,
|
| 100 |
+
CUPTI_DRIVER_TRACE_CBID_cuArray3DCreate = 90,
|
| 101 |
+
CUPTI_DRIVER_TRACE_CBID_cuArray3DGetDescriptor = 91,
|
| 102 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefCreate = 92,
|
| 103 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefDestroy = 93,
|
| 104 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefSetArray = 94,
|
| 105 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefSetAddress = 95,
|
| 106 |
+
CUPTI_DRIVER_TRACE_CBID_cu64TexRefSetAddress = 96,
|
| 107 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefSetAddress2D = 97,
|
| 108 |
+
CUPTI_DRIVER_TRACE_CBID_cu64TexRefSetAddress2D = 98,
|
| 109 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefSetFormat = 99,
|
| 110 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefSetAddressMode = 100,
|
| 111 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefSetFilterMode = 101,
|
| 112 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefSetFlags = 102,
|
| 113 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefGetAddress = 103,
|
| 114 |
+
CUPTI_DRIVER_TRACE_CBID_cu64TexRefGetAddress = 104,
|
| 115 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefGetArray = 105,
|
| 116 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefGetAddressMode = 106,
|
| 117 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefGetFilterMode = 107,
|
| 118 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefGetFormat = 108,
|
| 119 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefGetFlags = 109,
|
| 120 |
+
CUPTI_DRIVER_TRACE_CBID_cuParamSetSize = 110,
|
| 121 |
+
CUPTI_DRIVER_TRACE_CBID_cuParamSeti = 111,
|
| 122 |
+
CUPTI_DRIVER_TRACE_CBID_cuParamSetf = 112,
|
| 123 |
+
CUPTI_DRIVER_TRACE_CBID_cuParamSetv = 113,
|
| 124 |
+
CUPTI_DRIVER_TRACE_CBID_cuParamSetTexRef = 114,
|
| 125 |
+
CUPTI_DRIVER_TRACE_CBID_cuLaunch = 115,
|
| 126 |
+
CUPTI_DRIVER_TRACE_CBID_cuLaunchGrid = 116,
|
| 127 |
+
CUPTI_DRIVER_TRACE_CBID_cuLaunchGridAsync = 117,
|
| 128 |
+
CUPTI_DRIVER_TRACE_CBID_cuEventCreate = 118,
|
| 129 |
+
CUPTI_DRIVER_TRACE_CBID_cuEventRecord = 119,
|
| 130 |
+
CUPTI_DRIVER_TRACE_CBID_cuEventQuery = 120,
|
| 131 |
+
CUPTI_DRIVER_TRACE_CBID_cuEventSynchronize = 121,
|
| 132 |
+
CUPTI_DRIVER_TRACE_CBID_cuEventDestroy = 122,
|
| 133 |
+
CUPTI_DRIVER_TRACE_CBID_cuEventElapsedTime = 123,
|
| 134 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamCreate = 124,
|
| 135 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamQuery = 125,
|
| 136 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamSynchronize = 126,
|
| 137 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamDestroy = 127,
|
| 138 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphicsUnregisterResource = 128,
|
| 139 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphicsSubResourceGetMappedArray = 129,
|
| 140 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphicsResourceGetMappedPointer = 130,
|
| 141 |
+
CUPTI_DRIVER_TRACE_CBID_cu64GraphicsResourceGetMappedPointer = 131,
|
| 142 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphicsResourceSetMapFlags = 132,
|
| 143 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphicsMapResources = 133,
|
| 144 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphicsUnmapResources = 134,
|
| 145 |
+
CUPTI_DRIVER_TRACE_CBID_cuGetExportTable = 135,
|
| 146 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxSetLimit = 136,
|
| 147 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxGetLimit = 137,
|
| 148 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D10GetDevice = 138,
|
| 149 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D10CtxCreate = 139,
|
| 150 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphicsD3D10RegisterResource = 140,
|
| 151 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D10RegisterResource = 141,
|
| 152 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D10UnregisterResource = 142,
|
| 153 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D10MapResources = 143,
|
| 154 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D10UnmapResources = 144,
|
| 155 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D10ResourceSetMapFlags = 145,
|
| 156 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D10ResourceGetMappedArray = 146,
|
| 157 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D10ResourceGetMappedPointer = 147,
|
| 158 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D10ResourceGetMappedSize = 148,
|
| 159 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D10ResourceGetMappedPitch = 149,
|
| 160 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D10ResourceGetSurfaceDimensions = 150,
|
| 161 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D11GetDevice = 151,
|
| 162 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D11CtxCreate = 152,
|
| 163 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphicsD3D11RegisterResource = 153,
|
| 164 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D9GetDevice = 154,
|
| 165 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D9CtxCreate = 155,
|
| 166 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphicsD3D9RegisterResource = 156,
|
| 167 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D9GetDirect3DDevice = 157,
|
| 168 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D9RegisterResource = 158,
|
| 169 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D9UnregisterResource = 159,
|
| 170 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D9MapResources = 160,
|
| 171 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D9UnmapResources = 161,
|
| 172 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D9ResourceSetMapFlags = 162,
|
| 173 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D9ResourceGetSurfaceDimensions = 163,
|
| 174 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D9ResourceGetMappedArray = 164,
|
| 175 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D9ResourceGetMappedPointer = 165,
|
| 176 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D9ResourceGetMappedSize = 166,
|
| 177 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D9ResourceGetMappedPitch = 167,
|
| 178 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D9Begin = 168,
|
| 179 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D9End = 169,
|
| 180 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D9RegisterVertexBuffer = 170,
|
| 181 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D9MapVertexBuffer = 171,
|
| 182 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D9UnmapVertexBuffer = 172,
|
| 183 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D9UnregisterVertexBuffer = 173,
|
| 184 |
+
CUPTI_DRIVER_TRACE_CBID_cuGLCtxCreate = 174,
|
| 185 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphicsGLRegisterBuffer = 175,
|
| 186 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphicsGLRegisterImage = 176,
|
| 187 |
+
CUPTI_DRIVER_TRACE_CBID_cuWGLGetDevice = 177,
|
| 188 |
+
CUPTI_DRIVER_TRACE_CBID_cuGLInit = 178,
|
| 189 |
+
CUPTI_DRIVER_TRACE_CBID_cuGLRegisterBufferObject = 179,
|
| 190 |
+
CUPTI_DRIVER_TRACE_CBID_cuGLMapBufferObject = 180,
|
| 191 |
+
CUPTI_DRIVER_TRACE_CBID_cuGLUnmapBufferObject = 181,
|
| 192 |
+
CUPTI_DRIVER_TRACE_CBID_cuGLUnregisterBufferObject = 182,
|
| 193 |
+
CUPTI_DRIVER_TRACE_CBID_cuGLSetBufferObjectMapFlags = 183,
|
| 194 |
+
CUPTI_DRIVER_TRACE_CBID_cuGLMapBufferObjectAsync = 184,
|
| 195 |
+
CUPTI_DRIVER_TRACE_CBID_cuGLUnmapBufferObjectAsync = 185,
|
| 196 |
+
CUPTI_DRIVER_TRACE_CBID_cuVDPAUGetDevice = 186,
|
| 197 |
+
CUPTI_DRIVER_TRACE_CBID_cuVDPAUCtxCreate = 187,
|
| 198 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphicsVDPAURegisterVideoSurface = 188,
|
| 199 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphicsVDPAURegisterOutputSurface = 189,
|
| 200 |
+
CUPTI_DRIVER_TRACE_CBID_cuModuleGetSurfRef = 190,
|
| 201 |
+
CUPTI_DRIVER_TRACE_CBID_cuSurfRefCreate = 191,
|
| 202 |
+
CUPTI_DRIVER_TRACE_CBID_cuSurfRefDestroy = 192,
|
| 203 |
+
CUPTI_DRIVER_TRACE_CBID_cuSurfRefSetFormat = 193,
|
| 204 |
+
CUPTI_DRIVER_TRACE_CBID_cuSurfRefSetArray = 194,
|
| 205 |
+
CUPTI_DRIVER_TRACE_CBID_cuSurfRefGetFormat = 195,
|
| 206 |
+
CUPTI_DRIVER_TRACE_CBID_cuSurfRefGetArray = 196,
|
| 207 |
+
CUPTI_DRIVER_TRACE_CBID_cu64DeviceTotalMem = 197,
|
| 208 |
+
CUPTI_DRIVER_TRACE_CBID_cu64D3D10ResourceGetMappedPointer = 198,
|
| 209 |
+
CUPTI_DRIVER_TRACE_CBID_cu64D3D10ResourceGetMappedSize = 199,
|
| 210 |
+
CUPTI_DRIVER_TRACE_CBID_cu64D3D10ResourceGetMappedPitch = 200,
|
| 211 |
+
CUPTI_DRIVER_TRACE_CBID_cu64D3D10ResourceGetSurfaceDimensions = 201,
|
| 212 |
+
CUPTI_DRIVER_TRACE_CBID_cu64D3D9ResourceGetSurfaceDimensions = 202,
|
| 213 |
+
CUPTI_DRIVER_TRACE_CBID_cu64D3D9ResourceGetMappedPointer = 203,
|
| 214 |
+
CUPTI_DRIVER_TRACE_CBID_cu64D3D9ResourceGetMappedSize = 204,
|
| 215 |
+
CUPTI_DRIVER_TRACE_CBID_cu64D3D9ResourceGetMappedPitch = 205,
|
| 216 |
+
CUPTI_DRIVER_TRACE_CBID_cu64D3D9MapVertexBuffer = 206,
|
| 217 |
+
CUPTI_DRIVER_TRACE_CBID_cu64GLMapBufferObject = 207,
|
| 218 |
+
CUPTI_DRIVER_TRACE_CBID_cu64GLMapBufferObjectAsync = 208,
|
| 219 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D11GetDevices = 209,
|
| 220 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D11CtxCreateOnDevice = 210,
|
| 221 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D10GetDevices = 211,
|
| 222 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D10CtxCreateOnDevice = 212,
|
| 223 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D9GetDevices = 213,
|
| 224 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D9CtxCreateOnDevice = 214,
|
| 225 |
+
CUPTI_DRIVER_TRACE_CBID_cu64MemHostAlloc = 215,
|
| 226 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD8Async = 216,
|
| 227 |
+
CUPTI_DRIVER_TRACE_CBID_cu64MemsetD8Async = 217,
|
| 228 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD16Async = 218,
|
| 229 |
+
CUPTI_DRIVER_TRACE_CBID_cu64MemsetD16Async = 219,
|
| 230 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD32Async = 220,
|
| 231 |
+
CUPTI_DRIVER_TRACE_CBID_cu64MemsetD32Async = 221,
|
| 232 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD2D8Async = 222,
|
| 233 |
+
CUPTI_DRIVER_TRACE_CBID_cu64MemsetD2D8Async = 223,
|
| 234 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD2D16Async = 224,
|
| 235 |
+
CUPTI_DRIVER_TRACE_CBID_cu64MemsetD2D16Async = 225,
|
| 236 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD2D32Async = 226,
|
| 237 |
+
CUPTI_DRIVER_TRACE_CBID_cu64MemsetD2D32Async = 227,
|
| 238 |
+
CUPTI_DRIVER_TRACE_CBID_cu64ArrayCreate = 228,
|
| 239 |
+
CUPTI_DRIVER_TRACE_CBID_cu64ArrayGetDescriptor = 229,
|
| 240 |
+
CUPTI_DRIVER_TRACE_CBID_cu64Array3DCreate = 230,
|
| 241 |
+
CUPTI_DRIVER_TRACE_CBID_cu64Array3DGetDescriptor = 231,
|
| 242 |
+
CUPTI_DRIVER_TRACE_CBID_cu64Memcpy2D = 232,
|
| 243 |
+
CUPTI_DRIVER_TRACE_CBID_cu64Memcpy2DUnaligned = 233,
|
| 244 |
+
CUPTI_DRIVER_TRACE_CBID_cu64Memcpy2DAsync = 234,
|
| 245 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxCreate_v2 = 235,
|
| 246 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D10CtxCreate_v2 = 236,
|
| 247 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D11CtxCreate_v2 = 237,
|
| 248 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D9CtxCreate_v2 = 238,
|
| 249 |
+
CUPTI_DRIVER_TRACE_CBID_cuGLCtxCreate_v2 = 239,
|
| 250 |
+
CUPTI_DRIVER_TRACE_CBID_cuVDPAUCtxCreate_v2 = 240,
|
| 251 |
+
CUPTI_DRIVER_TRACE_CBID_cuModuleGetGlobal_v2 = 241,
|
| 252 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemGetInfo_v2 = 242,
|
| 253 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemAlloc_v2 = 243,
|
| 254 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemAllocPitch_v2 = 244,
|
| 255 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemFree_v2 = 245,
|
| 256 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemGetAddressRange_v2 = 246,
|
| 257 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemHostGetDevicePointer_v2 = 247,
|
| 258 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpy_v2 = 248,
|
| 259 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD8_v2 = 249,
|
| 260 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD16_v2 = 250,
|
| 261 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD32_v2 = 251,
|
| 262 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD2D8_v2 = 252,
|
| 263 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD2D16_v2 = 253,
|
| 264 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD2D32_v2 = 254,
|
| 265 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefSetAddress_v2 = 255,
|
| 266 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefSetAddress2D_v2 = 256,
|
| 267 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefGetAddress_v2 = 257,
|
| 268 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphicsResourceGetMappedPointer_v2 = 258,
|
| 269 |
+
CUPTI_DRIVER_TRACE_CBID_cuDeviceTotalMem_v2 = 259,
|
| 270 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D10ResourceGetMappedPointer_v2 = 260,
|
| 271 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D10ResourceGetMappedSize_v2 = 261,
|
| 272 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D10ResourceGetMappedPitch_v2 = 262,
|
| 273 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D10ResourceGetSurfaceDimensions_v2 = 263,
|
| 274 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D9ResourceGetSurfaceDimensions_v2 = 264,
|
| 275 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D9ResourceGetMappedPointer_v2 = 265,
|
| 276 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D9ResourceGetMappedSize_v2 = 266,
|
| 277 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D9ResourceGetMappedPitch_v2 = 267,
|
| 278 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D9MapVertexBuffer_v2 = 268,
|
| 279 |
+
CUPTI_DRIVER_TRACE_CBID_cuGLMapBufferObject_v2 = 269,
|
| 280 |
+
CUPTI_DRIVER_TRACE_CBID_cuGLMapBufferObjectAsync_v2 = 270,
|
| 281 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemHostAlloc_v2 = 271,
|
| 282 |
+
CUPTI_DRIVER_TRACE_CBID_cuArrayCreate_v2 = 272,
|
| 283 |
+
CUPTI_DRIVER_TRACE_CBID_cuArrayGetDescriptor_v2 = 273,
|
| 284 |
+
CUPTI_DRIVER_TRACE_CBID_cuArray3DCreate_v2 = 274,
|
| 285 |
+
CUPTI_DRIVER_TRACE_CBID_cuArray3DGetDescriptor_v2 = 275,
|
| 286 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyHtoD_v2 = 276,
|
| 287 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyHtoDAsync_v2 = 277,
|
| 288 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyDtoH_v2 = 278,
|
| 289 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyDtoHAsync_v2 = 279,
|
| 290 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyDtoD_v2 = 280,
|
| 291 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyDtoDAsync_v2 = 281,
|
| 292 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyAtoH_v2 = 282,
|
| 293 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyAtoHAsync_v2 = 283,
|
| 294 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyAtoD_v2 = 284,
|
| 295 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyDtoA_v2 = 285,
|
| 296 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyAtoA_v2 = 286,
|
| 297 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpy2D_v2 = 287,
|
| 298 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpy2DUnaligned_v2 = 288,
|
| 299 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpy2DAsync_v2 = 289,
|
| 300 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpy3D_v2 = 290,
|
| 301 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpy3DAsync_v2 = 291,
|
| 302 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyHtoA_v2 = 292,
|
| 303 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyHtoAAsync_v2 = 293,
|
| 304 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemAllocHost_v2 = 294,
|
| 305 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamWaitEvent = 295,
|
| 306 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxGetApiVersion = 296,
|
| 307 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D10GetDirect3DDevice = 297,
|
| 308 |
+
CUPTI_DRIVER_TRACE_CBID_cuD3D11GetDirect3DDevice = 298,
|
| 309 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxGetCacheConfig = 299,
|
| 310 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxSetCacheConfig = 300,
|
| 311 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemHostRegister = 301,
|
| 312 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemHostUnregister = 302,
|
| 313 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxSetCurrent = 303,
|
| 314 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxGetCurrent = 304,
|
| 315 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpy = 305,
|
| 316 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyAsync = 306,
|
| 317 |
+
CUPTI_DRIVER_TRACE_CBID_cuLaunchKernel = 307,
|
| 318 |
+
CUPTI_DRIVER_TRACE_CBID_cuProfilerStart = 308,
|
| 319 |
+
CUPTI_DRIVER_TRACE_CBID_cuProfilerStop = 309,
|
| 320 |
+
CUPTI_DRIVER_TRACE_CBID_cuPointerGetAttribute = 310,
|
| 321 |
+
CUPTI_DRIVER_TRACE_CBID_cuProfilerInitialize = 311,
|
| 322 |
+
CUPTI_DRIVER_TRACE_CBID_cuDeviceCanAccessPeer = 312,
|
| 323 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxEnablePeerAccess = 313,
|
| 324 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxDisablePeerAccess = 314,
|
| 325 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemPeerRegister = 315,
|
| 326 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemPeerUnregister = 316,
|
| 327 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemPeerGetDevicePointer = 317,
|
| 328 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyPeer = 318,
|
| 329 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyPeerAsync = 319,
|
| 330 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpy3DPeer = 320,
|
| 331 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpy3DPeerAsync = 321,
|
| 332 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxDestroy_v2 = 322,
|
| 333 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxPushCurrent_v2 = 323,
|
| 334 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxPopCurrent_v2 = 324,
|
| 335 |
+
CUPTI_DRIVER_TRACE_CBID_cuEventDestroy_v2 = 325,
|
| 336 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamDestroy_v2 = 326,
|
| 337 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefSetAddress2D_v3 = 327,
|
| 338 |
+
CUPTI_DRIVER_TRACE_CBID_cuIpcGetMemHandle = 328,
|
| 339 |
+
CUPTI_DRIVER_TRACE_CBID_cuIpcOpenMemHandle = 329,
|
| 340 |
+
CUPTI_DRIVER_TRACE_CBID_cuIpcCloseMemHandle = 330,
|
| 341 |
+
CUPTI_DRIVER_TRACE_CBID_cuDeviceGetByPCIBusId = 331,
|
| 342 |
+
CUPTI_DRIVER_TRACE_CBID_cuDeviceGetPCIBusId = 332,
|
| 343 |
+
CUPTI_DRIVER_TRACE_CBID_cuGLGetDevices = 333,
|
| 344 |
+
CUPTI_DRIVER_TRACE_CBID_cuIpcGetEventHandle = 334,
|
| 345 |
+
CUPTI_DRIVER_TRACE_CBID_cuIpcOpenEventHandle = 335,
|
| 346 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxSetSharedMemConfig = 336,
|
| 347 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxGetSharedMemConfig = 337,
|
| 348 |
+
CUPTI_DRIVER_TRACE_CBID_cuFuncSetSharedMemConfig = 338,
|
| 349 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexObjectCreate = 339,
|
| 350 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexObjectDestroy = 340,
|
| 351 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexObjectGetResourceDesc = 341,
|
| 352 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexObjectGetTextureDesc = 342,
|
| 353 |
+
CUPTI_DRIVER_TRACE_CBID_cuSurfObjectCreate = 343,
|
| 354 |
+
CUPTI_DRIVER_TRACE_CBID_cuSurfObjectDestroy = 344,
|
| 355 |
+
CUPTI_DRIVER_TRACE_CBID_cuSurfObjectGetResourceDesc = 345,
|
| 356 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamAddCallback = 346,
|
| 357 |
+
CUPTI_DRIVER_TRACE_CBID_cuMipmappedArrayCreate = 347,
|
| 358 |
+
CUPTI_DRIVER_TRACE_CBID_cuMipmappedArrayGetLevel = 348,
|
| 359 |
+
CUPTI_DRIVER_TRACE_CBID_cuMipmappedArrayDestroy = 349,
|
| 360 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefSetMipmappedArray = 350,
|
| 361 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefSetMipmapFilterMode = 351,
|
| 362 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefSetMipmapLevelBias = 352,
|
| 363 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefSetMipmapLevelClamp = 353,
|
| 364 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefSetMaxAnisotropy = 354,
|
| 365 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefGetMipmappedArray = 355,
|
| 366 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefGetMipmapFilterMode = 356,
|
| 367 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefGetMipmapLevelBias = 357,
|
| 368 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefGetMipmapLevelClamp = 358,
|
| 369 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefGetMaxAnisotropy = 359,
|
| 370 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphicsResourceGetMappedMipmappedArray = 360,
|
| 371 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexObjectGetResourceViewDesc = 361,
|
| 372 |
+
CUPTI_DRIVER_TRACE_CBID_cuLinkCreate = 362,
|
| 373 |
+
CUPTI_DRIVER_TRACE_CBID_cuLinkAddData = 363,
|
| 374 |
+
CUPTI_DRIVER_TRACE_CBID_cuLinkAddFile = 364,
|
| 375 |
+
CUPTI_DRIVER_TRACE_CBID_cuLinkComplete = 365,
|
| 376 |
+
CUPTI_DRIVER_TRACE_CBID_cuLinkDestroy = 366,
|
| 377 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamCreateWithPriority = 367,
|
| 378 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamGetPriority = 368,
|
| 379 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamGetFlags = 369,
|
| 380 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxGetStreamPriorityRange = 370,
|
| 381 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemAllocManaged = 371,
|
| 382 |
+
CUPTI_DRIVER_TRACE_CBID_cuGetErrorString = 372,
|
| 383 |
+
CUPTI_DRIVER_TRACE_CBID_cuGetErrorName = 373,
|
| 384 |
+
CUPTI_DRIVER_TRACE_CBID_cuOccupancyMaxActiveBlocksPerMultiprocessor = 374,
|
| 385 |
+
CUPTI_DRIVER_TRACE_CBID_cuCompilePtx = 375,
|
| 386 |
+
CUPTI_DRIVER_TRACE_CBID_cuBinaryFree = 376,
|
| 387 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamAttachMemAsync = 377,
|
| 388 |
+
CUPTI_DRIVER_TRACE_CBID_cuPointerSetAttribute = 378,
|
| 389 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemHostRegister_v2 = 379,
|
| 390 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphicsResourceSetMapFlags_v2 = 380,
|
| 391 |
+
CUPTI_DRIVER_TRACE_CBID_cuLinkCreate_v2 = 381,
|
| 392 |
+
CUPTI_DRIVER_TRACE_CBID_cuLinkAddData_v2 = 382,
|
| 393 |
+
CUPTI_DRIVER_TRACE_CBID_cuLinkAddFile_v2 = 383,
|
| 394 |
+
CUPTI_DRIVER_TRACE_CBID_cuOccupancyMaxPotentialBlockSize = 384,
|
| 395 |
+
CUPTI_DRIVER_TRACE_CBID_cuGLGetDevices_v2 = 385,
|
| 396 |
+
CUPTI_DRIVER_TRACE_CBID_cuDevicePrimaryCtxRetain = 386,
|
| 397 |
+
CUPTI_DRIVER_TRACE_CBID_cuDevicePrimaryCtxRelease = 387,
|
| 398 |
+
CUPTI_DRIVER_TRACE_CBID_cuDevicePrimaryCtxSetFlags = 388,
|
| 399 |
+
CUPTI_DRIVER_TRACE_CBID_cuDevicePrimaryCtxReset = 389,
|
| 400 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphicsEGLRegisterImage = 390,
|
| 401 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxGetFlags = 391,
|
| 402 |
+
CUPTI_DRIVER_TRACE_CBID_cuDevicePrimaryCtxGetState = 392,
|
| 403 |
+
CUPTI_DRIVER_TRACE_CBID_cuEGLStreamConsumerConnect = 393,
|
| 404 |
+
CUPTI_DRIVER_TRACE_CBID_cuEGLStreamConsumerDisconnect = 394,
|
| 405 |
+
CUPTI_DRIVER_TRACE_CBID_cuEGLStreamConsumerAcquireFrame = 395,
|
| 406 |
+
CUPTI_DRIVER_TRACE_CBID_cuEGLStreamConsumerReleaseFrame = 396,
|
| 407 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyHtoD_v2_ptds = 397,
|
| 408 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyDtoH_v2_ptds = 398,
|
| 409 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyDtoD_v2_ptds = 399,
|
| 410 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyDtoA_v2_ptds = 400,
|
| 411 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyAtoD_v2_ptds = 401,
|
| 412 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyHtoA_v2_ptds = 402,
|
| 413 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyAtoH_v2_ptds = 403,
|
| 414 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyAtoA_v2_ptds = 404,
|
| 415 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpy2D_v2_ptds = 405,
|
| 416 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpy2DUnaligned_v2_ptds = 406,
|
| 417 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpy3D_v2_ptds = 407,
|
| 418 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpy_ptds = 408,
|
| 419 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyPeer_ptds = 409,
|
| 420 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpy3DPeer_ptds = 410,
|
| 421 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD8_v2_ptds = 411,
|
| 422 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD16_v2_ptds = 412,
|
| 423 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD32_v2_ptds = 413,
|
| 424 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD2D8_v2_ptds = 414,
|
| 425 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD2D16_v2_ptds = 415,
|
| 426 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD2D32_v2_ptds = 416,
|
| 427 |
+
CUPTI_DRIVER_TRACE_CBID_cuGLMapBufferObject_v2_ptds = 417,
|
| 428 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyAsync_ptsz = 418,
|
| 429 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyHtoAAsync_v2_ptsz = 419,
|
| 430 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyAtoHAsync_v2_ptsz = 420,
|
| 431 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyHtoDAsync_v2_ptsz = 421,
|
| 432 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyDtoHAsync_v2_ptsz = 422,
|
| 433 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyDtoDAsync_v2_ptsz = 423,
|
| 434 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpy2DAsync_v2_ptsz = 424,
|
| 435 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpy3DAsync_v2_ptsz = 425,
|
| 436 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpyPeerAsync_ptsz = 426,
|
| 437 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemcpy3DPeerAsync_ptsz = 427,
|
| 438 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD8Async_ptsz = 428,
|
| 439 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD16Async_ptsz = 429,
|
| 440 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD32Async_ptsz = 430,
|
| 441 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD2D8Async_ptsz = 431,
|
| 442 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD2D16Async_ptsz = 432,
|
| 443 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemsetD2D32Async_ptsz = 433,
|
| 444 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamGetPriority_ptsz = 434,
|
| 445 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamGetFlags_ptsz = 435,
|
| 446 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamWaitEvent_ptsz = 436,
|
| 447 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamAddCallback_ptsz = 437,
|
| 448 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamAttachMemAsync_ptsz = 438,
|
| 449 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamQuery_ptsz = 439,
|
| 450 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamSynchronize_ptsz = 440,
|
| 451 |
+
CUPTI_DRIVER_TRACE_CBID_cuEventRecord_ptsz = 441,
|
| 452 |
+
CUPTI_DRIVER_TRACE_CBID_cuLaunchKernel_ptsz = 442,
|
| 453 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphicsMapResources_ptsz = 443,
|
| 454 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphicsUnmapResources_ptsz = 444,
|
| 455 |
+
CUPTI_DRIVER_TRACE_CBID_cuGLMapBufferObjectAsync_v2_ptsz = 445,
|
| 456 |
+
CUPTI_DRIVER_TRACE_CBID_cuEGLStreamProducerConnect = 446,
|
| 457 |
+
CUPTI_DRIVER_TRACE_CBID_cuEGLStreamProducerDisconnect = 447,
|
| 458 |
+
CUPTI_DRIVER_TRACE_CBID_cuEGLStreamProducerPresentFrame = 448,
|
| 459 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphicsResourceGetMappedEglFrame = 449,
|
| 460 |
+
CUPTI_DRIVER_TRACE_CBID_cuPointerGetAttributes = 450,
|
| 461 |
+
CUPTI_DRIVER_TRACE_CBID_cuOccupancyMaxActiveBlocksPerMultiprocessorWithFlags = 451,
|
| 462 |
+
CUPTI_DRIVER_TRACE_CBID_cuOccupancyMaxPotentialBlockSizeWithFlags = 452,
|
| 463 |
+
CUPTI_DRIVER_TRACE_CBID_cuEGLStreamProducerReturnFrame = 453,
|
| 464 |
+
CUPTI_DRIVER_TRACE_CBID_cuDeviceGetP2PAttribute = 454,
|
| 465 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefSetBorderColor = 455,
|
| 466 |
+
CUPTI_DRIVER_TRACE_CBID_cuTexRefGetBorderColor = 456,
|
| 467 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemAdvise = 457,
|
| 468 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamWaitValue32 = 458,
|
| 469 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamWaitValue32_ptsz = 459,
|
| 470 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamWriteValue32 = 460,
|
| 471 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamWriteValue32_ptsz = 461,
|
| 472 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamBatchMemOp = 462,
|
| 473 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamBatchMemOp_ptsz = 463,
|
| 474 |
+
CUPTI_DRIVER_TRACE_CBID_cuNVNbufferGetPointer = 464,
|
| 475 |
+
CUPTI_DRIVER_TRACE_CBID_cuNVNtextureGetArray = 465,
|
| 476 |
+
CUPTI_DRIVER_TRACE_CBID_cuNNSetAllocator = 466,
|
| 477 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemPrefetchAsync = 467,
|
| 478 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemPrefetchAsync_ptsz = 468,
|
| 479 |
+
CUPTI_DRIVER_TRACE_CBID_cuEventCreateFromNVNSync = 469,
|
| 480 |
+
CUPTI_DRIVER_TRACE_CBID_cuEGLStreamConsumerConnectWithFlags = 470,
|
| 481 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemRangeGetAttribute = 471,
|
| 482 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemRangeGetAttributes = 472,
|
| 483 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamWaitValue64 = 473,
|
| 484 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamWaitValue64_ptsz = 474,
|
| 485 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamWriteValue64 = 475,
|
| 486 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamWriteValue64_ptsz = 476,
|
| 487 |
+
CUPTI_DRIVER_TRACE_CBID_cuLaunchCooperativeKernel = 477,
|
| 488 |
+
CUPTI_DRIVER_TRACE_CBID_cuLaunchCooperativeKernel_ptsz = 478,
|
| 489 |
+
CUPTI_DRIVER_TRACE_CBID_cuEventCreateFromEGLSync = 479,
|
| 490 |
+
CUPTI_DRIVER_TRACE_CBID_cuLaunchCooperativeKernelMultiDevice = 480,
|
| 491 |
+
CUPTI_DRIVER_TRACE_CBID_cuFuncSetAttribute = 481,
|
| 492 |
+
CUPTI_DRIVER_TRACE_CBID_cuDeviceGetUuid = 482,
|
| 493 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamGetCtx = 483,
|
| 494 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamGetCtx_ptsz = 484,
|
| 495 |
+
CUPTI_DRIVER_TRACE_CBID_cuImportExternalMemory = 485,
|
| 496 |
+
CUPTI_DRIVER_TRACE_CBID_cuExternalMemoryGetMappedBuffer = 486,
|
| 497 |
+
CUPTI_DRIVER_TRACE_CBID_cuExternalMemoryGetMappedMipmappedArray = 487,
|
| 498 |
+
CUPTI_DRIVER_TRACE_CBID_cuDestroyExternalMemory = 488,
|
| 499 |
+
CUPTI_DRIVER_TRACE_CBID_cuImportExternalSemaphore = 489,
|
| 500 |
+
CUPTI_DRIVER_TRACE_CBID_cuSignalExternalSemaphoresAsync = 490,
|
| 501 |
+
CUPTI_DRIVER_TRACE_CBID_cuSignalExternalSemaphoresAsync_ptsz = 491,
|
| 502 |
+
CUPTI_DRIVER_TRACE_CBID_cuWaitExternalSemaphoresAsync = 492,
|
| 503 |
+
CUPTI_DRIVER_TRACE_CBID_cuWaitExternalSemaphoresAsync_ptsz = 493,
|
| 504 |
+
CUPTI_DRIVER_TRACE_CBID_cuDestroyExternalSemaphore = 494,
|
| 505 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamBeginCapture = 495,
|
| 506 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamBeginCapture_ptsz = 496,
|
| 507 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamEndCapture = 497,
|
| 508 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamEndCapture_ptsz = 498,
|
| 509 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamIsCapturing = 499,
|
| 510 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamIsCapturing_ptsz = 500,
|
| 511 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphCreate = 501,
|
| 512 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphAddKernelNode = 502,
|
| 513 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphKernelNodeGetParams = 503,
|
| 514 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphAddMemcpyNode = 504,
|
| 515 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphMemcpyNodeGetParams = 505,
|
| 516 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphAddMemsetNode = 506,
|
| 517 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphMemsetNodeGetParams = 507,
|
| 518 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphMemsetNodeSetParams = 508,
|
| 519 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphNodeGetType = 509,
|
| 520 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphGetRootNodes = 510,
|
| 521 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphNodeGetDependencies = 511,
|
| 522 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphNodeGetDependentNodes = 512,
|
| 523 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphInstantiate = 513,
|
| 524 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphLaunch = 514,
|
| 525 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphLaunch_ptsz = 515,
|
| 526 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphExecDestroy = 516,
|
| 527 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphDestroy = 517,
|
| 528 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphAddDependencies = 518,
|
| 529 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphRemoveDependencies = 519,
|
| 530 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphMemcpyNodeSetParams = 520,
|
| 531 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphKernelNodeSetParams = 521,
|
| 532 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphDestroyNode = 522,
|
| 533 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphClone = 523,
|
| 534 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphNodeFindInClone = 524,
|
| 535 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphAddChildGraphNode = 525,
|
| 536 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphAddEmptyNode = 526,
|
| 537 |
+
CUPTI_DRIVER_TRACE_CBID_cuLaunchHostFunc = 527,
|
| 538 |
+
CUPTI_DRIVER_TRACE_CBID_cuLaunchHostFunc_ptsz = 528,
|
| 539 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphChildGraphNodeGetGraph = 529,
|
| 540 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphAddHostNode = 530,
|
| 541 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphHostNodeGetParams = 531,
|
| 542 |
+
CUPTI_DRIVER_TRACE_CBID_cuDeviceGetLuid = 532,
|
| 543 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphHostNodeSetParams = 533,
|
| 544 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphGetNodes = 534,
|
| 545 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphGetEdges = 535,
|
| 546 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamGetCaptureInfo = 536,
|
| 547 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamGetCaptureInfo_ptsz = 537,
|
| 548 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphExecKernelNodeSetParams = 538,
|
| 549 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamBeginCapture_v2 = 539,
|
| 550 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamBeginCapture_v2_ptsz = 540,
|
| 551 |
+
CUPTI_DRIVER_TRACE_CBID_cuThreadExchangeStreamCaptureMode = 541,
|
| 552 |
+
CUPTI_DRIVER_TRACE_CBID_cuDeviceGetNvSciSyncAttributes = 542,
|
| 553 |
+
CUPTI_DRIVER_TRACE_CBID_cuOccupancyAvailableDynamicSMemPerBlock = 543,
|
| 554 |
+
CUPTI_DRIVER_TRACE_CBID_cuDevicePrimaryCtxRelease_v2 = 544,
|
| 555 |
+
CUPTI_DRIVER_TRACE_CBID_cuDevicePrimaryCtxReset_v2 = 545,
|
| 556 |
+
CUPTI_DRIVER_TRACE_CBID_cuDevicePrimaryCtxSetFlags_v2 = 546,
|
| 557 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemAddressReserve = 547,
|
| 558 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemAddressFree = 548,
|
| 559 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemCreate = 549,
|
| 560 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemRelease = 550,
|
| 561 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemMap = 551,
|
| 562 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemUnmap = 552,
|
| 563 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemSetAccess = 553,
|
| 564 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemExportToShareableHandle = 554,
|
| 565 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemImportFromShareableHandle = 555,
|
| 566 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemGetAllocationGranularity = 556,
|
| 567 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemGetAllocationPropertiesFromHandle = 557,
|
| 568 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemGetAccess = 558,
|
| 569 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamSetFlags = 559,
|
| 570 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamSetFlags_ptsz = 560,
|
| 571 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphExecUpdate = 561,
|
| 572 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphExecMemcpyNodeSetParams = 562,
|
| 573 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphExecMemsetNodeSetParams = 563,
|
| 574 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphExecHostNodeSetParams = 564,
|
| 575 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemRetainAllocationHandle = 565,
|
| 576 |
+
CUPTI_DRIVER_TRACE_CBID_cuFuncGetModule = 566,
|
| 577 |
+
CUPTI_DRIVER_TRACE_CBID_cuIpcOpenMemHandle_v2 = 567,
|
| 578 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxResetPersistingL2Cache = 568,
|
| 579 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphKernelNodeCopyAttributes = 569,
|
| 580 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphKernelNodeGetAttribute = 570,
|
| 581 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphKernelNodeSetAttribute = 571,
|
| 582 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamCopyAttributes = 572,
|
| 583 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamCopyAttributes_ptsz = 573,
|
| 584 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamGetAttribute = 574,
|
| 585 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamGetAttribute_ptsz = 575,
|
| 586 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamSetAttribute = 576,
|
| 587 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamSetAttribute_ptsz = 577,
|
| 588 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphInstantiate_v2 = 578,
|
| 589 |
+
CUPTI_DRIVER_TRACE_CBID_cuDeviceGetTexture1DLinearMaxWidth = 579,
|
| 590 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphUpload = 580,
|
| 591 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphUpload_ptsz = 581,
|
| 592 |
+
CUPTI_DRIVER_TRACE_CBID_cuArrayGetSparseProperties = 582,
|
| 593 |
+
CUPTI_DRIVER_TRACE_CBID_cuMipmappedArrayGetSparseProperties = 583,
|
| 594 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemMapArrayAsync = 584,
|
| 595 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemMapArrayAsync_ptsz = 585,
|
| 596 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphExecChildGraphNodeSetParams = 586,
|
| 597 |
+
CUPTI_DRIVER_TRACE_CBID_cuEventRecordWithFlags = 587,
|
| 598 |
+
CUPTI_DRIVER_TRACE_CBID_cuEventRecordWithFlags_ptsz = 588,
|
| 599 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphAddEventRecordNode = 589,
|
| 600 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphAddEventWaitNode = 590,
|
| 601 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphEventRecordNodeGetEvent = 591,
|
| 602 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphEventWaitNodeGetEvent = 592,
|
| 603 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphEventRecordNodeSetEvent = 593,
|
| 604 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphEventWaitNodeSetEvent = 594,
|
| 605 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphExecEventRecordNodeSetEvent = 595,
|
| 606 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphExecEventWaitNodeSetEvent = 596,
|
| 607 |
+
CUPTI_DRIVER_TRACE_CBID_cuArrayGetPlane = 597,
|
| 608 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemAllocAsync = 598,
|
| 609 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemAllocAsync_ptsz = 599,
|
| 610 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemFreeAsync = 600,
|
| 611 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemFreeAsync_ptsz = 601,
|
| 612 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemPoolTrimTo = 602,
|
| 613 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemPoolSetAttribute = 603,
|
| 614 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemPoolGetAttribute = 604,
|
| 615 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemPoolSetAccess = 605,
|
| 616 |
+
CUPTI_DRIVER_TRACE_CBID_cuDeviceGetDefaultMemPool = 606,
|
| 617 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemPoolCreate = 607,
|
| 618 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemPoolDestroy = 608,
|
| 619 |
+
CUPTI_DRIVER_TRACE_CBID_cuDeviceSetMemPool = 609,
|
| 620 |
+
CUPTI_DRIVER_TRACE_CBID_cuDeviceGetMemPool = 610,
|
| 621 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemAllocFromPoolAsync = 611,
|
| 622 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemAllocFromPoolAsync_ptsz = 612,
|
| 623 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemPoolExportToShareableHandle = 613,
|
| 624 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemPoolImportFromShareableHandle = 614,
|
| 625 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemPoolExportPointer = 615,
|
| 626 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemPoolImportPointer = 616,
|
| 627 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemPoolGetAccess = 617,
|
| 628 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphAddExternalSemaphoresSignalNode = 618,
|
| 629 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphExternalSemaphoresSignalNodeGetParams = 619,
|
| 630 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphExternalSemaphoresSignalNodeSetParams = 620,
|
| 631 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphAddExternalSemaphoresWaitNode = 621,
|
| 632 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphExternalSemaphoresWaitNodeGetParams = 622,
|
| 633 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphExternalSemaphoresWaitNodeSetParams = 623,
|
| 634 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphExecExternalSemaphoresSignalNodeSetParams = 624,
|
| 635 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphExecExternalSemaphoresWaitNodeSetParams = 625,
|
| 636 |
+
CUPTI_DRIVER_TRACE_CBID_cuGetProcAddress = 626,
|
| 637 |
+
CUPTI_DRIVER_TRACE_CBID_cuFlushGPUDirectRDMAWrites = 627,
|
| 638 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphDebugDotPrint = 628,
|
| 639 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamGetCaptureInfo_v2 = 629,
|
| 640 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamGetCaptureInfo_v2_ptsz = 630,
|
| 641 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamUpdateCaptureDependencies = 631,
|
| 642 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamUpdateCaptureDependencies_ptsz = 632,
|
| 643 |
+
CUPTI_DRIVER_TRACE_CBID_cuUserObjectCreate = 633,
|
| 644 |
+
CUPTI_DRIVER_TRACE_CBID_cuUserObjectRetain = 634,
|
| 645 |
+
CUPTI_DRIVER_TRACE_CBID_cuUserObjectRelease = 635,
|
| 646 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphRetainUserObject = 636,
|
| 647 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphReleaseUserObject = 637,
|
| 648 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphAddMemAllocNode = 638,
|
| 649 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphAddMemFreeNode = 639,
|
| 650 |
+
CUPTI_DRIVER_TRACE_CBID_cuDeviceGraphMemTrim = 640,
|
| 651 |
+
CUPTI_DRIVER_TRACE_CBID_cuDeviceGetGraphMemAttribute = 641,
|
| 652 |
+
CUPTI_DRIVER_TRACE_CBID_cuDeviceSetGraphMemAttribute = 642,
|
| 653 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphInstantiateWithFlags = 643,
|
| 654 |
+
CUPTI_DRIVER_TRACE_CBID_cuDeviceGetExecAffinitySupport = 644,
|
| 655 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxCreate_v3 = 645,
|
| 656 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxGetExecAffinity = 646,
|
| 657 |
+
CUPTI_DRIVER_TRACE_CBID_cuDeviceGetUuid_v2 = 647,
|
| 658 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphMemAllocNodeGetParams = 648,
|
| 659 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphMemFreeNodeGetParams = 649,
|
| 660 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphNodeSetEnabled = 650,
|
| 661 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphNodeGetEnabled = 651,
|
| 662 |
+
CUPTI_DRIVER_TRACE_CBID_cuLaunchKernelEx = 652,
|
| 663 |
+
CUPTI_DRIVER_TRACE_CBID_cuLaunchKernelEx_ptsz = 653,
|
| 664 |
+
CUPTI_DRIVER_TRACE_CBID_cuArrayGetMemoryRequirements = 654,
|
| 665 |
+
CUPTI_DRIVER_TRACE_CBID_cuMipmappedArrayGetMemoryRequirements = 655,
|
| 666 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphInstantiateWithParams = 656,
|
| 667 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphInstantiateWithParams_ptsz = 657,
|
| 668 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphExecGetFlags = 658,
|
| 669 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamWaitValue32_v2 = 659,
|
| 670 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamWaitValue32_v2_ptsz = 660,
|
| 671 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamWaitValue64_v2 = 661,
|
| 672 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamWaitValue64_v2_ptsz = 662,
|
| 673 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamWriteValue32_v2 = 663,
|
| 674 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamWriteValue32_v2_ptsz = 664,
|
| 675 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamWriteValue64_v2 = 665,
|
| 676 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamWriteValue64_v2_ptsz = 666,
|
| 677 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamBatchMemOp_v2 = 667,
|
| 678 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamBatchMemOp_v2_ptsz = 668,
|
| 679 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphAddBatchMemOpNode = 669,
|
| 680 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphBatchMemOpNodeGetParams = 670,
|
| 681 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphBatchMemOpNodeSetParams = 671,
|
| 682 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphExecBatchMemOpNodeSetParams = 672,
|
| 683 |
+
CUPTI_DRIVER_TRACE_CBID_cuModuleGetLoadingMode = 673,
|
| 684 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemGetHandleForAddressRange = 674,
|
| 685 |
+
CUPTI_DRIVER_TRACE_CBID_cuOccupancyMaxPotentialClusterSize = 675,
|
| 686 |
+
CUPTI_DRIVER_TRACE_CBID_cuOccupancyMaxActiveClusters = 676,
|
| 687 |
+
CUPTI_DRIVER_TRACE_CBID_cuGetProcAddress_v2 = 677,
|
| 688 |
+
CUPTI_DRIVER_TRACE_CBID_cuLibraryLoadData = 678,
|
| 689 |
+
CUPTI_DRIVER_TRACE_CBID_cuLibraryLoadFromFile = 679,
|
| 690 |
+
CUPTI_DRIVER_TRACE_CBID_cuLibraryUnload = 680,
|
| 691 |
+
CUPTI_DRIVER_TRACE_CBID_cuLibraryGetKernel = 681,
|
| 692 |
+
CUPTI_DRIVER_TRACE_CBID_cuLibraryGetModule = 682,
|
| 693 |
+
CUPTI_DRIVER_TRACE_CBID_cuKernelGetFunction = 683,
|
| 694 |
+
CUPTI_DRIVER_TRACE_CBID_cuLibraryGetGlobal = 684,
|
| 695 |
+
CUPTI_DRIVER_TRACE_CBID_cuLibraryGetManaged = 685,
|
| 696 |
+
CUPTI_DRIVER_TRACE_CBID_cuKernelGetAttribute = 686,
|
| 697 |
+
CUPTI_DRIVER_TRACE_CBID_cuKernelSetAttribute = 687,
|
| 698 |
+
CUPTI_DRIVER_TRACE_CBID_cuKernelSetCacheConfig = 688,
|
| 699 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphAddKernelNode_v2 = 689,
|
| 700 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphKernelNodeGetParams_v2 = 690,
|
| 701 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphKernelNodeSetParams_v2 = 691,
|
| 702 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphExecKernelNodeSetParams_v2 = 692,
|
| 703 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamGetId = 693,
|
| 704 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamGetId_ptsz = 694,
|
| 705 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxGetId = 695,
|
| 706 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphExecUpdate_v2 = 696,
|
| 707 |
+
CUPTI_DRIVER_TRACE_CBID_cuTensorMapEncodeTiled = 697,
|
| 708 |
+
CUPTI_DRIVER_TRACE_CBID_cuTensorMapEncodeIm2col = 698,
|
| 709 |
+
CUPTI_DRIVER_TRACE_CBID_cuTensorMapReplaceAddress = 699,
|
| 710 |
+
CUPTI_DRIVER_TRACE_CBID_cuLibraryGetUnifiedFunction = 700,
|
| 711 |
+
CUPTI_DRIVER_TRACE_CBID_cuCoredumpGetAttribute = 701,
|
| 712 |
+
CUPTI_DRIVER_TRACE_CBID_cuCoredumpGetAttributeGlobal = 702,
|
| 713 |
+
CUPTI_DRIVER_TRACE_CBID_cuCoredumpSetAttribute = 703,
|
| 714 |
+
CUPTI_DRIVER_TRACE_CBID_cuCoredumpSetAttributeGlobal = 704,
|
| 715 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxSetFlags = 705,
|
| 716 |
+
CUPTI_DRIVER_TRACE_CBID_cuMulticastCreate = 706,
|
| 717 |
+
CUPTI_DRIVER_TRACE_CBID_cuMulticastAddDevice = 707,
|
| 718 |
+
CUPTI_DRIVER_TRACE_CBID_cuMulticastBindMem = 708,
|
| 719 |
+
CUPTI_DRIVER_TRACE_CBID_cuMulticastBindAddr = 709,
|
| 720 |
+
CUPTI_DRIVER_TRACE_CBID_cuMulticastUnbind = 710,
|
| 721 |
+
CUPTI_DRIVER_TRACE_CBID_cuMulticastGetGranularity = 711,
|
| 722 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphAddNode = 712,
|
| 723 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphNodeSetParams = 713,
|
| 724 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphExecNodeSetParams = 714,
|
| 725 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemAdvise_v2 = 715,
|
| 726 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemPrefetchAsync_v2 = 716,
|
| 727 |
+
CUPTI_DRIVER_TRACE_CBID_cuMemPrefetchAsync_v2_ptsz = 717,
|
| 728 |
+
CUPTI_DRIVER_TRACE_CBID_cuFuncGetName = 718,
|
| 729 |
+
CUPTI_DRIVER_TRACE_CBID_cuKernelGetName = 719,
|
| 730 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamBeginCaptureToGraph = 720,
|
| 731 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamBeginCaptureToGraph_ptsz = 721,
|
| 732 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphConditionalHandleCreate = 722,
|
| 733 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphAddNode_v2 = 723,
|
| 734 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphGetEdges_v2 = 724,
|
| 735 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphNodeGetDependencies_v2 = 725,
|
| 736 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphNodeGetDependentNodes_v2 = 726,
|
| 737 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphAddDependencies_v2 = 727,
|
| 738 |
+
CUPTI_DRIVER_TRACE_CBID_cuGraphRemoveDependencies_v2 = 728,
|
| 739 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamGetCaptureInfo_v3 = 729,
|
| 740 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamGetCaptureInfo_v3_ptsz = 730,
|
| 741 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamUpdateCaptureDependencies_v2 = 731,
|
| 742 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamUpdateCaptureDependencies_v2_ptsz = 732,
|
| 743 |
+
CUPTI_DRIVER_TRACE_CBID_cuFuncGetParamInfo = 733,
|
| 744 |
+
CUPTI_DRIVER_TRACE_CBID_cuKernelGetParamInfo = 734,
|
| 745 |
+
CUPTI_DRIVER_TRACE_CBID_cuDeviceRegisterAsyncNotification = 735,
|
| 746 |
+
CUPTI_DRIVER_TRACE_CBID_cuDeviceUnregisterAsyncNotification = 736,
|
| 747 |
+
CUPTI_DRIVER_TRACE_CBID_cuModuleGetFunctionCount = 737,
|
| 748 |
+
CUPTI_DRIVER_TRACE_CBID_cuModuleEnumerateFunctions = 738,
|
| 749 |
+
CUPTI_DRIVER_TRACE_CBID_cuLibraryGetKernelCount = 739,
|
| 750 |
+
CUPTI_DRIVER_TRACE_CBID_cuLibraryEnumerateKernels = 740,
|
| 751 |
+
CUPTI_DRIVER_TRACE_CBID_cuFuncIsLoaded = 741,
|
| 752 |
+
CUPTI_DRIVER_TRACE_CBID_cuFuncLoad = 742,
|
| 753 |
+
CUPTI_DRIVER_TRACE_CBID_cuGreenCtxCreate = 743,
|
| 754 |
+
CUPTI_DRIVER_TRACE_CBID_cuGreenCtxDestroy = 744,
|
| 755 |
+
CUPTI_DRIVER_TRACE_CBID_cuDeviceGetDevResource = 745,
|
| 756 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxGetDevResource = 746,
|
| 757 |
+
CUPTI_DRIVER_TRACE_CBID_cuGreenCtxGetDevResource = 747,
|
| 758 |
+
CUPTI_DRIVER_TRACE_CBID_cuDevResourceGenerateDesc = 748,
|
| 759 |
+
CUPTI_DRIVER_TRACE_CBID_cuGreenCtxRecordEvent = 749,
|
| 760 |
+
CUPTI_DRIVER_TRACE_CBID_cuGreenCtxWaitEvent = 750,
|
| 761 |
+
CUPTI_DRIVER_TRACE_CBID_cuDevSmResourceSplitByCount = 751,
|
| 762 |
+
CUPTI_DRIVER_TRACE_CBID_cuStreamGetGreenCtx = 752,
|
| 763 |
+
CUPTI_DRIVER_TRACE_CBID_cuCtxFromGreenCtx = 753,
|
| 764 |
+
CUPTI_DRIVER_TRACE_CBID_SIZE = 754,
|
| 765 |
+
CUPTI_DRIVER_TRACE_CBID_FORCE_INT = 0x7fffffff
|
| 766 |
+
} CUpti_driver_api_trace_cbid;
|
| 767 |
+
|
lib/python3.12/site-packages/nvidia/cuda_cupti/include/cupti_events.h
ADDED
|
@@ -0,0 +1,1350 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
* Copyright 2010-2021 NVIDIA Corporation. All rights reserved.
|
| 3 |
+
*
|
| 4 |
+
* NOTICE TO LICENSEE:
|
| 5 |
+
*
|
| 6 |
+
* This source code and/or documentation ("Licensed Deliverables") are
|
| 7 |
+
* subject to NVIDIA intellectual property rights under U.S. and
|
| 8 |
+
* international Copyright laws.
|
| 9 |
+
*
|
| 10 |
+
* These Licensed Deliverables contained herein is PROPRIETARY and
|
| 11 |
+
* CONFIDENTIAL to NVIDIA and is being provided under the terms and
|
| 12 |
+
* conditions of a form of NVIDIA software license agreement by and
|
| 13 |
+
* between NVIDIA and Licensee ("License Agreement") or electronically
|
| 14 |
+
* accepted by Licensee. Notwithstanding any terms or conditions to
|
| 15 |
+
* the contrary in the License Agreement, reproduction or disclosure
|
| 16 |
+
* of the Licensed Deliverables to any third party without the express
|
| 17 |
+
* written consent of NVIDIA is prohibited.
|
| 18 |
+
*
|
| 19 |
+
* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
|
| 20 |
+
* LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
|
| 21 |
+
* SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. IT IS
|
| 22 |
+
* PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
|
| 23 |
+
* NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
|
| 24 |
+
* DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
|
| 25 |
+
* NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
|
| 26 |
+
* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
|
| 27 |
+
* LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
|
| 28 |
+
* SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
|
| 29 |
+
* DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
| 30 |
+
* WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
| 31 |
+
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
| 32 |
+
* OF THESE LICENSED DELIVERABLES.
|
| 33 |
+
*
|
| 34 |
+
* U.S. Government End Users. These Licensed Deliverables are a
|
| 35 |
+
* "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
|
| 36 |
+
* 1995), consisting of "commercial computer software" and "commercial
|
| 37 |
+
* computer software documentation" as such terms are used in 48
|
| 38 |
+
* C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
|
| 39 |
+
* only as a commercial end item. Consistent with 48 C.F.R.12.212 and
|
| 40 |
+
* 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
|
| 41 |
+
* U.S. Government End Users acquire the Licensed Deliverables with
|
| 42 |
+
* only those rights set forth herein.
|
| 43 |
+
*
|
| 44 |
+
* Any use of the Licensed Deliverables in individual and commercial
|
| 45 |
+
* software must include, in the user documentation and internal
|
| 46 |
+
* comments to the code, the above Disclaimer and U.S. Government End
|
| 47 |
+
* Users Notice.
|
| 48 |
+
*/
|
| 49 |
+
|
| 50 |
+
#if !defined(_CUPTI_EVENTS_H_)
|
| 51 |
+
#define _CUPTI_EVENTS_H_
|
| 52 |
+
|
| 53 |
+
#include <cuda.h>
|
| 54 |
+
#include <string.h>
|
| 55 |
+
#include <cuda_stdint.h>
|
| 56 |
+
#include <cupti_result.h>
|
| 57 |
+
|
| 58 |
+
#ifndef CUPTIAPI
|
| 59 |
+
#ifdef _WIN32
|
| 60 |
+
#define CUPTIAPI __stdcall
|
| 61 |
+
#else
|
| 62 |
+
#define CUPTIAPI
|
| 63 |
+
#endif
|
| 64 |
+
#endif
|
| 65 |
+
|
| 66 |
+
#if defined(__cplusplus)
|
| 67 |
+
extern "C" {
|
| 68 |
+
#endif
|
| 69 |
+
|
| 70 |
+
#if defined(__GNUC__) && defined(CUPTI_LIB)
|
| 71 |
+
#pragma GCC visibility push(default)
|
| 72 |
+
#endif
|
| 73 |
+
|
| 74 |
+
/**
|
| 75 |
+
* \defgroup CUPTI_EVENT_API CUPTI Event API
|
| 76 |
+
* Functions, types, and enums that implement the CUPTI Event API.
|
| 77 |
+
*
|
| 78 |
+
* \note CUPTI event API from the header cupti_events.h are not supported on devices
|
| 79 |
+
* with compute capability 7.5 and higher (i.e. Turing and later GPU architectures).
|
| 80 |
+
* These API will be deprecated in a future CUDA release. These are replaced by
|
| 81 |
+
* Profiling API in the header cupti_profiler_target.h and Perfworks metrics API
|
| 82 |
+
* in the headers nvperf_host.h and nvperf_target.h which are supported on
|
| 83 |
+
* devices with compute capability 7.0 and higher (i.e. Volta and later GPU
|
| 84 |
+
* architectures).
|
| 85 |
+
*
|
| 86 |
+
* @{
|
| 87 |
+
*/
|
| 88 |
+
|
| 89 |
+
/**
|
| 90 |
+
* \brief ID for an event.
|
| 91 |
+
*
|
| 92 |
+
* An event represents a countable activity, action, or occurrence on
|
| 93 |
+
* the device.
|
| 94 |
+
*/
|
| 95 |
+
typedef uint32_t CUpti_EventID;
|
| 96 |
+
|
| 97 |
+
/**
|
| 98 |
+
* \brief ID for an event domain.
|
| 99 |
+
*
|
| 100 |
+
* ID for an event domain. An event domain represents a group of
|
| 101 |
+
* related events. A device may have multiple instances of a domain,
|
| 102 |
+
* indicating that the device can simultaneously record multiple
|
| 103 |
+
* instances of each event within that domain.
|
| 104 |
+
*/
|
| 105 |
+
typedef uint32_t CUpti_EventDomainID;
|
| 106 |
+
|
| 107 |
+
/**
|
| 108 |
+
* \brief A group of events.
|
| 109 |
+
*
|
| 110 |
+
* An event group is a collection of events that are managed
|
| 111 |
+
* together. All events in an event group must belong to the same
|
| 112 |
+
* domain.
|
| 113 |
+
*/
|
| 114 |
+
typedef void *CUpti_EventGroup;
|
| 115 |
+
|
| 116 |
+
/**
|
| 117 |
+
* \brief Device class.
|
| 118 |
+
*
|
| 119 |
+
* Enumeration of device classes for device attribute
|
| 120 |
+
* CUPTI_DEVICE_ATTR_DEVICE_CLASS.
|
| 121 |
+
*/
|
| 122 |
+
typedef enum {
|
| 123 |
+
CUPTI_DEVICE_ATTR_DEVICE_CLASS_TESLA = 0,
|
| 124 |
+
CUPTI_DEVICE_ATTR_DEVICE_CLASS_QUADRO = 1,
|
| 125 |
+
CUPTI_DEVICE_ATTR_DEVICE_CLASS_GEFORCE = 2,
|
| 126 |
+
CUPTI_DEVICE_ATTR_DEVICE_CLASS_TEGRA = 3,
|
| 127 |
+
} CUpti_DeviceAttributeDeviceClass;
|
| 128 |
+
|
| 129 |
+
/**
|
| 130 |
+
* \brief Device attributes.
|
| 131 |
+
*
|
| 132 |
+
* CUPTI device attributes. These attributes can be read using \ref
|
| 133 |
+
* cuptiDeviceGetAttribute.
|
| 134 |
+
*/
|
| 135 |
+
typedef enum {
|
| 136 |
+
/**
|
| 137 |
+
* Number of event IDs for a device. Value is a uint32_t.
|
| 138 |
+
*/
|
| 139 |
+
CUPTI_DEVICE_ATTR_MAX_EVENT_ID = 1,
|
| 140 |
+
/**
|
| 141 |
+
* Number of event domain IDs for a device. Value is a uint32_t.
|
| 142 |
+
*/
|
| 143 |
+
CUPTI_DEVICE_ATTR_MAX_EVENT_DOMAIN_ID = 2,
|
| 144 |
+
/**
|
| 145 |
+
* Get global memory bandwidth in Kbytes/sec. Value is a uint64_t.
|
| 146 |
+
*/
|
| 147 |
+
CUPTI_DEVICE_ATTR_GLOBAL_MEMORY_BANDWIDTH = 3,
|
| 148 |
+
/**
|
| 149 |
+
* Get theoretical maximum number of instructions per cycle. Value
|
| 150 |
+
* is a uint32_t.
|
| 151 |
+
*/
|
| 152 |
+
CUPTI_DEVICE_ATTR_INSTRUCTION_PER_CYCLE = 4,
|
| 153 |
+
/**
|
| 154 |
+
* Get theoretical maximum number of single precision instructions
|
| 155 |
+
* that can be executed per second. Value is a uint64_t.
|
| 156 |
+
*/
|
| 157 |
+
CUPTI_DEVICE_ATTR_INSTRUCTION_THROUGHPUT_SINGLE_PRECISION = 5,
|
| 158 |
+
/**
|
| 159 |
+
* Get number of frame buffers for device. Value is a uint64_t.
|
| 160 |
+
*/
|
| 161 |
+
CUPTI_DEVICE_ATTR_MAX_FRAME_BUFFERS = 6,
|
| 162 |
+
/**
|
| 163 |
+
* Get PCIE link rate in Mega bits/sec for device. Return 0 if bus-type
|
| 164 |
+
* is non-PCIE. Value is a uint64_t.
|
| 165 |
+
*/
|
| 166 |
+
CUPTI_DEVICE_ATTR_PCIE_LINK_RATE = 7,
|
| 167 |
+
/**
|
| 168 |
+
* Get PCIE link width for device. Return 0 if bus-type
|
| 169 |
+
* is non-PCIE. Value is a uint64_t.
|
| 170 |
+
*/
|
| 171 |
+
CUPTI_DEVICE_ATTR_PCIE_LINK_WIDTH = 8,
|
| 172 |
+
/**
|
| 173 |
+
* Get PCIE generation for device. Return 0 if bus-type
|
| 174 |
+
* is non-PCIE. Value is a uint64_t.
|
| 175 |
+
*/
|
| 176 |
+
CUPTI_DEVICE_ATTR_PCIE_GEN = 9,
|
| 177 |
+
/**
|
| 178 |
+
* Get the class for the device. Value is a
|
| 179 |
+
* CUpti_DeviceAttributeDeviceClass.
|
| 180 |
+
*/
|
| 181 |
+
CUPTI_DEVICE_ATTR_DEVICE_CLASS = 10,
|
| 182 |
+
/**
|
| 183 |
+
* Get the peak single precision flop per cycle. Value is a uint64_t.
|
| 184 |
+
*/
|
| 185 |
+
CUPTI_DEVICE_ATTR_FLOP_SP_PER_CYCLE = 11,
|
| 186 |
+
/**
|
| 187 |
+
* Get the peak double precision flop per cycle. Value is a uint64_t.
|
| 188 |
+
*/
|
| 189 |
+
CUPTI_DEVICE_ATTR_FLOP_DP_PER_CYCLE = 12,
|
| 190 |
+
/**
|
| 191 |
+
* Get number of L2 units. Value is a uint64_t.
|
| 192 |
+
*/
|
| 193 |
+
CUPTI_DEVICE_ATTR_MAX_L2_UNITS = 13,
|
| 194 |
+
/**
|
| 195 |
+
* Get the maximum shared memory for the CU_FUNC_CACHE_PREFER_SHARED
|
| 196 |
+
* preference. Value is a uint64_t.
|
| 197 |
+
*/
|
| 198 |
+
CUPTI_DEVICE_ATTR_MAX_SHARED_MEMORY_CACHE_CONFIG_PREFER_SHARED = 14,
|
| 199 |
+
/**
|
| 200 |
+
* Get the maximum shared memory for the CU_FUNC_CACHE_PREFER_L1
|
| 201 |
+
* preference. Value is a uint64_t.
|
| 202 |
+
*/
|
| 203 |
+
CUPTI_DEVICE_ATTR_MAX_SHARED_MEMORY_CACHE_CONFIG_PREFER_L1 = 15,
|
| 204 |
+
/**
|
| 205 |
+
* Get the maximum shared memory for the CU_FUNC_CACHE_PREFER_EQUAL
|
| 206 |
+
* preference. Value is a uint64_t.
|
| 207 |
+
*/
|
| 208 |
+
CUPTI_DEVICE_ATTR_MAX_SHARED_MEMORY_CACHE_CONFIG_PREFER_EQUAL = 16,
|
| 209 |
+
/**
|
| 210 |
+
* Get the peak half precision flop per cycle. Value is a uint64_t.
|
| 211 |
+
*/
|
| 212 |
+
CUPTI_DEVICE_ATTR_FLOP_HP_PER_CYCLE = 17,
|
| 213 |
+
/**
|
| 214 |
+
* Check if Nvlink is connected to device. Returns 1, if at least one
|
| 215 |
+
* Nvlink is connected to the device, returns 0 otherwise.
|
| 216 |
+
* Value is a uint32_t.
|
| 217 |
+
*/
|
| 218 |
+
CUPTI_DEVICE_ATTR_NVLINK_PRESENT = 18,
|
| 219 |
+
/**
|
| 220 |
+
* Check if Nvlink is present between GPU and CPU. Returns Bandwidth,
|
| 221 |
+
* in Bytes/sec, if Nvlink is present, returns 0 otherwise.
|
| 222 |
+
* Value is a uint64_t.
|
| 223 |
+
*/
|
| 224 |
+
CUPTI_DEVICE_ATTR_GPU_CPU_NVLINK_BW = 19,
|
| 225 |
+
/**
|
| 226 |
+
* Check if NVSwitch is present in the underlying topology.
|
| 227 |
+
* Returns 1, if present, returns 0 otherwise.
|
| 228 |
+
* Value is a uint32_t.
|
| 229 |
+
*/
|
| 230 |
+
CUPTI_DEVICE_ATTR_NVSWITCH_PRESENT = 20,
|
| 231 |
+
CUPTI_DEVICE_ATTR_FORCE_INT = 0x7fffffff,
|
| 232 |
+
} CUpti_DeviceAttribute;
|
| 233 |
+
|
| 234 |
+
/**
|
| 235 |
+
* \brief Event domain attributes.
|
| 236 |
+
*
|
| 237 |
+
* Event domain attributes. Except where noted, all the attributes can
|
| 238 |
+
* be read using either \ref cuptiDeviceGetEventDomainAttribute or
|
| 239 |
+
* \ref cuptiEventDomainGetAttribute.
|
| 240 |
+
*/
|
| 241 |
+
typedef enum {
|
| 242 |
+
/**
|
| 243 |
+
* Event domain name. Value is a null terminated const c-string.
|
| 244 |
+
*/
|
| 245 |
+
CUPTI_EVENT_DOMAIN_ATTR_NAME = 0,
|
| 246 |
+
/**
|
| 247 |
+
* Number of instances of the domain for which event counts will be
|
| 248 |
+
* collected. The domain may have additional instances that cannot
|
| 249 |
+
* be profiled (see CUPTI_EVENT_DOMAIN_ATTR_TOTAL_INSTANCE_COUNT).
|
| 250 |
+
* Can be read only with \ref
|
| 251 |
+
* cuptiDeviceGetEventDomainAttribute. Value is a uint32_t.
|
| 252 |
+
*/
|
| 253 |
+
CUPTI_EVENT_DOMAIN_ATTR_INSTANCE_COUNT = 1,
|
| 254 |
+
/**
|
| 255 |
+
* Total number of instances of the domain, including instances that
|
| 256 |
+
* cannot be profiled. Use CUPTI_EVENT_DOMAIN_ATTR_INSTANCE_COUNT
|
| 257 |
+
* to get the number of instances that can be profiled. Can be read
|
| 258 |
+
* only with \ref cuptiDeviceGetEventDomainAttribute. Value is a
|
| 259 |
+
* uint32_t.
|
| 260 |
+
*/
|
| 261 |
+
CUPTI_EVENT_DOMAIN_ATTR_TOTAL_INSTANCE_COUNT = 3,
|
| 262 |
+
/**
|
| 263 |
+
* Collection method used for events contained in the event domain.
|
| 264 |
+
* Value is a \ref CUpti_EventCollectionMethod.
|
| 265 |
+
*/
|
| 266 |
+
CUPTI_EVENT_DOMAIN_ATTR_COLLECTION_METHOD = 4,
|
| 267 |
+
|
| 268 |
+
CUPTI_EVENT_DOMAIN_ATTR_FORCE_INT = 0x7fffffff,
|
| 269 |
+
} CUpti_EventDomainAttribute;
|
| 270 |
+
|
| 271 |
+
/**
|
| 272 |
+
* \brief The collection method used for an event.
|
| 273 |
+
*
|
| 274 |
+
* The collection method indicates how an event is collected.
|
| 275 |
+
*/
|
| 276 |
+
typedef enum {
|
| 277 |
+
/**
|
| 278 |
+
* Event is collected using a hardware global performance monitor.
|
| 279 |
+
*/
|
| 280 |
+
CUPTI_EVENT_COLLECTION_METHOD_PM = 0,
|
| 281 |
+
/**
|
| 282 |
+
* Event is collected using a hardware SM performance monitor.
|
| 283 |
+
*/
|
| 284 |
+
CUPTI_EVENT_COLLECTION_METHOD_SM = 1,
|
| 285 |
+
/**
|
| 286 |
+
* Event is collected using software instrumentation.
|
| 287 |
+
*/
|
| 288 |
+
CUPTI_EVENT_COLLECTION_METHOD_INSTRUMENTED = 2,
|
| 289 |
+
/**
|
| 290 |
+
* Event is collected using NvLink throughput counter method.
|
| 291 |
+
*/
|
| 292 |
+
CUPTI_EVENT_COLLECTION_METHOD_NVLINK_TC = 3,
|
| 293 |
+
CUPTI_EVENT_COLLECTION_METHOD_FORCE_INT = 0x7fffffff
|
| 294 |
+
} CUpti_EventCollectionMethod;
|
| 295 |
+
|
| 296 |
+
/**
|
| 297 |
+
* \brief Event group attributes.
|
| 298 |
+
*
|
| 299 |
+
* Event group attributes. These attributes can be read using \ref
|
| 300 |
+
* cuptiEventGroupGetAttribute. Attributes marked [rw] can also be
|
| 301 |
+
* written using \ref cuptiEventGroupSetAttribute.
|
| 302 |
+
*/
|
| 303 |
+
typedef enum {
|
| 304 |
+
/**
|
| 305 |
+
* The domain to which the event group is bound. This attribute is
|
| 306 |
+
* set when the first event is added to the group. Value is a
|
| 307 |
+
* CUpti_EventDomainID.
|
| 308 |
+
*/
|
| 309 |
+
CUPTI_EVENT_GROUP_ATTR_EVENT_DOMAIN_ID = 0,
|
| 310 |
+
/**
|
| 311 |
+
* [rw] Profile all the instances of the domain for this
|
| 312 |
+
* eventgroup. This feature can be used to get load balancing
|
| 313 |
+
* across all instances of a domain. Value is an integer.
|
| 314 |
+
*/
|
| 315 |
+
CUPTI_EVENT_GROUP_ATTR_PROFILE_ALL_DOMAIN_INSTANCES = 1,
|
| 316 |
+
/**
|
| 317 |
+
* [rw] Reserved for user data.
|
| 318 |
+
*/
|
| 319 |
+
CUPTI_EVENT_GROUP_ATTR_USER_DATA = 2,
|
| 320 |
+
/**
|
| 321 |
+
* Number of events in the group. Value is a uint32_t.
|
| 322 |
+
*/
|
| 323 |
+
CUPTI_EVENT_GROUP_ATTR_NUM_EVENTS = 3,
|
| 324 |
+
/**
|
| 325 |
+
* Enumerates events in the group. Value is a pointer to buffer of
|
| 326 |
+
* size sizeof(CUpti_EventID) * num_of_events in the eventgroup.
|
| 327 |
+
* num_of_events can be queried using
|
| 328 |
+
* CUPTI_EVENT_GROUP_ATTR_NUM_EVENTS.
|
| 329 |
+
*/
|
| 330 |
+
CUPTI_EVENT_GROUP_ATTR_EVENTS = 4,
|
| 331 |
+
/**
|
| 332 |
+
* Number of instances of the domain bound to this event group that
|
| 333 |
+
* will be counted. Value is a uint32_t.
|
| 334 |
+
*/
|
| 335 |
+
CUPTI_EVENT_GROUP_ATTR_INSTANCE_COUNT = 5,
|
| 336 |
+
/**
|
| 337 |
+
* Event group scope can be set to CUPTI_EVENT_PROFILING_SCOPE_DEVICE or
|
| 338 |
+
* CUPTI_EVENT_PROFILING_SCOPE_CONTEXT for an eventGroup, before
|
| 339 |
+
* adding any event.
|
| 340 |
+
* Sets the scope of eventgroup as CUPTI_EVENT_PROFILING_SCOPE_DEVICE or
|
| 341 |
+
* CUPTI_EVENT_PROFILING_SCOPE_CONTEXT when the scope of the events
|
| 342 |
+
* that will be added is CUPTI_EVENT_PROFILING_SCOPE_BOTH.
|
| 343 |
+
* If profiling scope of event is either
|
| 344 |
+
* CUPTI_EVENT_PROFILING_SCOPE_DEVICE or CUPTI_EVENT_PROFILING_SCOPE_CONTEXT
|
| 345 |
+
* then setting this attribute will not affect the default scope.
|
| 346 |
+
* It is not allowed to add events of different scope to same eventgroup.
|
| 347 |
+
* Value is a uint32_t.
|
| 348 |
+
*/
|
| 349 |
+
CUPTI_EVENT_GROUP_ATTR_PROFILING_SCOPE = 6,
|
| 350 |
+
CUPTI_EVENT_GROUP_ATTR_FORCE_INT = 0x7fffffff,
|
| 351 |
+
} CUpti_EventGroupAttribute;
|
| 352 |
+
|
| 353 |
+
/**
|
| 354 |
+
* \brief Profiling scope for event.
|
| 355 |
+
*
|
| 356 |
+
* Profiling scope of event indicates if the event can be collected at context
|
| 357 |
+
* scope or device scope or both i.e. it can be collected at any of context or
|
| 358 |
+
* device scope.
|
| 359 |
+
*/
|
| 360 |
+
typedef enum {
|
| 361 |
+
/**
|
| 362 |
+
* Event is collected at context scope.
|
| 363 |
+
*/
|
| 364 |
+
CUPTI_EVENT_PROFILING_SCOPE_CONTEXT = 0,
|
| 365 |
+
/**
|
| 366 |
+
* Event is collected at device scope.
|
| 367 |
+
*/
|
| 368 |
+
CUPTI_EVENT_PROFILING_SCOPE_DEVICE = 1,
|
| 369 |
+
/**
|
| 370 |
+
* Event can be collected at device or context scope.
|
| 371 |
+
* The scope can be set using \ref cuptiEventGroupSetAttribute API.
|
| 372 |
+
*/
|
| 373 |
+
CUPTI_EVENT_PROFILING_SCOPE_BOTH = 2,
|
| 374 |
+
CUPTI_EVENT_PROFILING_SCOPE_FORCE_INT = 0x7fffffff
|
| 375 |
+
} CUpti_EventProfilingScope;
|
| 376 |
+
|
| 377 |
+
/**
|
| 378 |
+
* \brief Event attributes.
|
| 379 |
+
*
|
| 380 |
+
* Event attributes. These attributes can be read using \ref
|
| 381 |
+
* cuptiEventGetAttribute.
|
| 382 |
+
*/
|
| 383 |
+
typedef enum {
|
| 384 |
+
/**
|
| 385 |
+
* Event name. Value is a null terminated const c-string.
|
| 386 |
+
*/
|
| 387 |
+
CUPTI_EVENT_ATTR_NAME = 0,
|
| 388 |
+
/**
|
| 389 |
+
* Short description of event. Value is a null terminated const
|
| 390 |
+
* c-string.
|
| 391 |
+
*/
|
| 392 |
+
CUPTI_EVENT_ATTR_SHORT_DESCRIPTION = 1,
|
| 393 |
+
/**
|
| 394 |
+
* Long description of event. Value is a null terminated const
|
| 395 |
+
* c-string.
|
| 396 |
+
*/
|
| 397 |
+
CUPTI_EVENT_ATTR_LONG_DESCRIPTION = 2,
|
| 398 |
+
/**
|
| 399 |
+
* Category of event. Value is CUpti_EventCategory.
|
| 400 |
+
*/
|
| 401 |
+
CUPTI_EVENT_ATTR_CATEGORY = 3,
|
| 402 |
+
/**
|
| 403 |
+
* Profiling scope of the events. It can be either device or context or both.
|
| 404 |
+
* Value is a \ref CUpti_EventProfilingScope.
|
| 405 |
+
*/
|
| 406 |
+
CUPTI_EVENT_ATTR_PROFILING_SCOPE = 5,
|
| 407 |
+
|
| 408 |
+
CUPTI_EVENT_ATTR_FORCE_INT = 0x7fffffff,
|
| 409 |
+
} CUpti_EventAttribute;
|
| 410 |
+
|
| 411 |
+
/**
|
| 412 |
+
* \brief Event collection modes.
|
| 413 |
+
*
|
| 414 |
+
* The event collection mode determines the period over which the
|
| 415 |
+
* events within the enabled event groups will be collected.
|
| 416 |
+
*/
|
| 417 |
+
typedef enum {
|
| 418 |
+
/**
|
| 419 |
+
* Events are collected for the entire duration between the
|
| 420 |
+
* cuptiEventGroupEnable and cuptiEventGroupDisable calls.
|
| 421 |
+
* Event values are reset when the events are read.
|
| 422 |
+
* For CUDA toolkit v6.0 and older this was the default mode.
|
| 423 |
+
*/
|
| 424 |
+
CUPTI_EVENT_COLLECTION_MODE_CONTINUOUS = 0,
|
| 425 |
+
/**
|
| 426 |
+
* Events are collected only for the durations of kernel executions
|
| 427 |
+
* that occur between the cuptiEventGroupEnable and
|
| 428 |
+
* cuptiEventGroupDisable calls. Event collection begins when a
|
| 429 |
+
* kernel execution begins, and stops when kernel execution
|
| 430 |
+
* completes. Event values are reset to zero when each kernel
|
| 431 |
+
* execution begins. If multiple kernel executions occur between the
|
| 432 |
+
* cuptiEventGroupEnable and cuptiEventGroupDisable calls then the
|
| 433 |
+
* event values must be read after each kernel launch if those
|
| 434 |
+
* events need to be associated with the specific kernel launch.
|
| 435 |
+
* Note that collection in this mode may significantly change the
|
| 436 |
+
* overall performance characteristics of the application because
|
| 437 |
+
* kernel executions that occur between the cuptiEventGroupEnable and
|
| 438 |
+
* cuptiEventGroupDisable calls are serialized on the GPU.
|
| 439 |
+
* This is the default mode from CUDA toolkit v6.5
|
| 440 |
+
*/
|
| 441 |
+
CUPTI_EVENT_COLLECTION_MODE_KERNEL = 1,
|
| 442 |
+
CUPTI_EVENT_COLLECTION_MODE_FORCE_INT = 0x7fffffff
|
| 443 |
+
} CUpti_EventCollectionMode;
|
| 444 |
+
|
| 445 |
+
/**
|
| 446 |
+
* \brief An event category.
|
| 447 |
+
*
|
| 448 |
+
* Each event is assigned to a category that represents the general
|
| 449 |
+
* type of the event. A event's category is accessed using \ref
|
| 450 |
+
* cuptiEventGetAttribute and the CUPTI_EVENT_ATTR_CATEGORY attribute.
|
| 451 |
+
*/
|
| 452 |
+
typedef enum {
|
| 453 |
+
/**
|
| 454 |
+
* An instruction related event.
|
| 455 |
+
*/
|
| 456 |
+
CUPTI_EVENT_CATEGORY_INSTRUCTION = 0,
|
| 457 |
+
/**
|
| 458 |
+
* A memory related event.
|
| 459 |
+
*/
|
| 460 |
+
CUPTI_EVENT_CATEGORY_MEMORY = 1,
|
| 461 |
+
/**
|
| 462 |
+
* A cache related event.
|
| 463 |
+
*/
|
| 464 |
+
CUPTI_EVENT_CATEGORY_CACHE = 2,
|
| 465 |
+
/**
|
| 466 |
+
* A profile-trigger event.
|
| 467 |
+
*/
|
| 468 |
+
CUPTI_EVENT_CATEGORY_PROFILE_TRIGGER = 3,
|
| 469 |
+
/**
|
| 470 |
+
* A system event.
|
| 471 |
+
*/
|
| 472 |
+
CUPTI_EVENT_CATEGORY_SYSTEM = 4,
|
| 473 |
+
CUPTI_EVENT_CATEGORY_FORCE_INT = 0x7fffffff
|
| 474 |
+
} CUpti_EventCategory;
|
| 475 |
+
|
| 476 |
+
/**
|
| 477 |
+
* \brief The overflow value for a CUPTI event.
|
| 478 |
+
*
|
| 479 |
+
* The CUPTI event value that indicates an overflow.
|
| 480 |
+
*/
|
| 481 |
+
#define CUPTI_EVENT_OVERFLOW ((uint64_t)0xFFFFFFFFFFFFFFFFULL)
|
| 482 |
+
|
| 483 |
+
/**
|
| 484 |
+
* \brief The value that indicates the event value is invalid
|
| 485 |
+
*/
|
| 486 |
+
#define CUPTI_EVENT_INVALID ((uint64_t)0xFFFFFFFFFFFFFFFEULL)
|
| 487 |
+
|
| 488 |
+
/**
|
| 489 |
+
* \brief Flags for cuptiEventGroupReadEvent an
|
| 490 |
+
* cuptiEventGroupReadAllEvents.
|
| 491 |
+
*
|
| 492 |
+
* Flags for \ref cuptiEventGroupReadEvent an \ref
|
| 493 |
+
* cuptiEventGroupReadAllEvents.
|
| 494 |
+
*/
|
| 495 |
+
typedef enum {
|
| 496 |
+
/**
|
| 497 |
+
* No flags.
|
| 498 |
+
*/
|
| 499 |
+
CUPTI_EVENT_READ_FLAG_NONE = 0,
|
| 500 |
+
CUPTI_EVENT_READ_FLAG_FORCE_INT = 0x7fffffff,
|
| 501 |
+
} CUpti_ReadEventFlags;
|
| 502 |
+
|
| 503 |
+
|
| 504 |
+
/**
|
| 505 |
+
* \brief A set of event groups.
|
| 506 |
+
*
|
| 507 |
+
* A set of event groups. When returned by \ref
|
| 508 |
+
* cuptiEventGroupSetsCreate and \ref cuptiMetricCreateEventGroupSets
|
| 509 |
+
* a set indicates that event groups that can be enabled at the same
|
| 510 |
+
* time (i.e. all the events in the set can be collected
|
| 511 |
+
* simultaneously).
|
| 512 |
+
*/
|
| 513 |
+
typedef struct {
|
| 514 |
+
/**
|
| 515 |
+
* The number of event groups in the set.
|
| 516 |
+
*/
|
| 517 |
+
uint32_t numEventGroups;
|
| 518 |
+
/**
|
| 519 |
+
* An array of \p numEventGroups event groups.
|
| 520 |
+
*/
|
| 521 |
+
CUpti_EventGroup *eventGroups;
|
| 522 |
+
} CUpti_EventGroupSet;
|
| 523 |
+
|
| 524 |
+
/**
|
| 525 |
+
* \brief A set of event group sets.
|
| 526 |
+
*
|
| 527 |
+
* A set of event group sets. When returned by \ref
|
| 528 |
+
* cuptiEventGroupSetsCreate and \ref cuptiMetricCreateEventGroupSets
|
| 529 |
+
* a CUpti_EventGroupSets indicates the number of passes required to
|
| 530 |
+
* collect all the events, and the event groups that should be
|
| 531 |
+
* collected during each pass.
|
| 532 |
+
*/
|
| 533 |
+
typedef struct {
|
| 534 |
+
/**
|
| 535 |
+
* Number of event group sets.
|
| 536 |
+
*/
|
| 537 |
+
uint32_t numSets;
|
| 538 |
+
/**
|
| 539 |
+
* An array of \p numSets event group sets.
|
| 540 |
+
*/
|
| 541 |
+
CUpti_EventGroupSet *sets;
|
| 542 |
+
} CUpti_EventGroupSets;
|
| 543 |
+
|
| 544 |
+
/**
|
| 545 |
+
* \brief Set the event collection mode.
|
| 546 |
+
*
|
| 547 |
+
* Set the event collection mode for a \p context. The \p mode
|
| 548 |
+
* controls the event collection behavior of all events in event
|
| 549 |
+
* groups created in the \p context. This API is invalid in kernel
|
| 550 |
+
* replay mode.
|
| 551 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 552 |
+
*
|
| 553 |
+
* \param context The context
|
| 554 |
+
* \param mode The event collection mode
|
| 555 |
+
*
|
| 556 |
+
* \retval CUPTI_SUCCESS
|
| 557 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 558 |
+
* \retval CUPTI_ERROR_INVALID_CONTEXT
|
| 559 |
+
* \retval CUPTI_ERROR_INVALID_OPERATION if called when replay mode is enabled
|
| 560 |
+
* \retval CUPTI_ERROR_NOT_SUPPORTED if mode is not supported on the device
|
| 561 |
+
*/
|
| 562 |
+
|
| 563 |
+
CUptiResult CUPTIAPI cuptiSetEventCollectionMode(CUcontext context,
|
| 564 |
+
CUpti_EventCollectionMode mode);
|
| 565 |
+
|
| 566 |
+
/**
|
| 567 |
+
* \brief Read a device attribute.
|
| 568 |
+
*
|
| 569 |
+
* Read a device attribute and return it in \p *value.
|
| 570 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 571 |
+
*
|
| 572 |
+
* \param device The CUDA device
|
| 573 |
+
* \param attrib The attribute to read
|
| 574 |
+
* \param valueSize Size of buffer pointed by the value, and
|
| 575 |
+
* returns the number of bytes written to \p value
|
| 576 |
+
* \param value Returns the value of the attribute
|
| 577 |
+
*
|
| 578 |
+
* \retval CUPTI_SUCCESS
|
| 579 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 580 |
+
* \retval CUPTI_ERROR_INVALID_DEVICE
|
| 581 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p valueSize or \p value
|
| 582 |
+
* is NULL, or if \p attrib is not a device attribute
|
| 583 |
+
* \retval CUPTI_ERROR_PARAMETER_SIZE_NOT_SUFFICIENT For non-c-string
|
| 584 |
+
* attribute values, indicates that the \p value buffer is too small
|
| 585 |
+
* to hold the attribute value.
|
| 586 |
+
*/
|
| 587 |
+
CUptiResult CUPTIAPI cuptiDeviceGetAttribute(CUdevice device,
|
| 588 |
+
CUpti_DeviceAttribute attrib,
|
| 589 |
+
size_t *valueSize,
|
| 590 |
+
void *value);
|
| 591 |
+
|
| 592 |
+
/**
|
| 593 |
+
* \brief Get the number of domains for a device.
|
| 594 |
+
*
|
| 595 |
+
* Returns the number of domains in \p numDomains for a device.
|
| 596 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 597 |
+
*
|
| 598 |
+
* \param device The CUDA device
|
| 599 |
+
* \param numDomains Returns the number of domains
|
| 600 |
+
*
|
| 601 |
+
* \retval CUPTI_SUCCESS
|
| 602 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 603 |
+
* \retval CUPTI_ERROR_INVALID_DEVICE
|
| 604 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p numDomains is NULL
|
| 605 |
+
*/
|
| 606 |
+
CUptiResult CUPTIAPI cuptiDeviceGetNumEventDomains(CUdevice device,
|
| 607 |
+
uint32_t *numDomains);
|
| 608 |
+
|
| 609 |
+
/**
|
| 610 |
+
* \brief Get the event domains for a device.
|
| 611 |
+
*
|
| 612 |
+
* Returns the event domains IDs in \p domainArray for a device. The
|
| 613 |
+
* size of the \p domainArray buffer is given by \p
|
| 614 |
+
* *arraySizeBytes. The size of the \p domainArray buffer must be at
|
| 615 |
+
* least \p numdomains * sizeof(CUpti_EventDomainID) or else all
|
| 616 |
+
* domains will not be returned. The value returned in \p
|
| 617 |
+
* *arraySizeBytes contains the number of bytes returned in \p
|
| 618 |
+
* domainArray.
|
| 619 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 620 |
+
*
|
| 621 |
+
* \param device The CUDA device
|
| 622 |
+
* \param arraySizeBytes The size of \p domainArray in bytes, and
|
| 623 |
+
* returns the number of bytes written to \p domainArray
|
| 624 |
+
* \param domainArray Returns the IDs of the event domains for the device
|
| 625 |
+
*
|
| 626 |
+
* \retval CUPTI_SUCCESS
|
| 627 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 628 |
+
* \retval CUPTI_ERROR_INVALID_DEVICE
|
| 629 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p arraySizeBytes or
|
| 630 |
+
* \p domainArray are NULL
|
| 631 |
+
*/
|
| 632 |
+
CUptiResult CUPTIAPI cuptiDeviceEnumEventDomains(CUdevice device,
|
| 633 |
+
size_t *arraySizeBytes,
|
| 634 |
+
CUpti_EventDomainID *domainArray);
|
| 635 |
+
|
| 636 |
+
/**
|
| 637 |
+
* \brief Read an event domain attribute.
|
| 638 |
+
*
|
| 639 |
+
* Returns an event domain attribute in \p *value. The size of the \p
|
| 640 |
+
* value buffer is given by \p *valueSize. The value returned in \p
|
| 641 |
+
* *valueSize contains the number of bytes returned in \p value.
|
| 642 |
+
*
|
| 643 |
+
* If the attribute value is a c-string that is longer than \p
|
| 644 |
+
* *valueSize, then only the first \p *valueSize characters will be
|
| 645 |
+
* returned and there will be no terminating null byte.
|
| 646 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 647 |
+
*
|
| 648 |
+
* \param device The CUDA device
|
| 649 |
+
* \param eventDomain ID of the event domain
|
| 650 |
+
* \param attrib The event domain attribute to read
|
| 651 |
+
* \param valueSize The size of the \p value buffer in bytes, and
|
| 652 |
+
* returns the number of bytes written to \p value
|
| 653 |
+
* \param value Returns the attribute's value
|
| 654 |
+
*
|
| 655 |
+
* \retval CUPTI_SUCCESS
|
| 656 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 657 |
+
* \retval CUPTI_ERROR_INVALID_DEVICE
|
| 658 |
+
* \retval CUPTI_ERROR_INVALID_EVENT_DOMAIN_ID
|
| 659 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p valueSize or \p value
|
| 660 |
+
* is NULL, or if \p attrib is not an event domain attribute
|
| 661 |
+
* \retval CUPTI_ERROR_PARAMETER_SIZE_NOT_SUFFICIENT For non-c-string
|
| 662 |
+
* attribute values, indicates that the \p value buffer is too small
|
| 663 |
+
* to hold the attribute value.
|
| 664 |
+
*/
|
| 665 |
+
CUptiResult CUPTIAPI cuptiDeviceGetEventDomainAttribute(CUdevice device,
|
| 666 |
+
CUpti_EventDomainID eventDomain,
|
| 667 |
+
CUpti_EventDomainAttribute attrib,
|
| 668 |
+
size_t *valueSize,
|
| 669 |
+
void *value);
|
| 670 |
+
|
| 671 |
+
/**
|
| 672 |
+
* \brief Get the number of event domains available on any device.
|
| 673 |
+
*
|
| 674 |
+
* Returns the total number of event domains available on any
|
| 675 |
+
* CUDA-capable device.
|
| 676 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 677 |
+
*
|
| 678 |
+
* \param numDomains Returns the number of domains
|
| 679 |
+
*
|
| 680 |
+
* \retval CUPTI_SUCCESS
|
| 681 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p numDomains is NULL
|
| 682 |
+
*/
|
| 683 |
+
CUptiResult CUPTIAPI cuptiGetNumEventDomains(uint32_t *numDomains);
|
| 684 |
+
|
| 685 |
+
/**
|
| 686 |
+
* \brief Get the event domains available on any device.
|
| 687 |
+
*
|
| 688 |
+
* Returns all the event domains available on any CUDA-capable device.
|
| 689 |
+
* Event domain IDs are returned in \p domainArray. The size of the \p
|
| 690 |
+
* domainArray buffer is given by \p *arraySizeBytes. The size of the
|
| 691 |
+
* \p domainArray buffer must be at least \p numDomains *
|
| 692 |
+
* sizeof(CUpti_EventDomainID) or all domains will not be
|
| 693 |
+
* returned. The value returned in \p *arraySizeBytes contains the
|
| 694 |
+
* number of bytes returned in \p domainArray.
|
| 695 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 696 |
+
*
|
| 697 |
+
* \param arraySizeBytes The size of \p domainArray in bytes, and
|
| 698 |
+
* returns the number of bytes written to \p domainArray
|
| 699 |
+
* \param domainArray Returns all the event domains
|
| 700 |
+
*
|
| 701 |
+
* \retval CUPTI_SUCCESS
|
| 702 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p arraySizeBytes or
|
| 703 |
+
* \p domainArray are NULL
|
| 704 |
+
*/
|
| 705 |
+
CUptiResult CUPTIAPI cuptiEnumEventDomains(size_t *arraySizeBytes,
|
| 706 |
+
CUpti_EventDomainID *domainArray);
|
| 707 |
+
|
| 708 |
+
/**
|
| 709 |
+
* \brief Read an event domain attribute.
|
| 710 |
+
*
|
| 711 |
+
* Returns an event domain attribute in \p *value. The size of the \p
|
| 712 |
+
* value buffer is given by \p *valueSize. The value returned in \p
|
| 713 |
+
* *valueSize contains the number of bytes returned in \p value.
|
| 714 |
+
*
|
| 715 |
+
* If the attribute value is a c-string that is longer than \p
|
| 716 |
+
* *valueSize, then only the first \p *valueSize characters will be
|
| 717 |
+
* returned and there will be no terminating null byte.
|
| 718 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 719 |
+
*
|
| 720 |
+
* \param eventDomain ID of the event domain
|
| 721 |
+
* \param attrib The event domain attribute to read
|
| 722 |
+
* \param valueSize The size of the \p value buffer in bytes, and
|
| 723 |
+
* returns the number of bytes written to \p value
|
| 724 |
+
* \param value Returns the attribute's value
|
| 725 |
+
*
|
| 726 |
+
* \retval CUPTI_SUCCESS
|
| 727 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 728 |
+
* \retval CUPTI_ERROR_INVALID_EVENT_DOMAIN_ID
|
| 729 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p valueSize or \p value
|
| 730 |
+
* is NULL, or if \p attrib is not an event domain attribute
|
| 731 |
+
* \retval CUPTI_ERROR_PARAMETER_SIZE_NOT_SUFFICIENT For non-c-string
|
| 732 |
+
* attribute values, indicates that the \p value buffer is too small
|
| 733 |
+
* to hold the attribute value.
|
| 734 |
+
*/
|
| 735 |
+
CUptiResult CUPTIAPI cuptiEventDomainGetAttribute(CUpti_EventDomainID eventDomain,
|
| 736 |
+
CUpti_EventDomainAttribute attrib,
|
| 737 |
+
size_t *valueSize,
|
| 738 |
+
void *value);
|
| 739 |
+
|
| 740 |
+
/**
|
| 741 |
+
* \brief Get number of events in a domain.
|
| 742 |
+
*
|
| 743 |
+
* Returns the number of events in \p numEvents for a domain.
|
| 744 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 745 |
+
*
|
| 746 |
+
* \param eventDomain ID of the event domain
|
| 747 |
+
* \param numEvents Returns the number of events in the domain
|
| 748 |
+
*
|
| 749 |
+
* \retval CUPTI_SUCCESS
|
| 750 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 751 |
+
* \retval CUPTI_ERROR_INVALID_EVENT_DOMAIN_ID
|
| 752 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p numEvents is NULL
|
| 753 |
+
*/
|
| 754 |
+
CUptiResult CUPTIAPI cuptiEventDomainGetNumEvents(CUpti_EventDomainID eventDomain,
|
| 755 |
+
uint32_t *numEvents);
|
| 756 |
+
|
| 757 |
+
/**
|
| 758 |
+
* \brief Get the events in a domain.
|
| 759 |
+
*
|
| 760 |
+
* Returns the event IDs in \p eventArray for a domain. The size of
|
| 761 |
+
* the \p eventArray buffer is given by \p *arraySizeBytes. The size
|
| 762 |
+
* of the \p eventArray buffer must be at least \p numdomainevents *
|
| 763 |
+
* sizeof(CUpti_EventID) or else all events will not be returned. The
|
| 764 |
+
* value returned in \p *arraySizeBytes contains the number of bytes
|
| 765 |
+
* returned in \p eventArray.
|
| 766 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 767 |
+
*
|
| 768 |
+
* \param eventDomain ID of the event domain
|
| 769 |
+
* \param arraySizeBytes The size of \p eventArray in bytes, and
|
| 770 |
+
* returns the number of bytes written to \p eventArray
|
| 771 |
+
* \param eventArray Returns the IDs of the events in the domain
|
| 772 |
+
*
|
| 773 |
+
* \retval CUPTI_SUCCESS
|
| 774 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 775 |
+
* \retval CUPTI_ERROR_INVALID_EVENT_DOMAIN_ID
|
| 776 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p arraySizeBytes or \p
|
| 777 |
+
* eventArray are NULL
|
| 778 |
+
*/
|
| 779 |
+
CUptiResult CUPTIAPI cuptiEventDomainEnumEvents(CUpti_EventDomainID eventDomain,
|
| 780 |
+
size_t *arraySizeBytes,
|
| 781 |
+
CUpti_EventID *eventArray);
|
| 782 |
+
|
| 783 |
+
/**
|
| 784 |
+
* \brief Get an event attribute.
|
| 785 |
+
*
|
| 786 |
+
* Returns an event attribute in \p *value. The size of the \p
|
| 787 |
+
* value buffer is given by \p *valueSize. The value returned in \p
|
| 788 |
+
* *valueSize contains the number of bytes returned in \p value.
|
| 789 |
+
*
|
| 790 |
+
* If the attribute value is a c-string that is longer than \p
|
| 791 |
+
* *valueSize, then only the first \p *valueSize characters will be
|
| 792 |
+
* returned and there will be no terminating null byte.
|
| 793 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 794 |
+
*
|
| 795 |
+
* \param event ID of the event
|
| 796 |
+
* \param attrib The event attribute to read
|
| 797 |
+
* \param valueSize The size of the \p value buffer in bytes, and
|
| 798 |
+
* returns the number of bytes written to \p value
|
| 799 |
+
* \param value Returns the attribute's value
|
| 800 |
+
*
|
| 801 |
+
* \retval CUPTI_SUCCESS
|
| 802 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 803 |
+
* \retval CUPTI_ERROR_INVALID_EVENT_ID
|
| 804 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p valueSize or \p value
|
| 805 |
+
* is NULL, or if \p attrib is not an event attribute
|
| 806 |
+
* \retval CUPTI_ERROR_PARAMETER_SIZE_NOT_SUFFICIENT For non-c-string
|
| 807 |
+
* attribute values, indicates that the \p value buffer is too small
|
| 808 |
+
* to hold the attribute value.
|
| 809 |
+
*/
|
| 810 |
+
CUptiResult CUPTIAPI cuptiEventGetAttribute(CUpti_EventID event,
|
| 811 |
+
CUpti_EventAttribute attrib,
|
| 812 |
+
size_t *valueSize,
|
| 813 |
+
void *value);
|
| 814 |
+
|
| 815 |
+
/**
|
| 816 |
+
* \brief Find an event by name.
|
| 817 |
+
*
|
| 818 |
+
* Find an event by name and return the event ID in \p *event.
|
| 819 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 820 |
+
*
|
| 821 |
+
* \param device The CUDA device
|
| 822 |
+
* \param eventName The name of the event to find
|
| 823 |
+
* \param event Returns the ID of the found event or undefined if
|
| 824 |
+
* unable to find the event
|
| 825 |
+
*
|
| 826 |
+
* \retval CUPTI_SUCCESS
|
| 827 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 828 |
+
* \retval CUPTI_ERROR_INVALID_DEVICE
|
| 829 |
+
* \retval CUPTI_ERROR_INVALID_EVENT_NAME if unable to find an event
|
| 830 |
+
* with name \p eventName. In this case \p *event is undefined
|
| 831 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p eventName or \p event are NULL
|
| 832 |
+
*/
|
| 833 |
+
CUptiResult CUPTIAPI cuptiEventGetIdFromName(CUdevice device,
|
| 834 |
+
const char *eventName,
|
| 835 |
+
CUpti_EventID *event);
|
| 836 |
+
|
| 837 |
+
/**
|
| 838 |
+
* \brief Create a new event group for a context.
|
| 839 |
+
*
|
| 840 |
+
* Creates a new event group for \p context and returns the new group
|
| 841 |
+
* in \p *eventGroup.
|
| 842 |
+
* \note \p flags are reserved for future use and should be set to zero.
|
| 843 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 844 |
+
*
|
| 845 |
+
* \param context The context for the event group
|
| 846 |
+
* \param eventGroup Returns the new event group
|
| 847 |
+
* \param flags Reserved - must be zero
|
| 848 |
+
*
|
| 849 |
+
* \retval CUPTI_SUCCESS
|
| 850 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 851 |
+
* \retval CUPTI_ERROR_INVALID_CONTEXT
|
| 852 |
+
* \retval CUPTI_ERROR_OUT_OF_MEMORY
|
| 853 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p eventGroup is NULL
|
| 854 |
+
*/
|
| 855 |
+
CUptiResult CUPTIAPI cuptiEventGroupCreate(CUcontext context,
|
| 856 |
+
CUpti_EventGroup *eventGroup,
|
| 857 |
+
uint32_t flags);
|
| 858 |
+
|
| 859 |
+
/**
|
| 860 |
+
* \brief Destroy an event group.
|
| 861 |
+
*
|
| 862 |
+
* Destroy an \p eventGroup and free its resources. An event group
|
| 863 |
+
* cannot be destroyed if it is enabled.
|
| 864 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 865 |
+
*
|
| 866 |
+
* \param eventGroup The event group to destroy
|
| 867 |
+
*
|
| 868 |
+
* \retval CUPTI_SUCCESS
|
| 869 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 870 |
+
* \retval CUPTI_ERROR_INVALID_OPERATION if the event group is enabled
|
| 871 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if eventGroup is NULL
|
| 872 |
+
*/
|
| 873 |
+
CUptiResult CUPTIAPI cuptiEventGroupDestroy(CUpti_EventGroup eventGroup);
|
| 874 |
+
|
| 875 |
+
/**
|
| 876 |
+
* \brief Read an event group attribute.
|
| 877 |
+
*
|
| 878 |
+
* Read an event group attribute and return it in \p *value.
|
| 879 |
+
* \note \b Thread-safety: this function is thread safe but client
|
| 880 |
+
* must guard against simultaneous destruction or modification of \p
|
| 881 |
+
* eventGroup (for example, client must guard against simultaneous
|
| 882 |
+
* calls to \ref cuptiEventGroupDestroy, \ref cuptiEventGroupAddEvent,
|
| 883 |
+
* etc.), and must guard against simultaneous destruction of the
|
| 884 |
+
* context in which \p eventGroup was created (for example, client
|
| 885 |
+
* must guard against simultaneous calls to cudaDeviceReset,
|
| 886 |
+
* cuCtxDestroy, etc.).
|
| 887 |
+
*
|
| 888 |
+
* \param eventGroup The event group
|
| 889 |
+
* \param attrib The attribute to read
|
| 890 |
+
* \param valueSize Size of buffer pointed by the value, and
|
| 891 |
+
* returns the number of bytes written to \p value
|
| 892 |
+
* \param value Returns the value of the attribute
|
| 893 |
+
*
|
| 894 |
+
* \retval CUPTI_SUCCESS
|
| 895 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 896 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p valueSize or \p value
|
| 897 |
+
* is NULL, or if \p attrib is not an eventgroup attribute
|
| 898 |
+
* \retval CUPTI_ERROR_PARAMETER_SIZE_NOT_SUFFICIENT For non-c-string
|
| 899 |
+
* attribute values, indicates that the \p value buffer is too small
|
| 900 |
+
* to hold the attribute value.
|
| 901 |
+
*/
|
| 902 |
+
CUptiResult CUPTIAPI cuptiEventGroupGetAttribute(CUpti_EventGroup eventGroup,
|
| 903 |
+
CUpti_EventGroupAttribute attrib,
|
| 904 |
+
size_t *valueSize,
|
| 905 |
+
void *value);
|
| 906 |
+
|
| 907 |
+
/**
|
| 908 |
+
* \brief Write an event group attribute.
|
| 909 |
+
*
|
| 910 |
+
* Write an event group attribute.
|
| 911 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 912 |
+
*
|
| 913 |
+
* \param eventGroup The event group
|
| 914 |
+
* \param attrib The attribute to write
|
| 915 |
+
* \param valueSize The size, in bytes, of the value
|
| 916 |
+
* \param value The attribute value to write
|
| 917 |
+
*
|
| 918 |
+
* \retval CUPTI_SUCCESS
|
| 919 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 920 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p valueSize or \p value
|
| 921 |
+
* is NULL, or if \p attrib is not an event group attribute, or if
|
| 922 |
+
* \p attrib is not a writable attribute
|
| 923 |
+
* \retval CUPTI_ERROR_PARAMETER_SIZE_NOT_SUFFICIENT Indicates that
|
| 924 |
+
* the \p value buffer is too small to hold the attribute value.
|
| 925 |
+
*/
|
| 926 |
+
CUptiResult CUPTIAPI cuptiEventGroupSetAttribute(CUpti_EventGroup eventGroup,
|
| 927 |
+
CUpti_EventGroupAttribute attrib,
|
| 928 |
+
size_t valueSize,
|
| 929 |
+
void *value);
|
| 930 |
+
|
| 931 |
+
/**
|
| 932 |
+
* \brief Add an event to an event group.
|
| 933 |
+
*
|
| 934 |
+
* Add an event to an event group. The event add can fail for a number of reasons:
|
| 935 |
+
* \li The event group is enabled
|
| 936 |
+
* \li The event does not belong to the same event domain as the
|
| 937 |
+
* events that are already in the event group
|
| 938 |
+
* \li Device limitations on the events that can belong to the same group
|
| 939 |
+
* \li The event group is full
|
| 940 |
+
*
|
| 941 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 942 |
+
*
|
| 943 |
+
* \param eventGroup The event group
|
| 944 |
+
* \param event The event to add to the group
|
| 945 |
+
*
|
| 946 |
+
* \retval CUPTI_SUCCESS
|
| 947 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 948 |
+
* \retval CUPTI_ERROR_INVALID_EVENT_ID
|
| 949 |
+
* \retval CUPTI_ERROR_OUT_OF_MEMORY
|
| 950 |
+
* \retval CUPTI_ERROR_INVALID_OPERATION if \p eventGroup is enabled
|
| 951 |
+
* \retval CUPTI_ERROR_NOT_COMPATIBLE if \p event belongs to a
|
| 952 |
+
* different event domain than the events already in \p eventGroup, or
|
| 953 |
+
* if a device limitation prevents \p event from being collected at
|
| 954 |
+
* the same time as the events already in \p eventGroup
|
| 955 |
+
* \retval CUPTI_ERROR_MAX_LIMIT_REACHED if \p eventGroup is full
|
| 956 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p eventGroup is NULL
|
| 957 |
+
*/
|
| 958 |
+
CUptiResult CUPTIAPI cuptiEventGroupAddEvent(CUpti_EventGroup eventGroup,
|
| 959 |
+
CUpti_EventID event);
|
| 960 |
+
|
| 961 |
+
/**
|
| 962 |
+
* \brief Remove an event from an event group.
|
| 963 |
+
*
|
| 964 |
+
* Remove \p event from the an event group. The event cannot be
|
| 965 |
+
* removed if the event group is enabled.
|
| 966 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 967 |
+
*
|
| 968 |
+
* \param eventGroup The event group
|
| 969 |
+
* \param event The event to remove from the group
|
| 970 |
+
*
|
| 971 |
+
* \retval CUPTI_SUCCESS
|
| 972 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 973 |
+
* \retval CUPTI_ERROR_INVALID_EVENT_ID
|
| 974 |
+
* \retval CUPTI_ERROR_INVALID_OPERATION if \p eventGroup is enabled
|
| 975 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p eventGroup is NULL
|
| 976 |
+
*/
|
| 977 |
+
CUptiResult CUPTIAPI cuptiEventGroupRemoveEvent(CUpti_EventGroup eventGroup,
|
| 978 |
+
CUpti_EventID event);
|
| 979 |
+
|
| 980 |
+
/**
|
| 981 |
+
* \brief Remove all events from an event group.
|
| 982 |
+
*
|
| 983 |
+
* Remove all events from an event group. Events cannot be removed if
|
| 984 |
+
* the event group is enabled.
|
| 985 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 986 |
+
*
|
| 987 |
+
* \param eventGroup The event group
|
| 988 |
+
*
|
| 989 |
+
* \retval CUPTI_SUCCESS
|
| 990 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 991 |
+
* \retval CUPTI_ERROR_INVALID_OPERATION if \p eventGroup is enabled
|
| 992 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p eventGroup is NULL
|
| 993 |
+
*/
|
| 994 |
+
CUptiResult CUPTIAPI cuptiEventGroupRemoveAllEvents(CUpti_EventGroup eventGroup);
|
| 995 |
+
|
| 996 |
+
/**
|
| 997 |
+
* \brief Zero all the event counts in an event group.
|
| 998 |
+
*
|
| 999 |
+
* Zero all the event counts in an event group.
|
| 1000 |
+
* \note \b Thread-safety: this function is thread safe but client
|
| 1001 |
+
* must guard against simultaneous destruction or modification of \p
|
| 1002 |
+
* eventGroup (for example, client must guard against simultaneous
|
| 1003 |
+
* calls to \ref cuptiEventGroupDestroy, \ref cuptiEventGroupAddEvent,
|
| 1004 |
+
* etc.), and must guard against simultaneous destruction of the
|
| 1005 |
+
* context in which \p eventGroup was created (for example, client
|
| 1006 |
+
* must guard against simultaneous calls to cudaDeviceReset,
|
| 1007 |
+
* cuCtxDestroy, etc.).
|
| 1008 |
+
*
|
| 1009 |
+
* \param eventGroup The event group
|
| 1010 |
+
*
|
| 1011 |
+
* \retval CUPTI_SUCCESS
|
| 1012 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 1013 |
+
* \retval CUPTI_ERROR_HARDWARE
|
| 1014 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p eventGroup is NULL
|
| 1015 |
+
*/
|
| 1016 |
+
CUptiResult CUPTIAPI cuptiEventGroupResetAllEvents(CUpti_EventGroup eventGroup);
|
| 1017 |
+
|
| 1018 |
+
/**
|
| 1019 |
+
* \brief Enable an event group.
|
| 1020 |
+
*
|
| 1021 |
+
* Enable an event group. Enabling an event group zeros the value of
|
| 1022 |
+
* all the events in the group and then starts collection of those
|
| 1023 |
+
* events.
|
| 1024 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 1025 |
+
*
|
| 1026 |
+
* \param eventGroup The event group
|
| 1027 |
+
*
|
| 1028 |
+
* \retval CUPTI_SUCCESS
|
| 1029 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 1030 |
+
* \retval CUPTI_ERROR_HARDWARE
|
| 1031 |
+
* \retval CUPTI_ERROR_NOT_READY if \p eventGroup does not contain any events
|
| 1032 |
+
* \retval CUPTI_ERROR_NOT_COMPATIBLE if \p eventGroup cannot be
|
| 1033 |
+
* enabled due to other already enabled event groups
|
| 1034 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p eventGroup is NULL
|
| 1035 |
+
* \retval CUPTI_ERROR_HARDWARE_BUSY if another client is profiling
|
| 1036 |
+
* and hardware is busy
|
| 1037 |
+
*/
|
| 1038 |
+
CUptiResult CUPTIAPI cuptiEventGroupEnable(CUpti_EventGroup eventGroup);
|
| 1039 |
+
|
| 1040 |
+
/**
|
| 1041 |
+
* \brief Disable an event group.
|
| 1042 |
+
*
|
| 1043 |
+
* Disable an event group. Disabling an event group stops collection
|
| 1044 |
+
* of events contained in the group.
|
| 1045 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 1046 |
+
*
|
| 1047 |
+
* \param eventGroup The event group
|
| 1048 |
+
*
|
| 1049 |
+
* \retval CUPTI_SUCCESS
|
| 1050 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 1051 |
+
* \retval CUPTI_ERROR_HARDWARE
|
| 1052 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p eventGroup is NULL
|
| 1053 |
+
*/
|
| 1054 |
+
CUptiResult CUPTIAPI cuptiEventGroupDisable(CUpti_EventGroup eventGroup);
|
| 1055 |
+
|
| 1056 |
+
/**
|
| 1057 |
+
* \brief Read the value for an event in an event group.
|
| 1058 |
+
*
|
| 1059 |
+
* Read the value for an event in an event group. The event value is
|
| 1060 |
+
* returned in the \p eventValueBuffer buffer. \p
|
| 1061 |
+
* eventValueBufferSizeBytes indicates the size of the \p
|
| 1062 |
+
* eventValueBuffer buffer. The buffer must be at least sizeof(uint64)
|
| 1063 |
+
* if ::CUPTI_EVENT_GROUP_ATTR_PROFILE_ALL_DOMAIN_INSTANCES is not set
|
| 1064 |
+
* on the group containing the event. The buffer must be at least
|
| 1065 |
+
* (sizeof(uint64) * number of domain instances) if
|
| 1066 |
+
* ::CUPTI_EVENT_GROUP_ATTR_PROFILE_ALL_DOMAIN_INSTANCES is set on the
|
| 1067 |
+
* group.
|
| 1068 |
+
*
|
| 1069 |
+
* If any instance of an event counter overflows, the value returned
|
| 1070 |
+
* for that event instance will be ::CUPTI_EVENT_OVERFLOW.
|
| 1071 |
+
*
|
| 1072 |
+
* The only allowed value for \p flags is ::CUPTI_EVENT_READ_FLAG_NONE.
|
| 1073 |
+
*
|
| 1074 |
+
* Reading an event from a disabled event group is not allowed. After
|
| 1075 |
+
* being read, an event's value is reset to zero.
|
| 1076 |
+
* \note \b Thread-safety: this function is thread safe but client
|
| 1077 |
+
* must guard against simultaneous destruction or modification of \p
|
| 1078 |
+
* eventGroup (for example, client must guard against simultaneous
|
| 1079 |
+
* calls to \ref cuptiEventGroupDestroy, \ref cuptiEventGroupAddEvent,
|
| 1080 |
+
* etc.), and must guard against simultaneous destruction of the
|
| 1081 |
+
* context in which \p eventGroup was created (for example, client
|
| 1082 |
+
* must guard against simultaneous calls to cudaDeviceReset,
|
| 1083 |
+
* cuCtxDestroy, etc.). If \ref cuptiEventGroupResetAllEvents is
|
| 1084 |
+
* called simultaneously with this function, then returned event
|
| 1085 |
+
* values are undefined.
|
| 1086 |
+
*
|
| 1087 |
+
* \param eventGroup The event group
|
| 1088 |
+
* \param flags Flags controlling the reading mode
|
| 1089 |
+
* \param event The event to read
|
| 1090 |
+
* \param eventValueBufferSizeBytes The size of \p eventValueBuffer
|
| 1091 |
+
* in bytes, and returns the number of bytes written to \p
|
| 1092 |
+
* eventValueBuffer
|
| 1093 |
+
* \param eventValueBuffer Returns the event value(s)
|
| 1094 |
+
*
|
| 1095 |
+
* \retval CUPTI_SUCCESS
|
| 1096 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 1097 |
+
* \retval CUPTI_ERROR_INVALID_EVENT_ID
|
| 1098 |
+
* \retval CUPTI_ERROR_HARDWARE
|
| 1099 |
+
* \retval CUPTI_ERROR_INVALID_OPERATION if \p eventGroup is disabled
|
| 1100 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p eventGroup, \p
|
| 1101 |
+
* eventValueBufferSizeBytes or \p eventValueBuffer is NULL
|
| 1102 |
+
* \retval CUPTI_ERROR_PARAMETER_SIZE_NOT_SUFFICIENT if size of \p eventValueBuffer
|
| 1103 |
+
* is not sufficient
|
| 1104 |
+
*/
|
| 1105 |
+
CUptiResult CUPTIAPI cuptiEventGroupReadEvent(CUpti_EventGroup eventGroup,
|
| 1106 |
+
CUpti_ReadEventFlags flags,
|
| 1107 |
+
CUpti_EventID event,
|
| 1108 |
+
size_t *eventValueBufferSizeBytes,
|
| 1109 |
+
uint64_t *eventValueBuffer);
|
| 1110 |
+
|
| 1111 |
+
/**
|
| 1112 |
+
* \brief Read the values for all the events in an event group.
|
| 1113 |
+
*
|
| 1114 |
+
* Read the values for all the events in an event group. The event
|
| 1115 |
+
* values are returned in the \p eventValueBuffer buffer. \p
|
| 1116 |
+
* eventValueBufferSizeBytes indicates the size of \p
|
| 1117 |
+
* eventValueBuffer. The buffer must be at least (sizeof(uint64) *
|
| 1118 |
+
* number of events in group) if
|
| 1119 |
+
* ::CUPTI_EVENT_GROUP_ATTR_PROFILE_ALL_DOMAIN_INSTANCES is not set on
|
| 1120 |
+
* the group containing the events. The buffer must be at least
|
| 1121 |
+
* (sizeof(uint64) * number of domain instances * number of events in
|
| 1122 |
+
* group) if ::CUPTI_EVENT_GROUP_ATTR_PROFILE_ALL_DOMAIN_INSTANCES is
|
| 1123 |
+
* set on the group.
|
| 1124 |
+
*
|
| 1125 |
+
* The data format returned in \p eventValueBuffer is:
|
| 1126 |
+
* - domain instance 0: event0 event1 ... eventN
|
| 1127 |
+
* - domain instance 1: event0 event1 ... eventN
|
| 1128 |
+
* - ...
|
| 1129 |
+
* - domain instance M: event0 event1 ... eventN
|
| 1130 |
+
*
|
| 1131 |
+
* The event order in \p eventValueBuffer is returned in \p
|
| 1132 |
+
* eventIdArray. The size of \p eventIdArray is specified in \p
|
| 1133 |
+
* eventIdArraySizeBytes. The size should be at least
|
| 1134 |
+
* (sizeof(CUpti_EventID) * number of events in group).
|
| 1135 |
+
*
|
| 1136 |
+
* If any instance of any event counter overflows, the value returned
|
| 1137 |
+
* for that event instance will be ::CUPTI_EVENT_OVERFLOW.
|
| 1138 |
+
*
|
| 1139 |
+
* The only allowed value for \p flags is ::CUPTI_EVENT_READ_FLAG_NONE.
|
| 1140 |
+
*
|
| 1141 |
+
* Reading events from a disabled event group is not allowed. After
|
| 1142 |
+
* being read, an event's value is reset to zero.
|
| 1143 |
+
* \note \b Thread-safety: this function is thread safe but client
|
| 1144 |
+
* must guard against simultaneous destruction or modification of \p
|
| 1145 |
+
* eventGroup (for example, client must guard against simultaneous
|
| 1146 |
+
* calls to \ref cuptiEventGroupDestroy, \ref cuptiEventGroupAddEvent,
|
| 1147 |
+
* etc.), and must guard against simultaneous destruction of the
|
| 1148 |
+
* context in which \p eventGroup was created (for example, client
|
| 1149 |
+
* must guard against simultaneous calls to cudaDeviceReset,
|
| 1150 |
+
* cuCtxDestroy, etc.). If \ref cuptiEventGroupResetAllEvents is
|
| 1151 |
+
* called simultaneously with this function, then returned event
|
| 1152 |
+
* values are undefined.
|
| 1153 |
+
*
|
| 1154 |
+
* \param eventGroup The event group
|
| 1155 |
+
* \param flags Flags controlling the reading mode
|
| 1156 |
+
* \param eventValueBufferSizeBytes The size of \p eventValueBuffer in
|
| 1157 |
+
* bytes, and returns the number of bytes written to \p
|
| 1158 |
+
* eventValueBuffer
|
| 1159 |
+
* \param eventValueBuffer Returns the event values
|
| 1160 |
+
* \param eventIdArraySizeBytes The size of \p eventIdArray in bytes,
|
| 1161 |
+
* and returns the number of bytes written to \p eventIdArray
|
| 1162 |
+
* \param eventIdArray Returns the IDs of the events in the same order
|
| 1163 |
+
* as the values return in eventValueBuffer.
|
| 1164 |
+
* \param numEventIdsRead Returns the number of event IDs returned
|
| 1165 |
+
* in \p eventIdArray
|
| 1166 |
+
*
|
| 1167 |
+
* \retval CUPTI_SUCCESS
|
| 1168 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 1169 |
+
* \retval CUPTI_ERROR_HARDWARE
|
| 1170 |
+
* \retval CUPTI_ERROR_INVALID_OPERATION if \p eventGroup is disabled
|
| 1171 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p eventGroup, \p
|
| 1172 |
+
* eventValueBufferSizeBytes, \p eventValueBuffer, \p
|
| 1173 |
+
* eventIdArraySizeBytes, \p eventIdArray or \p numEventIdsRead is
|
| 1174 |
+
* NULL
|
| 1175 |
+
* \retval CUPTI_ERROR_PARAMETER_SIZE_NOT_SUFFICIENT if size of \p eventValueBuffer
|
| 1176 |
+
* or \p eventIdArray is not sufficient
|
| 1177 |
+
*/
|
| 1178 |
+
CUptiResult CUPTIAPI cuptiEventGroupReadAllEvents(CUpti_EventGroup eventGroup,
|
| 1179 |
+
CUpti_ReadEventFlags flags,
|
| 1180 |
+
size_t *eventValueBufferSizeBytes,
|
| 1181 |
+
uint64_t *eventValueBuffer,
|
| 1182 |
+
size_t *eventIdArraySizeBytes,
|
| 1183 |
+
CUpti_EventID *eventIdArray,
|
| 1184 |
+
size_t *numEventIdsRead);
|
| 1185 |
+
|
| 1186 |
+
/**
|
| 1187 |
+
* \brief For a set of events, get the grouping that indicates the
|
| 1188 |
+
* number of passes and the event groups necessary to collect the
|
| 1189 |
+
* events.
|
| 1190 |
+
*
|
| 1191 |
+
* The number of events that can be collected simultaneously varies by
|
| 1192 |
+
* device and by the type of the events. When events can be collected
|
| 1193 |
+
* simultaneously, they may need to be grouped into multiple event
|
| 1194 |
+
* groups because they are from different event domains. This function
|
| 1195 |
+
* takes a set of events and determines how many passes are required
|
| 1196 |
+
* to collect all those events, and which events can be collected
|
| 1197 |
+
* simultaneously in each pass.
|
| 1198 |
+
*
|
| 1199 |
+
* The CUpti_EventGroupSets returned in \p eventGroupPasses indicates
|
| 1200 |
+
* how many passes are required to collect the events with the \p
|
| 1201 |
+
* numSets field. Within each event group set, the \p sets array
|
| 1202 |
+
* indicates the event groups that should be collected on each pass.
|
| 1203 |
+
* \note \b Thread-safety: this function is thread safe, but client
|
| 1204 |
+
* must guard against another thread simultaneously destroying \p
|
| 1205 |
+
* context.
|
| 1206 |
+
*
|
| 1207 |
+
* \param context The context for event collection
|
| 1208 |
+
* \param eventIdArraySizeBytes Size of \p eventIdArray in bytes
|
| 1209 |
+
* \param eventIdArray Array of event IDs that need to be grouped
|
| 1210 |
+
* \param eventGroupPasses Returns a CUpti_EventGroupSets object that
|
| 1211 |
+
* indicates the number of passes required to collect the events and
|
| 1212 |
+
* the events to collect on each pass
|
| 1213 |
+
*
|
| 1214 |
+
* \retval CUPTI_SUCCESS
|
| 1215 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 1216 |
+
* \retval CUPTI_ERROR_INVALID_CONTEXT
|
| 1217 |
+
* \retval CUPTI_ERROR_INVALID_EVENT_ID
|
| 1218 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p eventIdArray or
|
| 1219 |
+
* \p eventGroupPasses is NULL
|
| 1220 |
+
*/
|
| 1221 |
+
CUptiResult CUPTIAPI cuptiEventGroupSetsCreate(CUcontext context,
|
| 1222 |
+
size_t eventIdArraySizeBytes,
|
| 1223 |
+
CUpti_EventID *eventIdArray,
|
| 1224 |
+
CUpti_EventGroupSets **eventGroupPasses);
|
| 1225 |
+
|
| 1226 |
+
/**
|
| 1227 |
+
* \brief Destroy a event group sets object.
|
| 1228 |
+
*
|
| 1229 |
+
* Destroy a CUpti_EventGroupSets object.
|
| 1230 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 1231 |
+
*
|
| 1232 |
+
* \param eventGroupSets The object to destroy
|
| 1233 |
+
*
|
| 1234 |
+
* \retval CUPTI_SUCCESS
|
| 1235 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 1236 |
+
* \retval CUPTI_ERROR_INVALID_OPERATION if any of the event groups
|
| 1237 |
+
* contained in the sets is enabled
|
| 1238 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p eventGroupSets is NULL
|
| 1239 |
+
*/
|
| 1240 |
+
CUptiResult CUPTIAPI cuptiEventGroupSetsDestroy(CUpti_EventGroupSets *eventGroupSets);
|
| 1241 |
+
|
| 1242 |
+
|
| 1243 |
+
/**
|
| 1244 |
+
* \brief Enable an event group set.
|
| 1245 |
+
*
|
| 1246 |
+
* Enable a set of event groups. Enabling a set of event groups zeros the value of
|
| 1247 |
+
* all the events in all the groups and then starts collection of those events.
|
| 1248 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 1249 |
+
*
|
| 1250 |
+
* \param eventGroupSet The pointer to the event group set
|
| 1251 |
+
*
|
| 1252 |
+
* \retval CUPTI_SUCCESS
|
| 1253 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 1254 |
+
* \retval CUPTI_ERROR_HARDWARE
|
| 1255 |
+
* \retval CUPTI_ERROR_NOT_READY if \p eventGroup does not contain any events
|
| 1256 |
+
* \retval CUPTI_ERROR_NOT_COMPATIBLE if \p eventGroup cannot be
|
| 1257 |
+
* enabled due to other already enabled event groups
|
| 1258 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p eventGroupSet is NULL
|
| 1259 |
+
* \retval CUPTI_ERROR_HARDWARE_BUSY if other client is profiling and hardware is
|
| 1260 |
+
* busy
|
| 1261 |
+
*/
|
| 1262 |
+
CUptiResult CUPTIAPI cuptiEventGroupSetEnable(CUpti_EventGroupSet *eventGroupSet);
|
| 1263 |
+
|
| 1264 |
+
/**
|
| 1265 |
+
* \brief Disable an event group set.
|
| 1266 |
+
*
|
| 1267 |
+
* Disable a set of event groups. Disabling a set of event groups
|
| 1268 |
+
* stops collection of events contained in the groups.
|
| 1269 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 1270 |
+
* \note \b If this call fails, some of the event groups in the set may be disabled
|
| 1271 |
+
* and other event groups may remain enabled.
|
| 1272 |
+
*
|
| 1273 |
+
* \param eventGroupSet The pointer to the event group set
|
| 1274 |
+
* \retval CUPTI_SUCCESS
|
| 1275 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 1276 |
+
* \retval CUPTI_ERROR_HARDWARE
|
| 1277 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p eventGroupSet is NULL
|
| 1278 |
+
*/
|
| 1279 |
+
CUptiResult CUPTIAPI cuptiEventGroupSetDisable(CUpti_EventGroupSet *eventGroupSet);
|
| 1280 |
+
|
| 1281 |
+
/**
|
| 1282 |
+
* \brief Enable kernel replay mode.
|
| 1283 |
+
*
|
| 1284 |
+
* Set profiling mode for the context to replay mode. In this mode,
|
| 1285 |
+
* any number of events can be collected in one run of the kernel. The
|
| 1286 |
+
* event collection mode will automatically switch to
|
| 1287 |
+
* CUPTI_EVENT_COLLECTION_MODE_KERNEL. In this mode, \ref
|
| 1288 |
+
* cuptiSetEventCollectionMode will return
|
| 1289 |
+
* CUPTI_ERROR_INVALID_OPERATION.
|
| 1290 |
+
* \note \b Kernels might take longer to run if many events are enabled.
|
| 1291 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 1292 |
+
*
|
| 1293 |
+
* \param context The context
|
| 1294 |
+
* \retval CUPTI_SUCCESS
|
| 1295 |
+
*/
|
| 1296 |
+
CUptiResult CUPTIAPI cuptiEnableKernelReplayMode(CUcontext context);
|
| 1297 |
+
|
| 1298 |
+
/**
|
| 1299 |
+
* \brief Disable kernel replay mode.
|
| 1300 |
+
*
|
| 1301 |
+
* Set profiling mode for the context to non-replay (default)
|
| 1302 |
+
* mode. Event collection mode will be set to
|
| 1303 |
+
* CUPTI_EVENT_COLLECTION_MODE_KERNEL. All previously enabled
|
| 1304 |
+
* event groups and event group sets will be disabled.
|
| 1305 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 1306 |
+
*
|
| 1307 |
+
* \param context The context
|
| 1308 |
+
* \retval CUPTI_SUCCESS
|
| 1309 |
+
*/
|
| 1310 |
+
CUptiResult CUPTIAPI cuptiDisableKernelReplayMode(CUcontext context);
|
| 1311 |
+
|
| 1312 |
+
/**
|
| 1313 |
+
* \brief Function type for getting updates on kernel replay.
|
| 1314 |
+
*
|
| 1315 |
+
* \param kernelName The mangled kernel name
|
| 1316 |
+
* \param numReplaysDone Number of replays done so far
|
| 1317 |
+
* \param customData Pointer of any custom data passed in when subscribing
|
| 1318 |
+
*/
|
| 1319 |
+
typedef void (CUPTIAPI *CUpti_KernelReplayUpdateFunc)(
|
| 1320 |
+
const char *kernelName,
|
| 1321 |
+
int numReplaysDone,
|
| 1322 |
+
void *customData);
|
| 1323 |
+
|
| 1324 |
+
/**
|
| 1325 |
+
* \brief Subscribe to kernel replay updates.
|
| 1326 |
+
*
|
| 1327 |
+
* When subscribed, the function pointer passed in will be called each time a
|
| 1328 |
+
* kernel run is finished during kernel replay. Previously subscribed function
|
| 1329 |
+
* pointer will be replaced. Pass in NULL as the function pointer unsubscribes
|
| 1330 |
+
* the update.
|
| 1331 |
+
*
|
| 1332 |
+
* \param updateFunc The update function pointer
|
| 1333 |
+
* \param customData Pointer to any custom data
|
| 1334 |
+
* \retval CUPTI_SUCCESS
|
| 1335 |
+
*/
|
| 1336 |
+
CUptiResult CUPTIAPI cuptiKernelReplaySubscribeUpdate(CUpti_KernelReplayUpdateFunc updateFunc, void *customData);
|
| 1337 |
+
|
| 1338 |
+
/** @} */ /* END CUPTI_EVENT_API */
|
| 1339 |
+
|
| 1340 |
+
#if defined(__GNUC__) && defined(CUPTI_LIB)
|
| 1341 |
+
#pragma GCC visibility pop
|
| 1342 |
+
#endif
|
| 1343 |
+
|
| 1344 |
+
#if defined(__cplusplus)
|
| 1345 |
+
}
|
| 1346 |
+
#endif
|
| 1347 |
+
|
| 1348 |
+
#endif /*_CUPTI_EVENTS_H_*/
|
| 1349 |
+
|
| 1350 |
+
|
lib/python3.12/site-packages/nvidia/cuda_cupti/include/cupti_metrics.h
ADDED
|
@@ -0,0 +1,825 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
* Copyright 2011-2020 NVIDIA Corporation. All rights reserved.
|
| 3 |
+
*
|
| 4 |
+
* NOTICE TO LICENSEE:
|
| 5 |
+
*
|
| 6 |
+
* This source code and/or documentation ("Licensed Deliverables") are
|
| 7 |
+
* subject to NVIDIA intellectual property rights under U.S. and
|
| 8 |
+
* international Copyright laws.
|
| 9 |
+
*
|
| 10 |
+
* These Licensed Deliverables contained herein is PROPRIETARY and
|
| 11 |
+
* CONFIDENTIAL to NVIDIA and is being provided under the terms and
|
| 12 |
+
* conditions of a form of NVIDIA software license agreement by and
|
| 13 |
+
* between NVIDIA and Licensee ("License Agreement") or electronically
|
| 14 |
+
* accepted by Licensee. Notwithstanding any terms or conditions to
|
| 15 |
+
* the contrary in the License Agreement, reproduction or disclosure
|
| 16 |
+
* of the Licensed Deliverables to any third party without the express
|
| 17 |
+
* written consent of NVIDIA is prohibited.
|
| 18 |
+
*
|
| 19 |
+
* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
|
| 20 |
+
* LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
|
| 21 |
+
* SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. IT IS
|
| 22 |
+
* PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
|
| 23 |
+
* NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
|
| 24 |
+
* DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
|
| 25 |
+
* NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
|
| 26 |
+
* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
|
| 27 |
+
* LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
|
| 28 |
+
* SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
|
| 29 |
+
* DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
| 30 |
+
* WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
| 31 |
+
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
| 32 |
+
* OF THESE LICENSED DELIVERABLES.
|
| 33 |
+
*
|
| 34 |
+
* U.S. Government End Users. These Licensed Deliverables are a
|
| 35 |
+
* "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
|
| 36 |
+
* 1995), consisting of "commercial computer software" and "commercial
|
| 37 |
+
* computer software documentation" as such terms are used in 48
|
| 38 |
+
* C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
|
| 39 |
+
* only as a commercial end item. Consistent with 48 C.F.R.12.212 and
|
| 40 |
+
* 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
|
| 41 |
+
* U.S. Government End Users acquire the Licensed Deliverables with
|
| 42 |
+
* only those rights set forth herein.
|
| 43 |
+
*
|
| 44 |
+
* Any use of the Licensed Deliverables in individual and commercial
|
| 45 |
+
* software must include, in the user documentation and internal
|
| 46 |
+
* comments to the code, the above Disclaimer and U.S. Government End
|
| 47 |
+
* Users Notice.
|
| 48 |
+
*/
|
| 49 |
+
|
| 50 |
+
#if !defined(_CUPTI_METRIC_H_)
|
| 51 |
+
#define _CUPTI_METRIC_H_
|
| 52 |
+
|
| 53 |
+
#include <cuda.h>
|
| 54 |
+
#include <string.h>
|
| 55 |
+
#include <cuda_stdint.h>
|
| 56 |
+
#include <cupti_result.h>
|
| 57 |
+
|
| 58 |
+
#ifndef CUPTIAPI
|
| 59 |
+
#ifdef _WIN32
|
| 60 |
+
#define CUPTIAPI __stdcall
|
| 61 |
+
#else
|
| 62 |
+
#define CUPTIAPI
|
| 63 |
+
#endif
|
| 64 |
+
#endif
|
| 65 |
+
|
| 66 |
+
#if defined(__cplusplus)
|
| 67 |
+
extern "C" {
|
| 68 |
+
#endif
|
| 69 |
+
|
| 70 |
+
#if defined(__GNUC__) && defined(CUPTI_LIB)
|
| 71 |
+
#pragma GCC visibility push(default)
|
| 72 |
+
#endif
|
| 73 |
+
|
| 74 |
+
/**
|
| 75 |
+
* \defgroup CUPTI_METRIC_API CUPTI Metric API
|
| 76 |
+
* Functions, types, and enums that implement the CUPTI Metric API.
|
| 77 |
+
*
|
| 78 |
+
* \note CUPTI metric API from the header cupti_metrics.h are not supported on devices
|
| 79 |
+
* with compute capability 7.5 and higher (i.e. Turing and later GPU architectures).
|
| 80 |
+
* These API will be deprecated in a future CUDA release. These are replaced by
|
| 81 |
+
* Profiling API in the header cupti_profiler_target.h and Perfworks metrics API
|
| 82 |
+
* in the headers nvperf_host.h and nvperf_target.h which are supported on
|
| 83 |
+
* devices with compute capability 7.0 and higher (i.e. Volta and later GPU
|
| 84 |
+
* architectures).
|
| 85 |
+
*
|
| 86 |
+
* @{
|
| 87 |
+
*/
|
| 88 |
+
|
| 89 |
+
/**
|
| 90 |
+
* \brief ID for a metric.
|
| 91 |
+
*
|
| 92 |
+
* A metric provides a measure of some aspect of the device.
|
| 93 |
+
*/
|
| 94 |
+
typedef uint32_t CUpti_MetricID;
|
| 95 |
+
|
| 96 |
+
/**
|
| 97 |
+
* \brief A metric category.
|
| 98 |
+
*
|
| 99 |
+
* Each metric is assigned to a category that represents the general
|
| 100 |
+
* type of the metric. A metric's category is accessed using \ref
|
| 101 |
+
* cuptiMetricGetAttribute and the CUPTI_METRIC_ATTR_CATEGORY
|
| 102 |
+
* attribute.
|
| 103 |
+
*/
|
| 104 |
+
typedef enum {
|
| 105 |
+
/**
|
| 106 |
+
* A memory related metric.
|
| 107 |
+
*/
|
| 108 |
+
CUPTI_METRIC_CATEGORY_MEMORY = 0,
|
| 109 |
+
/**
|
| 110 |
+
* An instruction related metric.
|
| 111 |
+
*/
|
| 112 |
+
CUPTI_METRIC_CATEGORY_INSTRUCTION = 1,
|
| 113 |
+
/**
|
| 114 |
+
* A multiprocessor related metric.
|
| 115 |
+
*/
|
| 116 |
+
CUPTI_METRIC_CATEGORY_MULTIPROCESSOR = 2,
|
| 117 |
+
/**
|
| 118 |
+
* A cache related metric.
|
| 119 |
+
*/
|
| 120 |
+
CUPTI_METRIC_CATEGORY_CACHE = 3,
|
| 121 |
+
/**
|
| 122 |
+
* A texture related metric.
|
| 123 |
+
*/
|
| 124 |
+
CUPTI_METRIC_CATEGORY_TEXTURE = 4,
|
| 125 |
+
/**
|
| 126 |
+
*A Nvlink related metric.
|
| 127 |
+
*/
|
| 128 |
+
CUPTI_METRIC_CATEGORY_NVLINK = 5,
|
| 129 |
+
/**
|
| 130 |
+
*A PCIe related metric.
|
| 131 |
+
*/
|
| 132 |
+
CUPTI_METRIC_CATEGORY_PCIE = 6,
|
| 133 |
+
CUPTI_METRIC_CATEGORY_FORCE_INT = 0x7fffffff,
|
| 134 |
+
} CUpti_MetricCategory;
|
| 135 |
+
|
| 136 |
+
/**
|
| 137 |
+
* \brief A metric evaluation mode.
|
| 138 |
+
*
|
| 139 |
+
* A metric can be evaluated per hardware instance to know the load balancing
|
| 140 |
+
* across instances of a domain or the metric can be evaluated in aggregate mode
|
| 141 |
+
* when the events involved in metric evaluation are from different event
|
| 142 |
+
* domains. It might be possible to evaluate some metrics in both
|
| 143 |
+
* modes for convenience. A metric's evaluation mode is accessed using \ref
|
| 144 |
+
* CUpti_MetricEvaluationMode and the CUPTI_METRIC_ATTR_EVALUATION_MODE
|
| 145 |
+
* attribute.
|
| 146 |
+
*/
|
| 147 |
+
typedef enum {
|
| 148 |
+
/**
|
| 149 |
+
* If this bit is set, the metric can be profiled for each instance of the
|
| 150 |
+
* domain. The event values passed to \ref cuptiMetricGetValue can contain
|
| 151 |
+
* values for one instance of the domain. And \ref cuptiMetricGetValue can
|
| 152 |
+
* be called for each instance.
|
| 153 |
+
*/
|
| 154 |
+
CUPTI_METRIC_EVALUATION_MODE_PER_INSTANCE = 1,
|
| 155 |
+
/**
|
| 156 |
+
* If this bit is set, the metric can be profiled over all instances. The
|
| 157 |
+
* event values passed to \ref cuptiMetricGetValue can be aggregated values
|
| 158 |
+
* of events for all instances of the domain.
|
| 159 |
+
*/
|
| 160 |
+
CUPTI_METRIC_EVALUATION_MODE_AGGREGATE = 1 << 1,
|
| 161 |
+
CUPTI_METRIC_EVALUATION_MODE_FORCE_INT = 0x7fffffff,
|
| 162 |
+
} CUpti_MetricEvaluationMode;
|
| 163 |
+
|
| 164 |
+
/**
|
| 165 |
+
* \brief Kinds of metric values.
|
| 166 |
+
*
|
| 167 |
+
* Metric values can be one of several different kinds. Corresponding
|
| 168 |
+
* to each kind is a member of the CUpti_MetricValue union. The metric
|
| 169 |
+
* value returned by \ref cuptiMetricGetValue should be accessed using
|
| 170 |
+
* the appropriate member of that union based on its value kind.
|
| 171 |
+
*/
|
| 172 |
+
typedef enum {
|
| 173 |
+
/**
|
| 174 |
+
* The metric value is a 64-bit double.
|
| 175 |
+
*/
|
| 176 |
+
CUPTI_METRIC_VALUE_KIND_DOUBLE = 0,
|
| 177 |
+
/**
|
| 178 |
+
* The metric value is a 64-bit unsigned integer.
|
| 179 |
+
*/
|
| 180 |
+
CUPTI_METRIC_VALUE_KIND_UINT64 = 1,
|
| 181 |
+
/**
|
| 182 |
+
* The metric value is a percentage represented by a 64-bit
|
| 183 |
+
* double. For example, 57.5% is represented by the value 57.5.
|
| 184 |
+
*/
|
| 185 |
+
CUPTI_METRIC_VALUE_KIND_PERCENT = 2,
|
| 186 |
+
/**
|
| 187 |
+
* The metric value is a throughput represented by a 64-bit
|
| 188 |
+
* integer. The unit for throughput values is bytes/second.
|
| 189 |
+
*/
|
| 190 |
+
CUPTI_METRIC_VALUE_KIND_THROUGHPUT = 3,
|
| 191 |
+
/**
|
| 192 |
+
* The metric value is a 64-bit signed integer.
|
| 193 |
+
*/
|
| 194 |
+
CUPTI_METRIC_VALUE_KIND_INT64 = 4,
|
| 195 |
+
/**
|
| 196 |
+
* The metric value is a utilization level, as represented by
|
| 197 |
+
* CUpti_MetricValueUtilizationLevel.
|
| 198 |
+
*/
|
| 199 |
+
CUPTI_METRIC_VALUE_KIND_UTILIZATION_LEVEL = 5,
|
| 200 |
+
|
| 201 |
+
CUPTI_METRIC_VALUE_KIND_FORCE_INT = 0x7fffffff
|
| 202 |
+
} CUpti_MetricValueKind;
|
| 203 |
+
|
| 204 |
+
/**
|
| 205 |
+
* \brief Enumeration of utilization levels for metrics values of kind
|
| 206 |
+
* CUPTI_METRIC_VALUE_KIND_UTILIZATION_LEVEL. Utilization values can
|
| 207 |
+
* vary from IDLE (0) to MAX (10) but the enumeration only provides
|
| 208 |
+
* specific names for a few values.
|
| 209 |
+
*/
|
| 210 |
+
typedef enum {
|
| 211 |
+
CUPTI_METRIC_VALUE_UTILIZATION_IDLE = 0,
|
| 212 |
+
CUPTI_METRIC_VALUE_UTILIZATION_LOW = 2,
|
| 213 |
+
CUPTI_METRIC_VALUE_UTILIZATION_MID = 5,
|
| 214 |
+
CUPTI_METRIC_VALUE_UTILIZATION_HIGH = 8,
|
| 215 |
+
CUPTI_METRIC_VALUE_UTILIZATION_MAX = 10,
|
| 216 |
+
CUPTI_METRIC_VALUE_UTILIZATION_FORCE_INT = 0x7fffffff
|
| 217 |
+
} CUpti_MetricValueUtilizationLevel;
|
| 218 |
+
|
| 219 |
+
/**
|
| 220 |
+
* \brief Metric attributes.
|
| 221 |
+
*
|
| 222 |
+
* Metric attributes describe properties of a metric. These attributes
|
| 223 |
+
* can be read using \ref cuptiMetricGetAttribute.
|
| 224 |
+
*/
|
| 225 |
+
typedef enum {
|
| 226 |
+
/**
|
| 227 |
+
* Metric name. Value is a null terminated const c-string.
|
| 228 |
+
*/
|
| 229 |
+
CUPTI_METRIC_ATTR_NAME = 0,
|
| 230 |
+
/**
|
| 231 |
+
* Short description of metric. Value is a null terminated const c-string.
|
| 232 |
+
*/
|
| 233 |
+
CUPTI_METRIC_ATTR_SHORT_DESCRIPTION = 1,
|
| 234 |
+
/**
|
| 235 |
+
* Long description of metric. Value is a null terminated const c-string.
|
| 236 |
+
*/
|
| 237 |
+
CUPTI_METRIC_ATTR_LONG_DESCRIPTION = 2,
|
| 238 |
+
/**
|
| 239 |
+
* Category of the metric. Value is of type CUpti_MetricCategory.
|
| 240 |
+
*/
|
| 241 |
+
CUPTI_METRIC_ATTR_CATEGORY = 3,
|
| 242 |
+
/**
|
| 243 |
+
* Value type of the metric. Value is of type CUpti_MetricValueKind.
|
| 244 |
+
*/
|
| 245 |
+
CUPTI_METRIC_ATTR_VALUE_KIND = 4,
|
| 246 |
+
/**
|
| 247 |
+
* Metric evaluation mode. Value is of type CUpti_MetricEvaluationMode.
|
| 248 |
+
*/
|
| 249 |
+
CUPTI_METRIC_ATTR_EVALUATION_MODE = 5,
|
| 250 |
+
CUPTI_METRIC_ATTR_FORCE_INT = 0x7fffffff,
|
| 251 |
+
} CUpti_MetricAttribute;
|
| 252 |
+
|
| 253 |
+
/**
|
| 254 |
+
* \brief A metric value.
|
| 255 |
+
*
|
| 256 |
+
* Metric values can be one of several different kinds. Corresponding
|
| 257 |
+
* to each kind is a member of the CUpti_MetricValue union. The metric
|
| 258 |
+
* value returned by \ref cuptiMetricGetValue should be accessed using
|
| 259 |
+
* the appropriate member of that union based on its value kind.
|
| 260 |
+
*/
|
| 261 |
+
typedef union {
|
| 262 |
+
/*
|
| 263 |
+
* Value for CUPTI_METRIC_VALUE_KIND_DOUBLE.
|
| 264 |
+
*/
|
| 265 |
+
double metricValueDouble;
|
| 266 |
+
/*
|
| 267 |
+
* Value for CUPTI_METRIC_VALUE_KIND_UINT64.
|
| 268 |
+
*/
|
| 269 |
+
uint64_t metricValueUint64;
|
| 270 |
+
/*
|
| 271 |
+
* Value for CUPTI_METRIC_VALUE_KIND_INT64.
|
| 272 |
+
*/
|
| 273 |
+
int64_t metricValueInt64;
|
| 274 |
+
/*
|
| 275 |
+
* Value for CUPTI_METRIC_VALUE_KIND_PERCENT. For example, 57.5% is
|
| 276 |
+
* represented by the value 57.5.
|
| 277 |
+
*/
|
| 278 |
+
double metricValuePercent;
|
| 279 |
+
/*
|
| 280 |
+
* Value for CUPTI_METRIC_VALUE_KIND_THROUGHPUT. The unit for
|
| 281 |
+
* throughput values is bytes/second.
|
| 282 |
+
*/
|
| 283 |
+
uint64_t metricValueThroughput;
|
| 284 |
+
/*
|
| 285 |
+
* Value for CUPTI_METRIC_VALUE_KIND_UTILIZATION_LEVEL.
|
| 286 |
+
*/
|
| 287 |
+
CUpti_MetricValueUtilizationLevel metricValueUtilizationLevel;
|
| 288 |
+
} CUpti_MetricValue;
|
| 289 |
+
|
| 290 |
+
/**
|
| 291 |
+
* \brief Device class.
|
| 292 |
+
*
|
| 293 |
+
* Enumeration of device classes for metric property
|
| 294 |
+
* CUPTI_METRIC_PROPERTY_DEVICE_CLASS.
|
| 295 |
+
*/
|
| 296 |
+
typedef enum {
|
| 297 |
+
CUPTI_METRIC_PROPERTY_DEVICE_CLASS_TESLA = 0,
|
| 298 |
+
CUPTI_METRIC_PROPERTY_DEVICE_CLASS_QUADRO = 1,
|
| 299 |
+
CUPTI_METRIC_PROPERTY_DEVICE_CLASS_GEFORCE = 2,
|
| 300 |
+
CUPTI_METRIC_PROPERTY_DEVICE_CLASS_TEGRA = 3,
|
| 301 |
+
} CUpti_MetricPropertyDeviceClass;
|
| 302 |
+
|
| 303 |
+
/**
|
| 304 |
+
* \brief Metric device properties.
|
| 305 |
+
*
|
| 306 |
+
* Metric device properties describe device properties which are needed for a metric.
|
| 307 |
+
* Some of these properties can be collected using cuDeviceGetAttribute.
|
| 308 |
+
*/
|
| 309 |
+
typedef enum {
|
| 310 |
+
/*
|
| 311 |
+
* Number of multiprocessors on a device. This can be collected
|
| 312 |
+
* using value of \param CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT of
|
| 313 |
+
* cuDeviceGetAttribute.
|
| 314 |
+
*/
|
| 315 |
+
CUPTI_METRIC_PROPERTY_MULTIPROCESSOR_COUNT,
|
| 316 |
+
/*
|
| 317 |
+
* Maximum number of warps on a multiprocessor. This can be
|
| 318 |
+
* collected using ratio of value of \param
|
| 319 |
+
* CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR and \param
|
| 320 |
+
* CU_DEVICE_ATTRIBUTE_WARP_SIZE of cuDeviceGetAttribute.
|
| 321 |
+
*/
|
| 322 |
+
CUPTI_METRIC_PROPERTY_WARPS_PER_MULTIPROCESSOR,
|
| 323 |
+
/*
|
| 324 |
+
* GPU Time for kernel in ns. This should be profiled using CUPTI
|
| 325 |
+
* Activity API.
|
| 326 |
+
*/
|
| 327 |
+
CUPTI_METRIC_PROPERTY_KERNEL_GPU_TIME,
|
| 328 |
+
/*
|
| 329 |
+
* Clock rate for device in KHz. This should be collected using
|
| 330 |
+
* value of \param CU_DEVICE_ATTRIBUTE_CLOCK_RATE of
|
| 331 |
+
* cuDeviceGetAttribute.
|
| 332 |
+
*/
|
| 333 |
+
CUPTI_METRIC_PROPERTY_CLOCK_RATE,
|
| 334 |
+
/*
|
| 335 |
+
* Number of Frame buffer units for device. This should be collected
|
| 336 |
+
* using value of \param CUPTI_DEVICE_ATTRIBUTE_MAX_FRAME_BUFFERS of
|
| 337 |
+
* cuptiDeviceGetAttribute.
|
| 338 |
+
*/
|
| 339 |
+
CUPTI_METRIC_PROPERTY_FRAME_BUFFER_COUNT,
|
| 340 |
+
/*
|
| 341 |
+
* Global memory bandwidth in KBytes/sec. This should be collected
|
| 342 |
+
* using value of \param CUPTI_DEVICE_ATTR_GLOBAL_MEMORY_BANDWIDTH
|
| 343 |
+
* of cuptiDeviceGetAttribute.
|
| 344 |
+
*/
|
| 345 |
+
CUPTI_METRIC_PROPERTY_GLOBAL_MEMORY_BANDWIDTH,
|
| 346 |
+
/*
|
| 347 |
+
* PCIE link rate in Mega bits/sec. This should be collected using
|
| 348 |
+
* value of \param CUPTI_DEVICE_ATTR_PCIE_LINK_RATE of
|
| 349 |
+
* cuptiDeviceGetAttribute.
|
| 350 |
+
*/
|
| 351 |
+
CUPTI_METRIC_PROPERTY_PCIE_LINK_RATE,
|
| 352 |
+
/*
|
| 353 |
+
* PCIE link width for device. This should be collected using
|
| 354 |
+
* value of \param CUPTI_DEVICE_ATTR_PCIE_LINK_WIDTH of
|
| 355 |
+
* cuptiDeviceGetAttribute.
|
| 356 |
+
*/
|
| 357 |
+
CUPTI_METRIC_PROPERTY_PCIE_LINK_WIDTH,
|
| 358 |
+
/*
|
| 359 |
+
* PCIE generation for device. This should be collected using
|
| 360 |
+
* value of \param CUPTI_DEVICE_ATTR_PCIE_GEN of
|
| 361 |
+
* cuptiDeviceGetAttribute.
|
| 362 |
+
*/
|
| 363 |
+
CUPTI_METRIC_PROPERTY_PCIE_GEN,
|
| 364 |
+
/*
|
| 365 |
+
* The device class. This should be collected using
|
| 366 |
+
* value of \param CUPTI_DEVICE_ATTR_DEVICE_CLASS of
|
| 367 |
+
* cuptiDeviceGetAttribute.
|
| 368 |
+
*/
|
| 369 |
+
CUPTI_METRIC_PROPERTY_DEVICE_CLASS,
|
| 370 |
+
/*
|
| 371 |
+
* Peak single precision floating point operations that
|
| 372 |
+
* can be performed in one cycle by the device.
|
| 373 |
+
* This should be collected using value of
|
| 374 |
+
* \param CUPTI_DEVICE_ATTR_FLOP_SP_PER_CYCLE of
|
| 375 |
+
* cuptiDeviceGetAttribute.
|
| 376 |
+
*/
|
| 377 |
+
CUPTI_METRIC_PROPERTY_FLOP_SP_PER_CYCLE,
|
| 378 |
+
/*
|
| 379 |
+
* Peak double precision floating point operations that
|
| 380 |
+
* can be performed in one cycle by the device.
|
| 381 |
+
* This should be collected using value of
|
| 382 |
+
* \param CUPTI_DEVICE_ATTR_FLOP_DP_PER_CYCLE of
|
| 383 |
+
* cuptiDeviceGetAttribute.
|
| 384 |
+
*/
|
| 385 |
+
CUPTI_METRIC_PROPERTY_FLOP_DP_PER_CYCLE,
|
| 386 |
+
/*
|
| 387 |
+
* Number of L2 units on a device. This can be collected
|
| 388 |
+
* using value of \param CUPTI_DEVICE_ATTR_MAX_L2_UNITS of
|
| 389 |
+
* cuDeviceGetAttribute.
|
| 390 |
+
*/
|
| 391 |
+
CUPTI_METRIC_PROPERTY_L2_UNITS,
|
| 392 |
+
/*
|
| 393 |
+
* Whether ECC support is enabled on the device. This can be
|
| 394 |
+
* collected using value of \param CU_DEVICE_ATTRIBUTE_ECC_ENABLED of
|
| 395 |
+
* cuDeviceGetAttribute.
|
| 396 |
+
*/
|
| 397 |
+
CUPTI_METRIC_PROPERTY_ECC_ENABLED,
|
| 398 |
+
/*
|
| 399 |
+
* Peak half precision floating point operations that
|
| 400 |
+
* can be performed in one cycle by the device.
|
| 401 |
+
* This should be collected using value of
|
| 402 |
+
* \param CUPTI_DEVICE_ATTR_FLOP_HP_PER_CYCLE of
|
| 403 |
+
* cuptiDeviceGetAttribute.
|
| 404 |
+
*/
|
| 405 |
+
CUPTI_METRIC_PROPERTY_FLOP_HP_PER_CYCLE,
|
| 406 |
+
/*
|
| 407 |
+
* NVLINK Bandwitdh for device. This should be collected
|
| 408 |
+
* using value of \param CUPTI_DEVICE_ATTR_GPU_CPU_NVLINK_BW of
|
| 409 |
+
* cuptiDeviceGetAttribute.
|
| 410 |
+
*/
|
| 411 |
+
CUPTI_METRIC_PROPERTY_GPU_CPU_NVLINK_BANDWIDTH,
|
| 412 |
+
} CUpti_MetricPropertyID;
|
| 413 |
+
|
| 414 |
+
/**
|
| 415 |
+
* \brief Get the total number of metrics available on any device.
|
| 416 |
+
*
|
| 417 |
+
* Returns the total number of metrics available on any CUDA-capable
|
| 418 |
+
* devices.
|
| 419 |
+
*
|
| 420 |
+
* \param numMetrics Returns the number of metrics
|
| 421 |
+
*
|
| 422 |
+
* \retval CUPTI_SUCCESS
|
| 423 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p numMetrics is NULL
|
| 424 |
+
*/
|
| 425 |
+
CUptiResult CUPTIAPI cuptiGetNumMetrics(uint32_t *numMetrics);
|
| 426 |
+
|
| 427 |
+
/**
|
| 428 |
+
* \brief Get all the metrics available on any device.
|
| 429 |
+
*
|
| 430 |
+
* Returns the metric IDs in \p metricArray for all CUDA-capable
|
| 431 |
+
* devices. The size of the \p metricArray buffer is given by \p
|
| 432 |
+
* *arraySizeBytes. The size of the \p metricArray buffer must be at
|
| 433 |
+
* least \p numMetrics * sizeof(CUpti_MetricID) or all metric IDs will
|
| 434 |
+
* not be returned. The value returned in \p *arraySizeBytes contains
|
| 435 |
+
* the number of bytes returned in \p metricArray.
|
| 436 |
+
*
|
| 437 |
+
* \param arraySizeBytes The size of \p metricArray in bytes, and
|
| 438 |
+
* returns the number of bytes written to \p metricArray
|
| 439 |
+
* \param metricArray Returns the IDs of the metrics
|
| 440 |
+
*
|
| 441 |
+
* \retval CUPTI_SUCCESS
|
| 442 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p arraySizeBytes or
|
| 443 |
+
* \p metricArray are NULL
|
| 444 |
+
*/
|
| 445 |
+
CUptiResult CUPTIAPI cuptiEnumMetrics(size_t *arraySizeBytes,
|
| 446 |
+
CUpti_MetricID *metricArray);
|
| 447 |
+
|
| 448 |
+
/**
|
| 449 |
+
* \brief Get the number of metrics for a device.
|
| 450 |
+
*
|
| 451 |
+
* Returns the number of metrics available for a device.
|
| 452 |
+
*
|
| 453 |
+
* \param device The CUDA device
|
| 454 |
+
* \param numMetrics Returns the number of metrics available for the
|
| 455 |
+
* device
|
| 456 |
+
*
|
| 457 |
+
* \retval CUPTI_SUCCESS
|
| 458 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 459 |
+
* \retval CUPTI_ERROR_INVALID_DEVICE
|
| 460 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p numMetrics is NULL
|
| 461 |
+
*/
|
| 462 |
+
CUptiResult CUPTIAPI cuptiDeviceGetNumMetrics(CUdevice device,
|
| 463 |
+
uint32_t *numMetrics);
|
| 464 |
+
|
| 465 |
+
/**
|
| 466 |
+
* \brief Get the metrics for a device.
|
| 467 |
+
*
|
| 468 |
+
* Returns the metric IDs in \p metricArray for a device. The size of
|
| 469 |
+
* the \p metricArray buffer is given by \p *arraySizeBytes. The size
|
| 470 |
+
* of the \p metricArray buffer must be at least \p numMetrics *
|
| 471 |
+
* sizeof(CUpti_MetricID) or else all metric IDs will not be
|
| 472 |
+
* returned. The value returned in \p *arraySizeBytes contains the
|
| 473 |
+
* number of bytes returned in \p metricArray.
|
| 474 |
+
*
|
| 475 |
+
* \param device The CUDA device
|
| 476 |
+
* \param arraySizeBytes The size of \p metricArray in bytes, and
|
| 477 |
+
* returns the number of bytes written to \p metricArray
|
| 478 |
+
* \param metricArray Returns the IDs of the metrics for the device
|
| 479 |
+
*
|
| 480 |
+
* \retval CUPTI_SUCCESS
|
| 481 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 482 |
+
* \retval CUPTI_ERROR_INVALID_DEVICE
|
| 483 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p arraySizeBytes or
|
| 484 |
+
* \p metricArray are NULL
|
| 485 |
+
*/
|
| 486 |
+
CUptiResult CUPTIAPI cuptiDeviceEnumMetrics(CUdevice device,
|
| 487 |
+
size_t *arraySizeBytes,
|
| 488 |
+
CUpti_MetricID *metricArray);
|
| 489 |
+
|
| 490 |
+
/**
|
| 491 |
+
* \brief Get a metric attribute.
|
| 492 |
+
*
|
| 493 |
+
* Returns a metric attribute in \p *value. The size of the \p
|
| 494 |
+
* value buffer is given by \p *valueSize. The value returned in \p
|
| 495 |
+
* *valueSize contains the number of bytes returned in \p value.
|
| 496 |
+
*
|
| 497 |
+
* If the attribute value is a c-string that is longer than \p
|
| 498 |
+
* *valueSize, then only the first \p *valueSize characters will be
|
| 499 |
+
* returned and there will be no terminating null byte.
|
| 500 |
+
*
|
| 501 |
+
* \param metric ID of the metric
|
| 502 |
+
* \param attrib The metric attribute to read
|
| 503 |
+
* \param valueSize The size of the \p value buffer in bytes, and
|
| 504 |
+
* returns the number of bytes written to \p value
|
| 505 |
+
* \param value Returns the attribute's value
|
| 506 |
+
*
|
| 507 |
+
* \retval CUPTI_SUCCESS
|
| 508 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 509 |
+
* \retval CUPTI_ERROR_INVALID_METRIC_ID
|
| 510 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p valueSize or \p value
|
| 511 |
+
* is NULL, or if \p attrib is not a metric attribute
|
| 512 |
+
* \retval CUPTI_ERROR_PARAMETER_SIZE_NOT_SUFFICIENT For non-c-string
|
| 513 |
+
* attribute values, indicates that the \p value buffer is too small
|
| 514 |
+
* to hold the attribute value.
|
| 515 |
+
*/
|
| 516 |
+
CUptiResult CUPTIAPI cuptiMetricGetAttribute(CUpti_MetricID metric,
|
| 517 |
+
CUpti_MetricAttribute attrib,
|
| 518 |
+
size_t *valueSize,
|
| 519 |
+
void *value);
|
| 520 |
+
|
| 521 |
+
/**
|
| 522 |
+
* \brief Find an metric by name.
|
| 523 |
+
*
|
| 524 |
+
* Find a metric by name and return the metric ID in \p *metric.
|
| 525 |
+
*
|
| 526 |
+
* \param device The CUDA device
|
| 527 |
+
* \param metricName The name of metric to find
|
| 528 |
+
* \param metric Returns the ID of the found metric or undefined if
|
| 529 |
+
* unable to find the metric
|
| 530 |
+
*
|
| 531 |
+
* \retval CUPTI_SUCCESS
|
| 532 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 533 |
+
* \retval CUPTI_ERROR_INVALID_DEVICE
|
| 534 |
+
* \retval CUPTI_ERROR_INVALID_METRIC_NAME if unable to find a metric
|
| 535 |
+
* with name \p metricName. In this case \p *metric is undefined
|
| 536 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p metricName or \p
|
| 537 |
+
* metric are NULL.
|
| 538 |
+
*/
|
| 539 |
+
CUptiResult CUPTIAPI cuptiMetricGetIdFromName(CUdevice device,
|
| 540 |
+
const char *metricName,
|
| 541 |
+
CUpti_MetricID *metric);
|
| 542 |
+
|
| 543 |
+
/**
|
| 544 |
+
* \brief Get number of events required to calculate a metric.
|
| 545 |
+
*
|
| 546 |
+
* Returns the number of events in \p numEvents that are required to
|
| 547 |
+
* calculate a metric.
|
| 548 |
+
*
|
| 549 |
+
* \param metric ID of the metric
|
| 550 |
+
* \param numEvents Returns the number of events required for the metric
|
| 551 |
+
*
|
| 552 |
+
* \retval CUPTI_SUCCESS
|
| 553 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 554 |
+
* \retval CUPTI_ERROR_INVALID_METRIC_ID
|
| 555 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p numEvents is NULL
|
| 556 |
+
*/
|
| 557 |
+
CUptiResult CUPTIAPI cuptiMetricGetNumEvents(CUpti_MetricID metric,
|
| 558 |
+
uint32_t *numEvents);
|
| 559 |
+
|
| 560 |
+
/**
|
| 561 |
+
* \brief Get the events required to calculating a metric.
|
| 562 |
+
*
|
| 563 |
+
* Gets the event IDs in \p eventIdArray required to calculate a \p
|
| 564 |
+
* metric. The size of the \p eventIdArray buffer is given by \p
|
| 565 |
+
* *eventIdArraySizeBytes and must be at least \p numEvents *
|
| 566 |
+
* sizeof(CUpti_EventID) or all events will not be returned. The value
|
| 567 |
+
* returned in \p *eventIdArraySizeBytes contains the number of bytes
|
| 568 |
+
* returned in \p eventIdArray.
|
| 569 |
+
*
|
| 570 |
+
* \param metric ID of the metric
|
| 571 |
+
* \param eventIdArraySizeBytes The size of \p eventIdArray in bytes,
|
| 572 |
+
* and returns the number of bytes written to \p eventIdArray
|
| 573 |
+
* \param eventIdArray Returns the IDs of the events required to
|
| 574 |
+
* calculate \p metric
|
| 575 |
+
*
|
| 576 |
+
* \retval CUPTI_SUCCESS
|
| 577 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 578 |
+
* \retval CUPTI_ERROR_INVALID_METRIC_ID
|
| 579 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p eventIdArraySizeBytes or \p
|
| 580 |
+
* eventIdArray are NULL.
|
| 581 |
+
*/
|
| 582 |
+
CUptiResult CUPTIAPI cuptiMetricEnumEvents(CUpti_MetricID metric,
|
| 583 |
+
size_t *eventIdArraySizeBytes,
|
| 584 |
+
CUpti_EventID *eventIdArray);
|
| 585 |
+
|
| 586 |
+
/**
|
| 587 |
+
* \brief Get number of properties required to calculate a metric.
|
| 588 |
+
*
|
| 589 |
+
* Returns the number of properties in \p numProp that are required to
|
| 590 |
+
* calculate a metric.
|
| 591 |
+
*
|
| 592 |
+
* \param metric ID of the metric
|
| 593 |
+
* \param numProp Returns the number of properties required for the
|
| 594 |
+
* metric
|
| 595 |
+
*
|
| 596 |
+
* \retval CUPTI_SUCCESS
|
| 597 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 598 |
+
* \retval CUPTI_ERROR_INVALID_METRIC_ID
|
| 599 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p numProp is NULL
|
| 600 |
+
*/
|
| 601 |
+
CUptiResult CUPTIAPI cuptiMetricGetNumProperties(CUpti_MetricID metric,
|
| 602 |
+
uint32_t *numProp);
|
| 603 |
+
|
| 604 |
+
/**
|
| 605 |
+
* \brief Get the properties required to calculating a metric.
|
| 606 |
+
*
|
| 607 |
+
* Gets the property IDs in \p propIdArray required to calculate a \p
|
| 608 |
+
* metric. The size of the \p propIdArray buffer is given by \p
|
| 609 |
+
* *propIdArraySizeBytes and must be at least \p numProp *
|
| 610 |
+
* sizeof(CUpti_DeviceAttribute) or all properties will not be
|
| 611 |
+
* returned. The value returned in \p *propIdArraySizeBytes contains
|
| 612 |
+
* the number of bytes returned in \p propIdArray.
|
| 613 |
+
*
|
| 614 |
+
* \param metric ID of the metric
|
| 615 |
+
* \param propIdArraySizeBytes The size of \p propIdArray in bytes,
|
| 616 |
+
* and returns the number of bytes written to \p propIdArray
|
| 617 |
+
* \param propIdArray Returns the IDs of the properties required to
|
| 618 |
+
* calculate \p metric
|
| 619 |
+
*
|
| 620 |
+
* \retval CUPTI_SUCCESS
|
| 621 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 622 |
+
* \retval CUPTI_ERROR_INVALID_METRIC_ID
|
| 623 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p propIdArraySizeBytes or \p
|
| 624 |
+
* propIdArray are NULL.
|
| 625 |
+
*/
|
| 626 |
+
CUptiResult CUPTIAPI cuptiMetricEnumProperties(CUpti_MetricID metric,
|
| 627 |
+
size_t *propIdArraySizeBytes,
|
| 628 |
+
CUpti_MetricPropertyID *propIdArray);
|
| 629 |
+
|
| 630 |
+
|
| 631 |
+
/**
|
| 632 |
+
* \brief For a metric get the groups of events that must be collected
|
| 633 |
+
* in the same pass.
|
| 634 |
+
*
|
| 635 |
+
* For a metric get the groups of events that must be collected in the
|
| 636 |
+
* same pass to ensure that the metric is calculated correctly. If the
|
| 637 |
+
* events are not collected as specified then the metric value may be
|
| 638 |
+
* inaccurate.
|
| 639 |
+
*
|
| 640 |
+
* The function returns NULL if a metric does not have any required
|
| 641 |
+
* event group. In this case the events needed for the metric can be
|
| 642 |
+
* grouped in any manner for collection.
|
| 643 |
+
*
|
| 644 |
+
* \param context The context for event collection
|
| 645 |
+
* \param metric The metric ID
|
| 646 |
+
* \param eventGroupSets Returns a CUpti_EventGroupSets object that
|
| 647 |
+
* indicates the events that must be collected in the same pass to
|
| 648 |
+
* ensure the metric is calculated correctly. Returns NULL if no
|
| 649 |
+
* grouping is required for metric
|
| 650 |
+
* \retval CUPTI_SUCCESS
|
| 651 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 652 |
+
* \retval CUPTI_ERROR_INVALID_METRIC_ID
|
| 653 |
+
*/
|
| 654 |
+
CUptiResult CUPTIAPI cuptiMetricGetRequiredEventGroupSets(CUcontext context,
|
| 655 |
+
CUpti_MetricID metric,
|
| 656 |
+
CUpti_EventGroupSets **eventGroupSets);
|
| 657 |
+
|
| 658 |
+
/**
|
| 659 |
+
* \brief For a set of metrics, get the grouping that indicates the
|
| 660 |
+
* number of passes and the event groups necessary to collect the
|
| 661 |
+
* events required for those metrics.
|
| 662 |
+
*
|
| 663 |
+
* For a set of metrics, get the grouping that indicates the number of
|
| 664 |
+
* passes and the event groups necessary to collect the events
|
| 665 |
+
* required for those metrics.
|
| 666 |
+
*
|
| 667 |
+
* \see cuptiEventGroupSetsCreate for details on event group set
|
| 668 |
+
* creation.
|
| 669 |
+
*
|
| 670 |
+
* \param context The context for event collection
|
| 671 |
+
* \param metricIdArraySizeBytes Size of the metricIdArray in bytes
|
| 672 |
+
* \param metricIdArray Array of metric IDs
|
| 673 |
+
* \param eventGroupPasses Returns a CUpti_EventGroupSets object that
|
| 674 |
+
* indicates the number of passes required to collect the events and
|
| 675 |
+
* the events to collect on each pass
|
| 676 |
+
*
|
| 677 |
+
* \retval CUPTI_SUCCESS
|
| 678 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 679 |
+
* \retval CUPTI_ERROR_INVALID_CONTEXT
|
| 680 |
+
* \retval CUPTI_ERROR_INVALID_METRIC_ID
|
| 681 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p metricIdArray or
|
| 682 |
+
* \p eventGroupPasses is NULL
|
| 683 |
+
*/
|
| 684 |
+
CUptiResult CUPTIAPI cuptiMetricCreateEventGroupSets(CUcontext context,
|
| 685 |
+
size_t metricIdArraySizeBytes,
|
| 686 |
+
CUpti_MetricID *metricIdArray,
|
| 687 |
+
CUpti_EventGroupSets **eventGroupPasses);
|
| 688 |
+
|
| 689 |
+
/**
|
| 690 |
+
* \brief Calculate the value for a metric.
|
| 691 |
+
*
|
| 692 |
+
* Use the events collected for a metric to calculate the metric
|
| 693 |
+
* value. Metric value evaluation depends on the evaluation mode
|
| 694 |
+
* \ref CUpti_MetricEvaluationMode that the metric supports.
|
| 695 |
+
* If a metric has evaluation mode as CUPTI_METRIC_EVALUATION_MODE_PER_INSTANCE,
|
| 696 |
+
* then it assumes that the input event value is for one domain instance.
|
| 697 |
+
* If a metric has evaluation mode as CUPTI_METRIC_EVALUATION_MODE_AGGREGATE,
|
| 698 |
+
* it assumes that input event values are
|
| 699 |
+
* normalized to represent all domain instances on a device. For the
|
| 700 |
+
* most accurate metric collection, the events required for the metric
|
| 701 |
+
* should be collected for all profiled domain instances. For example,
|
| 702 |
+
* to collect all instances of an event, set the
|
| 703 |
+
* CUPTI_EVENT_GROUP_ATTR_PROFILE_ALL_DOMAIN_INSTANCES attribute on
|
| 704 |
+
* the group containing the event to 1. The normalized value for the
|
| 705 |
+
* event is then: (\p sum_event_values * \p totalInstanceCount) / \p
|
| 706 |
+
* instanceCount, where \p sum_event_values is the summation of the
|
| 707 |
+
* event values across all profiled domain instances, \p
|
| 708 |
+
* totalInstanceCount is obtained from querying
|
| 709 |
+
* CUPTI_EVENT_DOMAIN_ATTR_TOTAL_INSTANCE_COUNT and \p instanceCount
|
| 710 |
+
* is obtained from querying CUPTI_EVENT_GROUP_ATTR_INSTANCE_COUNT (or
|
| 711 |
+
* CUPTI_EVENT_DOMAIN_ATTR_INSTANCE_COUNT).
|
| 712 |
+
*
|
| 713 |
+
* \param device The CUDA device that the metric is being calculated for
|
| 714 |
+
* \param metric The metric ID
|
| 715 |
+
* \param eventIdArraySizeBytes The size of \p eventIdArray in bytes
|
| 716 |
+
* \param eventIdArray The event IDs required to calculate \p metric
|
| 717 |
+
* \param eventValueArraySizeBytes The size of \p eventValueArray in bytes
|
| 718 |
+
* \param eventValueArray The normalized event values required to
|
| 719 |
+
* calculate \p metric. The values must be order to match the order of
|
| 720 |
+
* events in \p eventIdArray
|
| 721 |
+
* \param timeDuration The duration over which the events were
|
| 722 |
+
* collected, in ns
|
| 723 |
+
* \param metricValue Returns the value for the metric
|
| 724 |
+
*
|
| 725 |
+
* \retval CUPTI_SUCCESS
|
| 726 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 727 |
+
* \retval CUPTI_ERROR_INVALID_METRIC_ID
|
| 728 |
+
* \retval CUPTI_ERROR_INVALID_OPERATION
|
| 729 |
+
* \retval CUPTI_ERROR_PARAMETER_SIZE_NOT_SUFFICIENT if the
|
| 730 |
+
* eventIdArray does not contain all the events needed for metric
|
| 731 |
+
* \retval CUPTI_ERROR_INVALID_EVENT_VALUE if any of the
|
| 732 |
+
* event values required for the metric is CUPTI_EVENT_OVERFLOW
|
| 733 |
+
* \retval CUPTI_ERROR_INVALID_METRIC_VALUE if the computed metric value
|
| 734 |
+
* cannot be represented in the metric's value type. For example,
|
| 735 |
+
* if the metric value type is unsigned and the computed metric value is negative
|
| 736 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p metricValue,
|
| 737 |
+
* \p eventIdArray or \p eventValueArray is NULL
|
| 738 |
+
*/
|
| 739 |
+
CUptiResult CUPTIAPI cuptiMetricGetValue(CUdevice device,
|
| 740 |
+
CUpti_MetricID metric,
|
| 741 |
+
size_t eventIdArraySizeBytes,
|
| 742 |
+
CUpti_EventID *eventIdArray,
|
| 743 |
+
size_t eventValueArraySizeBytes,
|
| 744 |
+
uint64_t *eventValueArray,
|
| 745 |
+
uint64_t timeDuration,
|
| 746 |
+
CUpti_MetricValue *metricValue);
|
| 747 |
+
|
| 748 |
+
/**
|
| 749 |
+
* \brief Calculate the value for a metric.
|
| 750 |
+
*
|
| 751 |
+
* Use the events and properties collected for a metric to calculate
|
| 752 |
+
* the metric value. Metric value evaluation depends on the evaluation
|
| 753 |
+
* mode \ref CUpti_MetricEvaluationMode that the metric supports. If
|
| 754 |
+
* a metric has evaluation mode as
|
| 755 |
+
* CUPTI_METRIC_EVALUATION_MODE_PER_INSTANCE, then it assumes that the
|
| 756 |
+
* input event value is for one domain instance. If a metric has
|
| 757 |
+
* evaluation mode as CUPTI_METRIC_EVALUATION_MODE_AGGREGATE, it
|
| 758 |
+
* assumes that input event values are normalized to represent all
|
| 759 |
+
* domain instances on a device. For the most accurate metric
|
| 760 |
+
* collection, the events required for the metric should be collected
|
| 761 |
+
* for all profiled domain instances. For example, to collect all
|
| 762 |
+
* instances of an event, set the
|
| 763 |
+
* CUPTI_EVENT_GROUP_ATTR_PROFILE_ALL_DOMAIN_INSTANCES attribute on
|
| 764 |
+
* the group containing the event to 1. The normalized value for the
|
| 765 |
+
* event is then: (\p sum_event_values * \p totalInstanceCount) / \p
|
| 766 |
+
* instanceCount, where \p sum_event_values is the summation of the
|
| 767 |
+
* event values across all profiled domain instances, \p
|
| 768 |
+
* totalInstanceCount is obtained from querying
|
| 769 |
+
* CUPTI_EVENT_DOMAIN_ATTR_TOTAL_INSTANCE_COUNT and \p instanceCount
|
| 770 |
+
* is obtained from querying CUPTI_EVENT_GROUP_ATTR_INSTANCE_COUNT (or
|
| 771 |
+
* CUPTI_EVENT_DOMAIN_ATTR_INSTANCE_COUNT).
|
| 772 |
+
*
|
| 773 |
+
* \param metric The metric ID
|
| 774 |
+
* \param eventIdArraySizeBytes The size of \p eventIdArray in bytes
|
| 775 |
+
* \param eventIdArray The event IDs required to calculate \p metric
|
| 776 |
+
* \param eventValueArraySizeBytes The size of \p eventValueArray in bytes
|
| 777 |
+
* \param eventValueArray The normalized event values required to
|
| 778 |
+
* calculate \p metric. The values must be order to match the order of
|
| 779 |
+
* events in \p eventIdArray
|
| 780 |
+
* \param propIdArraySizeBytes The size of \p propIdArray in bytes
|
| 781 |
+
* \param propIdArray The metric property IDs required to calculate \p metric
|
| 782 |
+
* \param propValueArraySizeBytes The size of \p propValueArray in bytes
|
| 783 |
+
* \param propValueArray The metric property values required to
|
| 784 |
+
* calculate \p metric. The values must be order to match the order of
|
| 785 |
+
* metric properties in \p propIdArray
|
| 786 |
+
* \param metricValue Returns the value for the metric
|
| 787 |
+
*
|
| 788 |
+
* \retval CUPTI_SUCCESS
|
| 789 |
+
* \retval CUPTI_ERROR_NOT_INITIALIZED
|
| 790 |
+
* \retval CUPTI_ERROR_INVALID_METRIC_ID
|
| 791 |
+
* \retval CUPTI_ERROR_INVALID_OPERATION
|
| 792 |
+
* \retval CUPTI_ERROR_PARAMETER_SIZE_NOT_SUFFICIENT if the
|
| 793 |
+
* eventIdArray does not contain all the events needed for metric
|
| 794 |
+
* \retval CUPTI_ERROR_INVALID_EVENT_VALUE if any of the
|
| 795 |
+
* event values required for the metric is CUPTI_EVENT_OVERFLOW
|
| 796 |
+
* \retval CUPTI_ERROR_NOT_COMPATIBLE if the computed metric value
|
| 797 |
+
* cannot be represented in the metric's value type. For example,
|
| 798 |
+
* if the metric value type is unsigned and the computed metric value is negative
|
| 799 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p metricValue,
|
| 800 |
+
* \p eventIdArray or \p eventValueArray is NULL
|
| 801 |
+
*/
|
| 802 |
+
CUptiResult CUPTIAPI cuptiMetricGetValue2(CUpti_MetricID metric,
|
| 803 |
+
size_t eventIdArraySizeBytes,
|
| 804 |
+
CUpti_EventID *eventIdArray,
|
| 805 |
+
size_t eventValueArraySizeBytes,
|
| 806 |
+
uint64_t *eventValueArray,
|
| 807 |
+
size_t propIdArraySizeBytes,
|
| 808 |
+
CUpti_MetricPropertyID *propIdArray,
|
| 809 |
+
size_t propValueArraySizeBytes,
|
| 810 |
+
uint64_t *propValueArray,
|
| 811 |
+
CUpti_MetricValue *metricValue);
|
| 812 |
+
|
| 813 |
+
/** @} */ /* END CUPTI_METRIC_API */
|
| 814 |
+
|
| 815 |
+
#if defined(__GNUC__) && defined(CUPTI_LIB)
|
| 816 |
+
#pragma GCC visibility pop
|
| 817 |
+
#endif
|
| 818 |
+
|
| 819 |
+
#if defined(__cplusplus)
|
| 820 |
+
}
|
| 821 |
+
#endif
|
| 822 |
+
|
| 823 |
+
#endif /*_CUPTI_METRIC_H_*/
|
| 824 |
+
|
| 825 |
+
|
lib/python3.12/site-packages/nvidia/cuda_cupti/include/cupti_nvtx_cbid.h
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
* Copyright 2013-2017 NVIDIA Corporation. All rights reserved.
|
| 3 |
+
*
|
| 4 |
+
* NOTICE TO LICENSEE:
|
| 5 |
+
*
|
| 6 |
+
* This source code and/or documentation ("Licensed Deliverables") are
|
| 7 |
+
* subject to NVIDIA intellectual property rights under U.S. and
|
| 8 |
+
* international Copyright laws.
|
| 9 |
+
*
|
| 10 |
+
* These Licensed Deliverables contained herein is PROPRIETARY and
|
| 11 |
+
* CONFIDENTIAL to NVIDIA and is being provided under the terms and
|
| 12 |
+
* conditions of a form of NVIDIA software license agreement by and
|
| 13 |
+
* between NVIDIA and Licensee ("License Agreement") or electronically
|
| 14 |
+
* accepted by Licensee. Notwithstanding any terms or conditions to
|
| 15 |
+
* the contrary in the License Agreement, reproduction or disclosure
|
| 16 |
+
* of the Licensed Deliverables to any third party without the express
|
| 17 |
+
* written consent of NVIDIA is prohibited.
|
| 18 |
+
*
|
| 19 |
+
* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
|
| 20 |
+
* LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
|
| 21 |
+
* SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. IT IS
|
| 22 |
+
* PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
|
| 23 |
+
* NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
|
| 24 |
+
* DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
|
| 25 |
+
* NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
|
| 26 |
+
* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
|
| 27 |
+
* LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
|
| 28 |
+
* SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
|
| 29 |
+
* DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
| 30 |
+
* WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
| 31 |
+
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
| 32 |
+
* OF THESE LICENSED DELIVERABLES.
|
| 33 |
+
*
|
| 34 |
+
* U.S. Government End Users. These Licensed Deliverables are a
|
| 35 |
+
* "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
|
| 36 |
+
* 1995), consisting of "commercial computer software" and "commercial
|
| 37 |
+
* computer software documentation" as such terms are used in 48
|
| 38 |
+
* C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
|
| 39 |
+
* only as a commercial end item. Consistent with 48 C.F.R.12.212 and
|
| 40 |
+
* 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
|
| 41 |
+
* U.S. Government End Users acquire the Licensed Deliverables with
|
| 42 |
+
* only those rights set forth herein.
|
| 43 |
+
*
|
| 44 |
+
* Any use of the Licensed Deliverables in individual and commercial
|
| 45 |
+
* software must include, in the user documentation and internal
|
| 46 |
+
* comments to the code, the above Disclaimer and U.S. Government End
|
| 47 |
+
* Users Notice.
|
| 48 |
+
*/
|
| 49 |
+
|
| 50 |
+
#if defined(__GNUC__) && defined(CUPTI_LIB)
|
| 51 |
+
#pragma GCC visibility push(default)
|
| 52 |
+
#endif
|
| 53 |
+
|
| 54 |
+
typedef enum {
|
| 55 |
+
CUPTI_CBID_NVTX_INVALID = 0,
|
| 56 |
+
CUPTI_CBID_NVTX_nvtxMarkA = 1,
|
| 57 |
+
CUPTI_CBID_NVTX_nvtxMarkW = 2,
|
| 58 |
+
CUPTI_CBID_NVTX_nvtxMarkEx = 3,
|
| 59 |
+
CUPTI_CBID_NVTX_nvtxRangeStartA = 4,
|
| 60 |
+
CUPTI_CBID_NVTX_nvtxRangeStartW = 5,
|
| 61 |
+
CUPTI_CBID_NVTX_nvtxRangeStartEx = 6,
|
| 62 |
+
CUPTI_CBID_NVTX_nvtxRangeEnd = 7,
|
| 63 |
+
CUPTI_CBID_NVTX_nvtxRangePushA = 8,
|
| 64 |
+
CUPTI_CBID_NVTX_nvtxRangePushW = 9,
|
| 65 |
+
CUPTI_CBID_NVTX_nvtxRangePushEx = 10,
|
| 66 |
+
CUPTI_CBID_NVTX_nvtxRangePop = 11,
|
| 67 |
+
CUPTI_CBID_NVTX_nvtxNameCategoryA = 12,
|
| 68 |
+
CUPTI_CBID_NVTX_nvtxNameCategoryW = 13,
|
| 69 |
+
CUPTI_CBID_NVTX_nvtxNameOsThreadA = 14,
|
| 70 |
+
CUPTI_CBID_NVTX_nvtxNameOsThreadW = 15,
|
| 71 |
+
CUPTI_CBID_NVTX_nvtxNameCuDeviceA = 16,
|
| 72 |
+
CUPTI_CBID_NVTX_nvtxNameCuDeviceW = 17,
|
| 73 |
+
CUPTI_CBID_NVTX_nvtxNameCuContextA = 18,
|
| 74 |
+
CUPTI_CBID_NVTX_nvtxNameCuContextW = 19,
|
| 75 |
+
CUPTI_CBID_NVTX_nvtxNameCuStreamA = 20,
|
| 76 |
+
CUPTI_CBID_NVTX_nvtxNameCuStreamW = 21,
|
| 77 |
+
CUPTI_CBID_NVTX_nvtxNameCuEventA = 22,
|
| 78 |
+
CUPTI_CBID_NVTX_nvtxNameCuEventW = 23,
|
| 79 |
+
CUPTI_CBID_NVTX_nvtxNameCudaDeviceA = 24,
|
| 80 |
+
CUPTI_CBID_NVTX_nvtxNameCudaDeviceW = 25,
|
| 81 |
+
CUPTI_CBID_NVTX_nvtxNameCudaStreamA = 26,
|
| 82 |
+
CUPTI_CBID_NVTX_nvtxNameCudaStreamW = 27,
|
| 83 |
+
CUPTI_CBID_NVTX_nvtxNameCudaEventA = 28,
|
| 84 |
+
CUPTI_CBID_NVTX_nvtxNameCudaEventW = 29,
|
| 85 |
+
CUPTI_CBID_NVTX_nvtxDomainMarkEx = 30,
|
| 86 |
+
CUPTI_CBID_NVTX_nvtxDomainRangeStartEx = 31,
|
| 87 |
+
CUPTI_CBID_NVTX_nvtxDomainRangeEnd = 32,
|
| 88 |
+
CUPTI_CBID_NVTX_nvtxDomainRangePushEx = 33,
|
| 89 |
+
CUPTI_CBID_NVTX_nvtxDomainRangePop = 34,
|
| 90 |
+
CUPTI_CBID_NVTX_nvtxDomainResourceCreate = 35,
|
| 91 |
+
CUPTI_CBID_NVTX_nvtxDomainResourceDestroy = 36,
|
| 92 |
+
CUPTI_CBID_NVTX_nvtxDomainNameCategoryA = 37,
|
| 93 |
+
CUPTI_CBID_NVTX_nvtxDomainNameCategoryW = 38,
|
| 94 |
+
CUPTI_CBID_NVTX_nvtxDomainRegisterStringA = 39,
|
| 95 |
+
CUPTI_CBID_NVTX_nvtxDomainRegisterStringW = 40,
|
| 96 |
+
CUPTI_CBID_NVTX_nvtxDomainCreateA = 41,
|
| 97 |
+
CUPTI_CBID_NVTX_nvtxDomainCreateW = 42,
|
| 98 |
+
CUPTI_CBID_NVTX_nvtxDomainDestroy = 43,
|
| 99 |
+
CUPTI_CBID_NVTX_nvtxDomainSyncUserCreate = 44,
|
| 100 |
+
CUPTI_CBID_NVTX_nvtxDomainSyncUserDestroy = 45,
|
| 101 |
+
CUPTI_CBID_NVTX_nvtxDomainSyncUserAcquireStart = 46,
|
| 102 |
+
CUPTI_CBID_NVTX_nvtxDomainSyncUserAcquireFailed = 47,
|
| 103 |
+
CUPTI_CBID_NVTX_nvtxDomainSyncUserAcquireSuccess = 48,
|
| 104 |
+
CUPTI_CBID_NVTX_nvtxDomainSyncUserReleasing = 49,
|
| 105 |
+
CUPTI_CBID_NVTX_SIZE,
|
| 106 |
+
CUPTI_CBID_NVTX_FORCE_INT = 0x7fffffff
|
| 107 |
+
} CUpti_nvtx_api_trace_cbid;
|
| 108 |
+
|
| 109 |
+
#if defined(__GNUC__) && defined(CUPTI_LIB)
|
| 110 |
+
#pragma GCC visibility pop
|
| 111 |
+
#endif
|
lib/python3.12/site-packages/nvidia/cuda_cupti/include/cupti_pcsampling.h
ADDED
|
@@ -0,0 +1,936 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
* Copyright 2020-2022 NVIDIA Corporation. All rights reserved.
|
| 3 |
+
*
|
| 4 |
+
* NOTICE TO LICENSEE:
|
| 5 |
+
*
|
| 6 |
+
* This source code and/or documentation ("Licensed Deliverables") are
|
| 7 |
+
* subject to NVIDIA intellectual property rights under U.S. and
|
| 8 |
+
* international Copyright laws.
|
| 9 |
+
*
|
| 10 |
+
* These Licensed Deliverables contained herein is PROPRIETARY and
|
| 11 |
+
* CONFIDENTIAL to NVIDIA and is being provided under the terms and
|
| 12 |
+
* conditions of a form of NVIDIA software license agreement by and
|
| 13 |
+
* between NVIDIA and Licensee ("License Agreement") or electronically
|
| 14 |
+
* accepted by Licensee. Notwithstanding any terms or conditions to
|
| 15 |
+
* the contrary in the License Agreement, reproduction or disclosure
|
| 16 |
+
* of the Licensed Deliverables to any third party without the express
|
| 17 |
+
* written consent of NVIDIA is prohibited.
|
| 18 |
+
*
|
| 19 |
+
* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
|
| 20 |
+
* LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
|
| 21 |
+
* SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. IT IS
|
| 22 |
+
* PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
|
| 23 |
+
* NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
|
| 24 |
+
* DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
|
| 25 |
+
* NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
|
| 26 |
+
* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
|
| 27 |
+
* LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
|
| 28 |
+
* SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
|
| 29 |
+
* DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
| 30 |
+
* WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
| 31 |
+
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
| 32 |
+
* OF THESE LICENSED DELIVERABLES.
|
| 33 |
+
*
|
| 34 |
+
* U.S. Government End Users. These Licensed Deliverables are a
|
| 35 |
+
* "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
|
| 36 |
+
* 1995), consisting of "commercial computer software" and "commercial
|
| 37 |
+
* computer software documentation" as such terms are used in 48
|
| 38 |
+
* C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
|
| 39 |
+
* only as a commercial end item. Consistent with 48 C.F.R.12.212 and
|
| 40 |
+
* 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
|
| 41 |
+
* U.S. Government End Users acquire the Licensed Deliverables with
|
| 42 |
+
* only those rights set forth herein.
|
| 43 |
+
*
|
| 44 |
+
* Any use of the Licensed Deliverables in individual and commercial
|
| 45 |
+
* software must include, in the user documentation and internal
|
| 46 |
+
* comments to the code, the above Disclaimer and U.S. Government End
|
| 47 |
+
* Users Notice.
|
| 48 |
+
*/
|
| 49 |
+
|
| 50 |
+
#if !defined(_CUPTI_PCSAMPLING_H_)
|
| 51 |
+
#define _CUPTI_PCSAMPLING_H_
|
| 52 |
+
|
| 53 |
+
#include <cuda.h>
|
| 54 |
+
#include <stdint.h>
|
| 55 |
+
#include <stddef.h>
|
| 56 |
+
#include "cupti_result.h"
|
| 57 |
+
#include "cupti_common.h"
|
| 58 |
+
|
| 59 |
+
|
| 60 |
+
#if defined(__cplusplus)
|
| 61 |
+
extern "C" {
|
| 62 |
+
#endif
|
| 63 |
+
|
| 64 |
+
#if defined(__GNUC__) && defined(CUPTI_LIB)
|
| 65 |
+
#pragma GCC visibility push(default)
|
| 66 |
+
#endif
|
| 67 |
+
|
| 68 |
+
/**
|
| 69 |
+
* \defgroup CUPTI_PCSAMPLING_API CUPTI PC Sampling API
|
| 70 |
+
* Functions, types, and enums that implement the CUPTI PC Sampling API.
|
| 71 |
+
* @{
|
| 72 |
+
*/
|
| 73 |
+
|
| 74 |
+
#ifndef CUPTI_PCSAMPLING_STRUCT_SIZE
|
| 75 |
+
#define CUPTI_PCSAMPLING_STRUCT_SIZE(type_, lastfield_) (offsetof(type_, lastfield_) + sizeof(((type_*)0)->lastfield_))
|
| 76 |
+
#endif
|
| 77 |
+
|
| 78 |
+
#ifndef CUPTI_STALL_REASON_STRING_SIZE
|
| 79 |
+
#define CUPTI_STALL_REASON_STRING_SIZE 128
|
| 80 |
+
#endif
|
| 81 |
+
|
| 82 |
+
/**
|
| 83 |
+
* \brief PC Sampling collection mode
|
| 84 |
+
*/
|
| 85 |
+
typedef enum
|
| 86 |
+
{
|
| 87 |
+
/**
|
| 88 |
+
* INVALID Value
|
| 89 |
+
*/
|
| 90 |
+
CUPTI_PC_SAMPLING_COLLECTION_MODE_INVALID = 0,
|
| 91 |
+
/**
|
| 92 |
+
* Continuous mode. Kernels are not serialized in this mode.
|
| 93 |
+
*/
|
| 94 |
+
CUPTI_PC_SAMPLING_COLLECTION_MODE_CONTINUOUS = 1,
|
| 95 |
+
/**
|
| 96 |
+
* Serialized mode. Kernels are serialized in this mode.
|
| 97 |
+
*/
|
| 98 |
+
CUPTI_PC_SAMPLING_COLLECTION_MODE_KERNEL_SERIALIZED = 2,
|
| 99 |
+
} CUpti_PCSamplingCollectionMode;
|
| 100 |
+
|
| 101 |
+
/**
|
| 102 |
+
* \brief PC Sampling stall reasons
|
| 103 |
+
*/
|
| 104 |
+
typedef struct PACKED_ALIGNMENT
|
| 105 |
+
{
|
| 106 |
+
/**
|
| 107 |
+
* [r] Collected stall reason index
|
| 108 |
+
*/
|
| 109 |
+
uint32_t pcSamplingStallReasonIndex;
|
| 110 |
+
/**
|
| 111 |
+
* [r] Number of times the PC was sampled with the stallReason.
|
| 112 |
+
*/
|
| 113 |
+
uint32_t samples;
|
| 114 |
+
} CUpti_PCSamplingStallReason;
|
| 115 |
+
|
| 116 |
+
/**
|
| 117 |
+
* \brief PC Sampling data
|
| 118 |
+
*/
|
| 119 |
+
typedef struct PACKED_ALIGNMENT
|
| 120 |
+
{
|
| 121 |
+
/**
|
| 122 |
+
* [w] Size of the data structure.
|
| 123 |
+
* CUPTI client should set the size of the structure. It will be used in CUPTI to check what fields are
|
| 124 |
+
* available in the structure. Used to preserve backward compatibility.
|
| 125 |
+
*/
|
| 126 |
+
size_t size;
|
| 127 |
+
/**
|
| 128 |
+
* [r] Unique cubin id
|
| 129 |
+
*/
|
| 130 |
+
uint64_t cubinCrc;
|
| 131 |
+
/**
|
| 132 |
+
* [r] PC offset
|
| 133 |
+
*/
|
| 134 |
+
uint64_t pcOffset;
|
| 135 |
+
/**
|
| 136 |
+
* The function's unique symbol index in the module.
|
| 137 |
+
*/
|
| 138 |
+
uint32_t functionIndex;
|
| 139 |
+
/**
|
| 140 |
+
* Padding
|
| 141 |
+
*/
|
| 142 |
+
uint32_t pad;
|
| 143 |
+
/**
|
| 144 |
+
* [r] The function name. This name string might be shared across all the records
|
| 145 |
+
* including records from activity APIs representing the same function, and so it should not be
|
| 146 |
+
* modified or freed until post processing of all the records is done. Once done, it is user’s responsibility to
|
| 147 |
+
* free the memory using free() function.
|
| 148 |
+
*/
|
| 149 |
+
char* functionName;
|
| 150 |
+
/**
|
| 151 |
+
* [r] Collected stall reason count
|
| 152 |
+
*/
|
| 153 |
+
size_t stallReasonCount;
|
| 154 |
+
/**
|
| 155 |
+
* [r] Stall reason id
|
| 156 |
+
* Total samples
|
| 157 |
+
*/
|
| 158 |
+
CUpti_PCSamplingStallReason *stallReason;
|
| 159 |
+
/**
|
| 160 |
+
* The correlation ID of the kernel to which this result is associated. Only valid for serialized mode of pc sampling collection.
|
| 161 |
+
* For continous mode of collection the correlationId will be set to 0.
|
| 162 |
+
*/
|
| 163 |
+
uint32_t correlationId;
|
| 164 |
+
} CUpti_PCSamplingPCData;
|
| 165 |
+
|
| 166 |
+
/**
|
| 167 |
+
* \brief PC Sampling output data format
|
| 168 |
+
*/
|
| 169 |
+
typedef enum
|
| 170 |
+
{
|
| 171 |
+
CUPTI_PC_SAMPLING_OUTPUT_DATA_FORMAT_INVALID = 0,
|
| 172 |
+
/**
|
| 173 |
+
* HW buffer data will be parsed during collection of data
|
| 174 |
+
*/
|
| 175 |
+
CUPTI_PC_SAMPLING_OUTPUT_DATA_FORMAT_PARSED = 1,
|
| 176 |
+
} CUpti_PCSamplingOutputDataFormat;
|
| 177 |
+
|
| 178 |
+
/**
|
| 179 |
+
* \brief Collected PC Sampling data
|
| 180 |
+
*
|
| 181 |
+
*/
|
| 182 |
+
typedef struct PACKED_ALIGNMENT
|
| 183 |
+
{
|
| 184 |
+
/**
|
| 185 |
+
* [w] Size of the data structure.
|
| 186 |
+
* CUPTI client should set the size of the structure. It will be used in CUPTI to check what fields are
|
| 187 |
+
* available in the structure. Used to preserve backward compatibility.
|
| 188 |
+
*/
|
| 189 |
+
size_t size;
|
| 190 |
+
/**
|
| 191 |
+
* [w] Number of PCs to be collected
|
| 192 |
+
*/
|
| 193 |
+
size_t collectNumPcs;
|
| 194 |
+
/**
|
| 195 |
+
* [r] Number of samples collected across all PCs.
|
| 196 |
+
* It includes samples for user modules, samples for non-user kernels and dropped samples.
|
| 197 |
+
* It includes counts for all non selected stall reasons.
|
| 198 |
+
* CUPTI does not provide PC records for non-user kernels.
|
| 199 |
+
* CUPTI does not provide PC records for instructions for which all selected stall reason metrics counts are zero.
|
| 200 |
+
*/
|
| 201 |
+
uint64_t totalSamples;
|
| 202 |
+
/**
|
| 203 |
+
* [r] Number of samples that were dropped by hardware due to backpressure/overflow.
|
| 204 |
+
*/
|
| 205 |
+
uint64_t droppedSamples;
|
| 206 |
+
/**
|
| 207 |
+
* [r] Number of PCs collected
|
| 208 |
+
*/
|
| 209 |
+
size_t totalNumPcs;
|
| 210 |
+
/**
|
| 211 |
+
* [r] Number of PCs available for collection
|
| 212 |
+
*/
|
| 213 |
+
size_t remainingNumPcs;
|
| 214 |
+
/**
|
| 215 |
+
* [r] Unique identifier for each range.
|
| 216 |
+
* Data collected across multiple ranges in multiple buffers can be identified using range id.
|
| 217 |
+
*/
|
| 218 |
+
uint64_t rangeId;
|
| 219 |
+
/**
|
| 220 |
+
* [r] Profiled PC data
|
| 221 |
+
* This data struct should have enough memory to collect number of PCs mentioned in \brief collectNumPcs
|
| 222 |
+
*/
|
| 223 |
+
CUpti_PCSamplingPCData *pPcData;
|
| 224 |
+
/**
|
| 225 |
+
* [r] Number of samples collected across all non user kernels PCs.
|
| 226 |
+
* It includes samples for non-user kernels.
|
| 227 |
+
* It includes counts for all non selected stall reasons as well.
|
| 228 |
+
* CUPTI does not provide PC records for non-user kernels.
|
| 229 |
+
*/
|
| 230 |
+
uint64_t nonUsrKernelsTotalSamples;
|
| 231 |
+
|
| 232 |
+
/**
|
| 233 |
+
* [r] Status of the hardware buffer.
|
| 234 |
+
* CUPTI returns the error code CUPTI_ERROR_OUT_OF_MEMORY when hardware buffer is full.
|
| 235 |
+
* When hardware buffer is full, user will get pc data as 0. To mitigate this issue, one or more of the below options can be tried:
|
| 236 |
+
* 1. Increase the hardware buffer size using the attribute CUPTI_PC_SAMPLING_CONFIGURATION_ATTR_TYPE_HARDWARE_BUFFER_SIZE
|
| 237 |
+
* 2. Decrease the thread sleep span using the attribute CUPTI_PC_SAMPLING_CONFIGURATION_ATTR_TYPE_WORKER_THREAD_PERIODIC_SLEEP_SPAN
|
| 238 |
+
* 3. Decrease the sampling frequency using the attribute CUPTI_PC_SAMPLING_CONFIGURATION_ATTR_TYPE_SAMPLING_PERIOD
|
| 239 |
+
*/
|
| 240 |
+
uint8_t hardwareBufferFull;
|
| 241 |
+
} CUpti_PCSamplingData;
|
| 242 |
+
|
| 243 |
+
/**
|
| 244 |
+
* \brief PC Sampling configuration attributes
|
| 245 |
+
*
|
| 246 |
+
* PC Sampling configuration attribute types. These attributes can be read
|
| 247 |
+
* using \ref cuptiPCSamplingGetConfigurationAttribute and can be written
|
| 248 |
+
* using \ref cuptiPCSamplingSetConfigurationAttribute. Attributes marked
|
| 249 |
+
* [r] can only be read using \ref cuptiPCSamplingGetConfigurationAttribute
|
| 250 |
+
* [w] can only be written using \ref cuptiPCSamplingSetConfigurationAttribute
|
| 251 |
+
* [rw] can be read using \ref cuptiPCSamplingGetConfigurationAttribute and
|
| 252 |
+
* written using \ref cuptiPCSamplingSetConfigurationAttribute
|
| 253 |
+
*/
|
| 254 |
+
typedef enum
|
| 255 |
+
{
|
| 256 |
+
CUPTI_PC_SAMPLING_CONFIGURATION_ATTR_TYPE_INVALID = 0,
|
| 257 |
+
/**
|
| 258 |
+
* [rw] Sampling period for PC Sampling.
|
| 259 |
+
* DEFAULT - CUPTI defined value based on number of SMs
|
| 260 |
+
* Valid values for the sampling
|
| 261 |
+
* periods are between 5 to 31 both inclusive. This will set the
|
| 262 |
+
* sampling period to (2^samplingPeriod) cycles.
|
| 263 |
+
* For e.g. for sampling period = 5 to 31, cycles = 32, 64, 128,..., 2^31
|
| 264 |
+
* Value is a uint32_t
|
| 265 |
+
*/
|
| 266 |
+
CUPTI_PC_SAMPLING_CONFIGURATION_ATTR_TYPE_SAMPLING_PERIOD = 1,
|
| 267 |
+
/**
|
| 268 |
+
* [w] Number of stall reasons to collect.
|
| 269 |
+
* DEFAULT - All stall reasons will be collected
|
| 270 |
+
* Value is a size_t
|
| 271 |
+
* [w] Stall reasons to collect
|
| 272 |
+
* DEFAULT - All stall reasons will be collected
|
| 273 |
+
* Input value should be a pointer pointing to array of stall reason indexes
|
| 274 |
+
* containing all the stall reason indexes to collect.
|
| 275 |
+
*/
|
| 276 |
+
CUPTI_PC_SAMPLING_CONFIGURATION_ATTR_TYPE_STALL_REASON = 2,
|
| 277 |
+
/**
|
| 278 |
+
* [rw] Size of SW buffer for raw PC counter data downloaded from HW buffer
|
| 279 |
+
* DEFAULT - 1 MB, which can accommodate approximately 5500 PCs
|
| 280 |
+
* with all stall reasons
|
| 281 |
+
* Approximately it takes 16 Bytes (and some fixed size memory)
|
| 282 |
+
* to accommodate one PC with one stall reason
|
| 283 |
+
* For e.g. 1 PC with 1 stall reason = 32 Bytes
|
| 284 |
+
* 1 PC with 2 stall reason = 48 Bytes
|
| 285 |
+
* 1 PC with 4 stall reason = 96 Bytes
|
| 286 |
+
* Value is a size_t
|
| 287 |
+
*/
|
| 288 |
+
CUPTI_PC_SAMPLING_CONFIGURATION_ATTR_TYPE_SCRATCH_BUFFER_SIZE = 3,
|
| 289 |
+
/**
|
| 290 |
+
* [rw] Size of HW buffer in bytes
|
| 291 |
+
* DEFAULT - 512 MB
|
| 292 |
+
* If sampling period is too less, HW buffer can overflow
|
| 293 |
+
* and drop PC data
|
| 294 |
+
* Value is a size_t
|
| 295 |
+
*/
|
| 296 |
+
CUPTI_PC_SAMPLING_CONFIGURATION_ATTR_TYPE_HARDWARE_BUFFER_SIZE = 4,
|
| 297 |
+
/**
|
| 298 |
+
* [rw] PC Sampling collection mode
|
| 299 |
+
* DEFAULT - CUPTI_PC_SAMPLING_COLLECTION_MODE_CONTINUOUS
|
| 300 |
+
* Input value should be of type \ref CUpti_PCSamplingCollectionMode.
|
| 301 |
+
*/
|
| 302 |
+
CUPTI_PC_SAMPLING_CONFIGURATION_ATTR_TYPE_COLLECTION_MODE = 5,
|
| 303 |
+
/**
|
| 304 |
+
* [rw] Control over PC Sampling data collection range
|
| 305 |
+
* Default - 0
|
| 306 |
+
* 1 - Allows user to start and stop PC Sampling using APIs -
|
| 307 |
+
* \ref cuptiPCSamplingStart() - Start PC Sampling
|
| 308 |
+
* \ref cuptiPCSamplingStop() - Stop PC Sampling
|
| 309 |
+
* Value is a uint32_t
|
| 310 |
+
*/
|
| 311 |
+
CUPTI_PC_SAMPLING_CONFIGURATION_ATTR_TYPE_ENABLE_START_STOP_CONTROL = 6,
|
| 312 |
+
/**
|
| 313 |
+
* [w] Value for output data format
|
| 314 |
+
* Default - CUPTI_PC_SAMPLING_OUTPUT_DATA_FORMAT_PARSED
|
| 315 |
+
* Input value should be of type \ref CUpti_PCSamplingOutputDataFormat.
|
| 316 |
+
*/
|
| 317 |
+
CUPTI_PC_SAMPLING_CONFIGURATION_ATTR_TYPE_OUTPUT_DATA_FORMAT = 7,
|
| 318 |
+
/**
|
| 319 |
+
* [w] Data buffer to hold collected PC Sampling data PARSED_DATA
|
| 320 |
+
* Default - none.
|
| 321 |
+
* Buffer type is void * which can point to PARSED_DATA
|
| 322 |
+
* Refer \ref CUpti_PCSamplingData for buffer format for PARSED_DATA
|
| 323 |
+
*/
|
| 324 |
+
CUPTI_PC_SAMPLING_CONFIGURATION_ATTR_TYPE_SAMPLING_DATA_BUFFER = 8,
|
| 325 |
+
/**
|
| 326 |
+
* [rw] Control sleep time of the worker threads created by CUPTI for various PC sampling operations.
|
| 327 |
+
* CUPTI creates multiple worker threads to offload certain operations to these threads. This includes decoding of HW data to
|
| 328 |
+
* the CUPTI PC sampling data and correlating PC data to SASS instructions. CUPTI wakes up these threads periodically.
|
| 329 |
+
* Default - 100 milliseconds.
|
| 330 |
+
* Value is a uint32_t
|
| 331 |
+
*/
|
| 332 |
+
CUPTI_PC_SAMPLING_CONFIGURATION_ATTR_TYPE_WORKER_THREAD_PERIODIC_SLEEP_SPAN = 9,
|
| 333 |
+
CUPTI_PC_SAMPLING_CONFIGURATION_ATTR_TYPE_FORCE_INT = 0x7fffffff,
|
| 334 |
+
} CUpti_PCSamplingConfigurationAttributeType;
|
| 335 |
+
|
| 336 |
+
/**
|
| 337 |
+
* \brief PC sampling configuration information structure
|
| 338 |
+
*
|
| 339 |
+
* This structure provides \ref CUpti_PCSamplingConfigurationAttributeType which can be configured
|
| 340 |
+
* or queried for PC sampling configuration
|
| 341 |
+
*/
|
| 342 |
+
typedef struct
|
| 343 |
+
{
|
| 344 |
+
/**
|
| 345 |
+
* Refer \ref CUpti_PCSamplingConfigurationAttributeType for all supported attribute types
|
| 346 |
+
*/
|
| 347 |
+
CUpti_PCSamplingConfigurationAttributeType attributeType;
|
| 348 |
+
/*
|
| 349 |
+
* Configure or query status for \p attributeType
|
| 350 |
+
* CUPTI_SUCCESS for valid \p attributeType and \p attributeData
|
| 351 |
+
* CUPTI_ERROR_INVALID_OPERATION if \p attributeData is not valid
|
| 352 |
+
* CUPTI_ERROR_INVALID_PARAMETER if \p attributeType is not valid
|
| 353 |
+
*/
|
| 354 |
+
CUptiResult attributeStatus;
|
| 355 |
+
union
|
| 356 |
+
{
|
| 357 |
+
/**
|
| 358 |
+
* Invalid Value
|
| 359 |
+
*/
|
| 360 |
+
struct
|
| 361 |
+
{
|
| 362 |
+
uint64_t data[3];
|
| 363 |
+
} invalidData;
|
| 364 |
+
/**
|
| 365 |
+
* Refer \ref CUPTI_PC_SAMPLING_CONFIGURATION_ATTR_TYPE_SAMPLING_PERIOD
|
| 366 |
+
*/
|
| 367 |
+
struct
|
| 368 |
+
{
|
| 369 |
+
uint32_t samplingPeriod;
|
| 370 |
+
} samplingPeriodData;
|
| 371 |
+
/**
|
| 372 |
+
* Refer \ref CUPTI_PC_SAMPLING_CONFIGURATION_ATTR_TYPE_STALL_REASON
|
| 373 |
+
*/
|
| 374 |
+
struct
|
| 375 |
+
{
|
| 376 |
+
size_t stallReasonCount;
|
| 377 |
+
uint32_t *pStallReasonIndex;
|
| 378 |
+
} stallReasonData;
|
| 379 |
+
/**
|
| 380 |
+
* Refer \ref CUPTI_PC_SAMPLING_CONFIGURATION_ATTR_TYPE_SCRATCH_BUFFER_SIZE
|
| 381 |
+
*/
|
| 382 |
+
struct
|
| 383 |
+
{
|
| 384 |
+
size_t scratchBufferSize;
|
| 385 |
+
} scratchBufferSizeData;
|
| 386 |
+
/**
|
| 387 |
+
* Refer \ref CUPTI_PC_SAMPLING_CONFIGURATION_ATTR_TYPE_HARDWARE_BUFFER_SIZE
|
| 388 |
+
*/
|
| 389 |
+
struct
|
| 390 |
+
{
|
| 391 |
+
size_t hardwareBufferSize;
|
| 392 |
+
} hardwareBufferSizeData;
|
| 393 |
+
/**
|
| 394 |
+
* Refer \ref CUPTI_PC_SAMPLING_CONFIGURATION_ATTR_TYPE_COLLECTION_MODE
|
| 395 |
+
*/
|
| 396 |
+
struct
|
| 397 |
+
{
|
| 398 |
+
CUpti_PCSamplingCollectionMode collectionMode;
|
| 399 |
+
} collectionModeData;
|
| 400 |
+
/**
|
| 401 |
+
* Refer \ref CUPTI_PC_SAMPLING_CONFIGURATION_ATTR_TYPE_ENABLE_START_STOP_CONTROL
|
| 402 |
+
*/
|
| 403 |
+
struct
|
| 404 |
+
{
|
| 405 |
+
uint32_t enableStartStopControl;
|
| 406 |
+
} enableStartStopControlData;
|
| 407 |
+
/**
|
| 408 |
+
* Refer \ref CUPTI_PC_SAMPLING_CONFIGURATION_ATTR_TYPE_OUTPUT_DATA_FORMAT
|
| 409 |
+
*/
|
| 410 |
+
struct
|
| 411 |
+
{
|
| 412 |
+
CUpti_PCSamplingOutputDataFormat outputDataFormat;
|
| 413 |
+
} outputDataFormatData;
|
| 414 |
+
/**
|
| 415 |
+
* Refer \ref CUPTI_PC_SAMPLING_CONFIGURATION_ATTR_TYPE_SAMPLING_DATA_BUFFER
|
| 416 |
+
*/
|
| 417 |
+
struct
|
| 418 |
+
{
|
| 419 |
+
void *samplingDataBuffer;
|
| 420 |
+
} samplingDataBufferData;
|
| 421 |
+
/**
|
| 422 |
+
* Refer \ref CUPTI_PC_SAMPLING_CONFIGURATION_ATTR_TYPE_WORKER_THREAD_PERIODIC_SLEEP_SPAN
|
| 423 |
+
*/
|
| 424 |
+
struct
|
| 425 |
+
{
|
| 426 |
+
uint32_t workerThreadPeriodicSleepSpan;
|
| 427 |
+
} workerThreadPeriodicSleepSpanData;
|
| 428 |
+
|
| 429 |
+
} attributeData;
|
| 430 |
+
} CUpti_PCSamplingConfigurationInfo;
|
| 431 |
+
|
| 432 |
+
/**
|
| 433 |
+
* \brief PC sampling configuration structure
|
| 434 |
+
*
|
| 435 |
+
* This structure configures PC sampling using \ref cuptiPCSamplingSetConfigurationAttribute
|
| 436 |
+
* and queries PC sampling default configuration using \ref cuptiPCSamplingGetConfigurationAttribute
|
| 437 |
+
*/
|
| 438 |
+
typedef struct
|
| 439 |
+
{
|
| 440 |
+
/**
|
| 441 |
+
* [w] Size of the data structure i.e. CUpti_PCSamplingConfigurationInfoParamsSize
|
| 442 |
+
* CUPTI client should set the size of the structure. It will be used in CUPTI to check what fields are
|
| 443 |
+
* available in the structure. Used to preserve backward compatibility.
|
| 444 |
+
*/
|
| 445 |
+
size_t size;
|
| 446 |
+
/**
|
| 447 |
+
* [w] Assign to NULL
|
| 448 |
+
*/
|
| 449 |
+
void* pPriv;
|
| 450 |
+
/**
|
| 451 |
+
* [w] CUcontext
|
| 452 |
+
*/
|
| 453 |
+
CUcontext ctx;
|
| 454 |
+
/**
|
| 455 |
+
* [w] Number of attributes to configure using \ref cuptiPCSamplingSetConfigurationAttribute or query
|
| 456 |
+
* using \ref cuptiPCSamplingGetConfigurationAttribute
|
| 457 |
+
*/
|
| 458 |
+
size_t numAttributes;
|
| 459 |
+
/**
|
| 460 |
+
* Refer \ref CUpti_PCSamplingConfigurationInfo
|
| 461 |
+
*/
|
| 462 |
+
CUpti_PCSamplingConfigurationInfo *pPCSamplingConfigurationInfo;
|
| 463 |
+
} CUpti_PCSamplingConfigurationInfoParams;
|
| 464 |
+
#define CUpti_PCSamplingConfigurationInfoParamsSize CUPTI_PCSAMPLING_STRUCT_SIZE(CUpti_PCSamplingConfigurationInfoParams,pPCSamplingConfigurationInfo)
|
| 465 |
+
|
| 466 |
+
/**
|
| 467 |
+
* \brief Write PC Sampling configuration attribute.
|
| 468 |
+
*
|
| 469 |
+
* \param pParams A pointer to \ref CUpti_PCSamplingConfigurationInfoParams
|
| 470 |
+
* containing PC sampling configuration.
|
| 471 |
+
*
|
| 472 |
+
* \retval CUPTI_SUCCESS
|
| 473 |
+
* \retval CUPTI_ERROR_INVALID_OPERATION if this API is called with
|
| 474 |
+
* some invalid \p attrib.
|
| 475 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if attribute \p value is not valid
|
| 476 |
+
* or any \p pParams is not valid
|
| 477 |
+
* \retval CUPTI_ERROR_NOT_SUPPORTED indicates that the system/device
|
| 478 |
+
* does not support the API
|
| 479 |
+
*/
|
| 480 |
+
CUptiResult CUPTIAPI cuptiPCSamplingSetConfigurationAttribute(CUpti_PCSamplingConfigurationInfoParams *pParams);
|
| 481 |
+
|
| 482 |
+
/**
|
| 483 |
+
* \brief Read PC Sampling configuration attribute.
|
| 484 |
+
*
|
| 485 |
+
* \param pParams A pointer to \ref CUpti_PCSamplingConfigurationInfoParams
|
| 486 |
+
* containing PC sampling configuration.
|
| 487 |
+
*
|
| 488 |
+
* \retval CUPTI_SUCCESS
|
| 489 |
+
* \retval CUPTI_ERROR_INVALID_OPERATION if this API is called with
|
| 490 |
+
* some invalid attribute.
|
| 491 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p attrib is not valid
|
| 492 |
+
* or any \p pParams is not valid
|
| 493 |
+
* \retval CUPTI_ERROR_PARAMETER_SIZE_NOT_SUFFICIENT indicates that
|
| 494 |
+
* the \p value buffer is too small to hold the attribute value
|
| 495 |
+
* \retval CUPTI_ERROR_NOT_SUPPORTED indicates that the system/device
|
| 496 |
+
* does not support the API
|
| 497 |
+
*/
|
| 498 |
+
CUptiResult CUPTIAPI cuptiPCSamplingGetConfigurationAttribute(CUpti_PCSamplingConfigurationInfoParams *pParams);
|
| 499 |
+
|
| 500 |
+
/**
|
| 501 |
+
* \brief Params for cuptiPCSamplingEnable
|
| 502 |
+
*/
|
| 503 |
+
typedef struct
|
| 504 |
+
{
|
| 505 |
+
/**
|
| 506 |
+
* [w] Size of the data structure i.e. CUpti_PCSamplingGetDataParamsSize
|
| 507 |
+
* CUPTI client should set the size of the structure. It will be used in CUPTI to check what fields are
|
| 508 |
+
* available in the structure. Used to preserve backward compatibility.
|
| 509 |
+
*/
|
| 510 |
+
size_t size;
|
| 511 |
+
/**
|
| 512 |
+
* [w] Assign to NULL
|
| 513 |
+
*/
|
| 514 |
+
void* pPriv;
|
| 515 |
+
/**
|
| 516 |
+
* [w] CUcontext
|
| 517 |
+
*/
|
| 518 |
+
CUcontext ctx;
|
| 519 |
+
/**
|
| 520 |
+
* \param pcSamplingData Data buffer to hold collected PC Sampling data PARSED_DATA
|
| 521 |
+
* Buffer type is void * which can point to PARSED_DATA
|
| 522 |
+
* Refer \ref CUpti_PCSamplingData for buffer format for PARSED_DATA
|
| 523 |
+
*/
|
| 524 |
+
void *pcSamplingData;
|
| 525 |
+
} CUpti_PCSamplingGetDataParams;
|
| 526 |
+
#define CUpti_PCSamplingGetDataParamsSize CUPTI_PCSAMPLING_STRUCT_SIZE(CUpti_PCSamplingGetDataParams, pcSamplingData)
|
| 527 |
+
/**
|
| 528 |
+
* \brief Flush GPU PC sampling data periodically.
|
| 529 |
+
*
|
| 530 |
+
* Flushing of GPU PC Sampling data is required at following point to maintain uniqueness of PCs:
|
| 531 |
+
* For \brief CUPTI_PC_SAMPLING_COLLECTION_MODE_CONTINUOUS, after every module load-unload-load
|
| 532 |
+
* For \brief CUPTI_PC_SAMPLING_COLLECTION_MODE_KERNEL_SERIALIZED, after every kernel ends
|
| 533 |
+
* If configuration option \brief CUPTI_PC_SAMPLING_CONFIGURATION_ATTR_TYPE_ENABLE_START_STOP_CONTROL
|
| 534 |
+
* is enabled, then after every range end i.e. \brief cuptiPCSamplingStop()
|
| 535 |
+
*
|
| 536 |
+
* If application is profiled in \brief CUPTI_PC_SAMPLING_COLLECTION_MODE_CONTINUOUS, with disabled
|
| 537 |
+
* \brief CUPTI_PC_SAMPLING_CONFIGURATION_ATTR_TYPE_ENABLE_START_STOP_CONTROL, and there is no module unload,
|
| 538 |
+
* user can collect data in two ways:
|
| 539 |
+
* Use \brief cuptiPCSamplingGetData() API periodically
|
| 540 |
+
* Use \brief cuptiPCSamplingDisable() on application exit and read GPU PC sampling data from sampling
|
| 541 |
+
* data buffer passed during configuration.
|
| 542 |
+
* Note: In case, \brief cuptiPCSamplingGetData() API is not called periodically, then sampling data buffer
|
| 543 |
+
* passed during configuration should be large enough to hold all PCs data.
|
| 544 |
+
* \brief cuptiPCSamplingGetData() API never does device synchronization.
|
| 545 |
+
* It is possible that when the API is called there is some unconsumed data from the HW buffer. In this case
|
| 546 |
+
* CUPTI provides only the data available with it at that moment.
|
| 547 |
+
*
|
| 548 |
+
* \param pParams A pointer to \ref CUpti_PCSamplingGetDataParams
|
| 549 |
+
*
|
| 550 |
+
* \retval CUPTI_SUCCESS
|
| 551 |
+
* \retval CUPTI_ERROR_INVALID_OPERATION if this API is called without
|
| 552 |
+
* enabling PC sampling.
|
| 553 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if any \p pParams is not valid
|
| 554 |
+
* \retval CUPTI_ERROR_NOT_SUPPORTED indicates that the system/device
|
| 555 |
+
* \retval CUPTI_ERROR_OUT_OF_MEMORY indicates that the HW buffer is full
|
| 556 |
+
* does not support the API
|
| 557 |
+
*/
|
| 558 |
+
CUptiResult CUPTIAPI cuptiPCSamplingGetData(CUpti_PCSamplingGetDataParams *pParams);
|
| 559 |
+
|
| 560 |
+
/**
|
| 561 |
+
* \brief Params for cuptiPCSamplingEnable
|
| 562 |
+
*/
|
| 563 |
+
typedef struct
|
| 564 |
+
{
|
| 565 |
+
/**
|
| 566 |
+
* [w] Size of the data structure i.e. CUpti_PCSamplingEnableParamsSize
|
| 567 |
+
* CUPTI client should set the size of the structure. It will be used in CUPTI to check what fields are
|
| 568 |
+
* available in the structure. Used to preserve backward compatibility.
|
| 569 |
+
*/
|
| 570 |
+
size_t size;
|
| 571 |
+
/**
|
| 572 |
+
* [w] Assign to NULL
|
| 573 |
+
*/
|
| 574 |
+
void* pPriv;
|
| 575 |
+
/**
|
| 576 |
+
* [w] CUcontext
|
| 577 |
+
*/
|
| 578 |
+
CUcontext ctx;
|
| 579 |
+
} CUpti_PCSamplingEnableParams;
|
| 580 |
+
#define CUpti_PCSamplingEnableParamsSize CUPTI_PCSAMPLING_STRUCT_SIZE(CUpti_PCSamplingEnableParams, ctx)
|
| 581 |
+
|
| 582 |
+
/**
|
| 583 |
+
* \brief Enable PC sampling.
|
| 584 |
+
*
|
| 585 |
+
* \param pParams A pointer to \ref CUpti_PCSamplingEnableParams
|
| 586 |
+
*
|
| 587 |
+
* \retval CUPTI_SUCCESS
|
| 588 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if any \p pParams is not valid
|
| 589 |
+
* \retval CUPTI_ERROR_NOT_SUPPORTED indicates that the system/device
|
| 590 |
+
* does not support the API
|
| 591 |
+
*/
|
| 592 |
+
CUptiResult CUPTIAPI cuptiPCSamplingEnable(CUpti_PCSamplingEnableParams *pParams);
|
| 593 |
+
|
| 594 |
+
/**
|
| 595 |
+
* \brief Params for cuptiPCSamplingDisable
|
| 596 |
+
*/
|
| 597 |
+
typedef struct
|
| 598 |
+
{
|
| 599 |
+
/**
|
| 600 |
+
* [w] Size of the data structure i.e. CUpti_PCSamplingDisableParamsSize
|
| 601 |
+
* CUPTI client should set the size of the structure. It will be used in CUPTI to check what fields are
|
| 602 |
+
* available in the structure. Used to preserve backward compatibility.
|
| 603 |
+
*/
|
| 604 |
+
size_t size;
|
| 605 |
+
/**
|
| 606 |
+
* [w] Assign to NULL
|
| 607 |
+
*/
|
| 608 |
+
void* pPriv;
|
| 609 |
+
/**
|
| 610 |
+
* [w] CUcontext
|
| 611 |
+
*/
|
| 612 |
+
CUcontext ctx;
|
| 613 |
+
} CUpti_PCSamplingDisableParams;
|
| 614 |
+
#define CUpti_PCSamplingDisableParamsSize CUPTI_PCSAMPLING_STRUCT_SIZE(CUpti_PCSamplingDisableParams, ctx)
|
| 615 |
+
|
| 616 |
+
/**
|
| 617 |
+
* \brief Disable PC sampling.
|
| 618 |
+
*
|
| 619 |
+
* For application which doesn't destroy the CUDA context explicitly,
|
| 620 |
+
* this API does the PC Sampling tear-down, joins threads and copies PC records in the buffer provided
|
| 621 |
+
* during the PC sampling configuration. PC records which can't be accommodated in the buffer are discarded.
|
| 622 |
+
*
|
| 623 |
+
* \param pParams A pointer to \ref CUpti_PCSamplingDisableParams
|
| 624 |
+
*
|
| 625 |
+
* \retval CUPTI_SUCCESS
|
| 626 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if any \p pParams is not valid
|
| 627 |
+
* \retval CUPTI_ERROR_NOT_SUPPORTED indicates that the system/device
|
| 628 |
+
* does not support the API
|
| 629 |
+
*/
|
| 630 |
+
CUptiResult CUPTIAPI cuptiPCSamplingDisable(CUpti_PCSamplingDisableParams *pParams);
|
| 631 |
+
|
| 632 |
+
/**
|
| 633 |
+
* \brief Params for cuptiPCSamplingStart
|
| 634 |
+
*/
|
| 635 |
+
typedef struct
|
| 636 |
+
{
|
| 637 |
+
/**
|
| 638 |
+
* [w] Size of the data structure i.e. CUpti_PCSamplingStartParamsSize
|
| 639 |
+
* CUPTI client should set the size of the structure. It will be used in CUPTI to check what fields are
|
| 640 |
+
* available in the structure. Used to preserve backward compatibility.
|
| 641 |
+
*/
|
| 642 |
+
size_t size;
|
| 643 |
+
/**
|
| 644 |
+
* [w] Assign to NULL
|
| 645 |
+
*/
|
| 646 |
+
void* pPriv;
|
| 647 |
+
/**
|
| 648 |
+
* [w] CUcontext
|
| 649 |
+
*/
|
| 650 |
+
CUcontext ctx;
|
| 651 |
+
} CUpti_PCSamplingStartParams;
|
| 652 |
+
#define CUpti_PCSamplingStartParamsSize CUPTI_PCSAMPLING_STRUCT_SIZE(CUpti_PCSamplingStartParams, ctx)
|
| 653 |
+
|
| 654 |
+
/**
|
| 655 |
+
* \brief Start PC sampling.
|
| 656 |
+
*
|
| 657 |
+
* User can collect PC Sampling data for user-defined range specified by Start/Stop APIs.
|
| 658 |
+
* This API can be used to mark starting of range. Set configuration option
|
| 659 |
+
* \brief CUPTI_PC_SAMPLING_CONFIGURATION_ATTR_TYPE_ENABLE_START_STOP_CONTROL to use this API.
|
| 660 |
+
*
|
| 661 |
+
* \param pParams A pointer to \ref CUpti_PCSamplingStartParams
|
| 662 |
+
*
|
| 663 |
+
* \retval CUPTI_SUCCESS
|
| 664 |
+
* \retval CUPTI_ERROR_INVALID_OPERATION if this API is called with
|
| 665 |
+
* incorrect PC Sampling configuration.
|
| 666 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if any \p pParams is not valid
|
| 667 |
+
* \retval CUPTI_ERROR_NOT_SUPPORTED indicates that the system/device
|
| 668 |
+
* does not support the API
|
| 669 |
+
*/
|
| 670 |
+
CUptiResult CUPTIAPI cuptiPCSamplingStart(CUpti_PCSamplingStartParams *pParams);
|
| 671 |
+
|
| 672 |
+
/**
|
| 673 |
+
* \brief Params for cuptiPCSamplingStop
|
| 674 |
+
*/
|
| 675 |
+
typedef struct
|
| 676 |
+
{
|
| 677 |
+
/**
|
| 678 |
+
* [w] Size of the data structure i.e. CUpti_PCSamplingStopParamsSize
|
| 679 |
+
* CUPTI client should set the size of the structure. It will be used in CUPTI to check what fields are
|
| 680 |
+
* available in the structure. Used to preserve backward compatibility.
|
| 681 |
+
*/
|
| 682 |
+
size_t size;
|
| 683 |
+
/**
|
| 684 |
+
* [w] Assign to NULL
|
| 685 |
+
*/
|
| 686 |
+
void* pPriv;
|
| 687 |
+
/**
|
| 688 |
+
* [w] CUcontext
|
| 689 |
+
*/
|
| 690 |
+
CUcontext ctx;
|
| 691 |
+
} CUpti_PCSamplingStopParams;
|
| 692 |
+
#define CUpti_PCSamplingStopParamsSize CUPTI_PCSAMPLING_STRUCT_SIZE(CUpti_PCSamplingStopParams, ctx)
|
| 693 |
+
|
| 694 |
+
/**
|
| 695 |
+
* \brief Stop PC sampling.
|
| 696 |
+
*
|
| 697 |
+
* User can collect PC Sampling data for user-defined range specified by Start/Stop APIs.
|
| 698 |
+
* This API can be used to mark end of range. Set configuration option
|
| 699 |
+
* \brief CUPTI_PC_SAMPLING_CONFIGURATION_ATTR_TYPE_ENABLE_START_STOP_CONTROL to use this API.
|
| 700 |
+
*
|
| 701 |
+
* \param pParams A pointer to \ref CUpti_PCSamplingStopParams
|
| 702 |
+
*
|
| 703 |
+
* \retval CUPTI_SUCCESS
|
| 704 |
+
* \retval CUPTI_ERROR_INVALID_OPERATION if this API is called with
|
| 705 |
+
* incorrect PC Sampling configuration.
|
| 706 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if any \p pParams is not valid
|
| 707 |
+
* \retval CUPTI_ERROR_NOT_SUPPORTED indicates that the system/device
|
| 708 |
+
* does not support the API
|
| 709 |
+
*/
|
| 710 |
+
CUptiResult CUPTIAPI cuptiPCSamplingStop(CUpti_PCSamplingStopParams *pParams);
|
| 711 |
+
|
| 712 |
+
/**
|
| 713 |
+
* \brief Params for cuptiPCSamplingGetNumStallReasons
|
| 714 |
+
*/
|
| 715 |
+
typedef struct
|
| 716 |
+
{
|
| 717 |
+
/**
|
| 718 |
+
* [w] Size of the data structure i.e. CUpti_PCSamplingGetNumStallReasonsParamsSize
|
| 719 |
+
* CUPTI client should set the size of the structure. It will be used in CUPTI to check what fields are
|
| 720 |
+
* available in the structure. Used to preserve backward compatibility.
|
| 721 |
+
*/
|
| 722 |
+
size_t size;
|
| 723 |
+
/**
|
| 724 |
+
* [w] Assign to NULL
|
| 725 |
+
*/
|
| 726 |
+
void* pPriv;
|
| 727 |
+
/**
|
| 728 |
+
* [w] CUcontext
|
| 729 |
+
*/
|
| 730 |
+
CUcontext ctx;
|
| 731 |
+
/**
|
| 732 |
+
* [r] Number of stall reasons
|
| 733 |
+
*/
|
| 734 |
+
size_t *numStallReasons;
|
| 735 |
+
} CUpti_PCSamplingGetNumStallReasonsParams;
|
| 736 |
+
#define CUpti_PCSamplingGetNumStallReasonsParamsSize CUPTI_PCSAMPLING_STRUCT_SIZE(CUpti_PCSamplingGetNumStallReasonsParams, numStallReasons)
|
| 737 |
+
|
| 738 |
+
/**
|
| 739 |
+
* \brief Get PC sampling stall reason count.
|
| 740 |
+
*
|
| 741 |
+
* \param pParams A pointer to \ref CUpti_PCSamplingGetNumStallReasonsParams
|
| 742 |
+
*
|
| 743 |
+
* \retval CUPTI_SUCCESS
|
| 744 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if any \p pParams is not valid
|
| 745 |
+
* \retval CUPTI_ERROR_NOT_SUPPORTED indicates that the system/device
|
| 746 |
+
* does not support the API
|
| 747 |
+
*/
|
| 748 |
+
CUptiResult CUPTIAPI cuptiPCSamplingGetNumStallReasons(CUpti_PCSamplingGetNumStallReasonsParams *pParams);
|
| 749 |
+
|
| 750 |
+
/**
|
| 751 |
+
* \brief Params for cuptiPCSamplingGetStallReasons
|
| 752 |
+
*/
|
| 753 |
+
typedef struct
|
| 754 |
+
{
|
| 755 |
+
/**
|
| 756 |
+
* [w] Size of the data structure i.e. CUpti_PCSamplingGetStallReasonsParamsSize
|
| 757 |
+
* CUPTI client should set the size of the structure. It will be used in CUPTI to check what fields are
|
| 758 |
+
* available in the structure. Used to preserve backward compatibility.
|
| 759 |
+
*/
|
| 760 |
+
size_t size;
|
| 761 |
+
/**
|
| 762 |
+
* [w] Assign to NULL
|
| 763 |
+
*/
|
| 764 |
+
void* pPriv;
|
| 765 |
+
/**
|
| 766 |
+
* [w] CUcontext
|
| 767 |
+
*/
|
| 768 |
+
CUcontext ctx;
|
| 769 |
+
/**
|
| 770 |
+
* [w] Number of stall reasons
|
| 771 |
+
*/
|
| 772 |
+
size_t numStallReasons;
|
| 773 |
+
/**
|
| 774 |
+
* [r] Stall reason index
|
| 775 |
+
*/
|
| 776 |
+
uint32_t *stallReasonIndex;
|
| 777 |
+
/**
|
| 778 |
+
* [r] Stall reasons name
|
| 779 |
+
*/
|
| 780 |
+
char **stallReasons;
|
| 781 |
+
} CUpti_PCSamplingGetStallReasonsParams;
|
| 782 |
+
#define CUpti_PCSamplingGetStallReasonsParamsSize CUPTI_PCSAMPLING_STRUCT_SIZE(CUpti_PCSamplingGetStallReasonsParams, stallReasons)
|
| 783 |
+
|
| 784 |
+
/**
|
| 785 |
+
* \brief Get PC sampling stall reasons.
|
| 786 |
+
*
|
| 787 |
+
* \param pParams A pointer to \ref CUpti_PCSamplingGetStallReasonsParams
|
| 788 |
+
*
|
| 789 |
+
* \retval CUPTI_SUCCESS
|
| 790 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if any \p pParams is not valid
|
| 791 |
+
* \retval CUPTI_ERROR_NOT_SUPPORTED indicates that the system/device
|
| 792 |
+
* does not support the API
|
| 793 |
+
*/
|
| 794 |
+
CUptiResult CUPTIAPI cuptiPCSamplingGetStallReasons(CUpti_PCSamplingGetStallReasonsParams *pParams);
|
| 795 |
+
|
| 796 |
+
|
| 797 |
+
/**
|
| 798 |
+
* \brief Params for cuptiGetSassToSourceCorrelation
|
| 799 |
+
*/
|
| 800 |
+
typedef struct CUpti_GetSassToSourceCorrelationParams {
|
| 801 |
+
/**
|
| 802 |
+
* [w] Size of the data structure i.e. CUpti_GetSassToSourceCorrelationParamsSize
|
| 803 |
+
* CUPTI client should set the size of the structure. It will be used in CUPTI to check what fields are
|
| 804 |
+
* available in the structure. Used to preserve backward compatibility.
|
| 805 |
+
*/
|
| 806 |
+
size_t size;
|
| 807 |
+
/**
|
| 808 |
+
* [w] Pointer to cubin binary where function belongs.
|
| 809 |
+
*/
|
| 810 |
+
const void* cubin;
|
| 811 |
+
/**
|
| 812 |
+
* [w] Function name to which PC belongs.
|
| 813 |
+
*/
|
| 814 |
+
const char *functionName;
|
| 815 |
+
/**
|
| 816 |
+
* [w] Size of cubin binary.
|
| 817 |
+
*/
|
| 818 |
+
size_t cubinSize;
|
| 819 |
+
/**
|
| 820 |
+
* [r] Line number in the source code.
|
| 821 |
+
*/
|
| 822 |
+
uint32_t lineNumber;
|
| 823 |
+
/**
|
| 824 |
+
* [w] PC offset
|
| 825 |
+
*/
|
| 826 |
+
uint64_t pcOffset;
|
| 827 |
+
/**
|
| 828 |
+
* [r] Path for the source file.
|
| 829 |
+
*/
|
| 830 |
+
char *fileName;
|
| 831 |
+
/**
|
| 832 |
+
* [r] Path for the directory of source file.
|
| 833 |
+
*/
|
| 834 |
+
char *dirName;
|
| 835 |
+
} CUpti_GetSassToSourceCorrelationParams;
|
| 836 |
+
|
| 837 |
+
#define CUpti_GetSassToSourceCorrelationParamsSize CUPTI_PCSAMPLING_STRUCT_SIZE(CUpti_GetSassToSourceCorrelationParams, dirName)
|
| 838 |
+
|
| 839 |
+
/**
|
| 840 |
+
* \brief SASS to Source correlation.
|
| 841 |
+
*
|
| 842 |
+
* \param pParams A pointer to \ref CUpti_GetSassToSourceCorrelationParams
|
| 843 |
+
*
|
| 844 |
+
* It is expected from user to free allocated memory for fileName and dirName after use.
|
| 845 |
+
*
|
| 846 |
+
* \retval CUPTI_SUCCESS
|
| 847 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if either of the parameters cubin or functionName
|
| 848 |
+
* is NULL or cubinSize is zero or size field is not set correctly.
|
| 849 |
+
* \retval CUPTI_ERROR_INVALID_MODULE provided cubin is invalid.
|
| 850 |
+
* \retval CUPTI_ERROR_UNKNOWN an internal error occurred.
|
| 851 |
+
* This error code is also used for cases when the function is not present in the module.
|
| 852 |
+
* A better error code will be returned in the future release.
|
| 853 |
+
*/
|
| 854 |
+
CUptiResult CUPTIAPI cuptiGetSassToSourceCorrelation(CUpti_GetSassToSourceCorrelationParams *pParams);
|
| 855 |
+
|
| 856 |
+
/**
|
| 857 |
+
* \brief Params for cuptiGetCubinCrc
|
| 858 |
+
*/
|
| 859 |
+
typedef struct {
|
| 860 |
+
/**
|
| 861 |
+
* [w] Size of configuration structure.
|
| 862 |
+
* CUPTI client should set the size of the structure. It will be used in CUPTI to check what fields are
|
| 863 |
+
* available in the structure. Used to preserve backward compatibility.
|
| 864 |
+
*/
|
| 865 |
+
size_t size;
|
| 866 |
+
/**
|
| 867 |
+
* [w] Size of cubin binary.
|
| 868 |
+
*/
|
| 869 |
+
size_t cubinSize;
|
| 870 |
+
/**
|
| 871 |
+
* [w] Pointer to cubin binary
|
| 872 |
+
*/
|
| 873 |
+
const void* cubin;
|
| 874 |
+
/**
|
| 875 |
+
* [r] Computed CRC will be stored in it.
|
| 876 |
+
*/
|
| 877 |
+
uint64_t cubinCrc;
|
| 878 |
+
} CUpti_GetCubinCrcParams;
|
| 879 |
+
#define CUpti_GetCubinCrcParamsSize CUPTI_PCSAMPLING_STRUCT_SIZE(CUpti_GetCubinCrcParams, cubinCrc)
|
| 880 |
+
|
| 881 |
+
/**
|
| 882 |
+
* \brief Get the CRC of cubin.
|
| 883 |
+
*
|
| 884 |
+
* This function returns the CRC of provided cubin binary.
|
| 885 |
+
*
|
| 886 |
+
* \param pParams A pointer to \ref CUpti_GetCubinCrcParams
|
| 887 |
+
*
|
| 888 |
+
* \retval CUPTI_SUCCESS
|
| 889 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if parameter cubin is NULL or
|
| 890 |
+
* provided cubinSize is zero or size field is not set.
|
| 891 |
+
*/
|
| 892 |
+
CUptiResult CUPTIAPI cuptiGetCubinCrc(CUpti_GetCubinCrcParams *pParams);
|
| 893 |
+
|
| 894 |
+
/**
|
| 895 |
+
* \brief Function type for callback used by CUPTI to request crc of
|
| 896 |
+
* loaded module.
|
| 897 |
+
*
|
| 898 |
+
* This callback function ask for crc of provided module in function.
|
| 899 |
+
* The provided crc will be stored in PC sampling records i.e. in the field 'cubinCrc' of the PC sampling
|
| 900 |
+
* struct CUpti_PCSamplingPCData. The CRC is uses during the offline source correlation to uniquely identify the module.
|
| 901 |
+
*
|
| 902 |
+
* \param cubin The pointer to cubin binary
|
| 903 |
+
* \param cubinSize The size of cubin binary.
|
| 904 |
+
* \param cubinCrc Returns the computed crc of cubin.
|
| 905 |
+
*/
|
| 906 |
+
typedef void (CUPTIAPI *CUpti_ComputeCrcCallbackFunc)(
|
| 907 |
+
const void* cubin,
|
| 908 |
+
size_t cubinSize,
|
| 909 |
+
uint64_t *cubinCrc);
|
| 910 |
+
|
| 911 |
+
/**
|
| 912 |
+
* \brief Register callback function with CUPTI to use
|
| 913 |
+
* your own algorithm to compute cubin crc.
|
| 914 |
+
*
|
| 915 |
+
* This function registers a callback function and it gets called
|
| 916 |
+
* from CUPTI when a CUDA module is loaded.
|
| 917 |
+
*
|
| 918 |
+
* \param funcComputeCubinCrc callback is invoked when a CUDA module
|
| 919 |
+
* is loaded.
|
| 920 |
+
*
|
| 921 |
+
* \retval CUPTI_SUCCESS
|
| 922 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p funcComputeCubinCrc is NULL.
|
| 923 |
+
*/
|
| 924 |
+
CUptiResult CUPTIAPI cuptiRegisterComputeCrcCallback(CUpti_ComputeCrcCallbackFunc funcComputeCubinCrc);
|
| 925 |
+
|
| 926 |
+
/** @} */ /* END CUPTI_PCSAMPLING_API */
|
| 927 |
+
|
| 928 |
+
#if defined(__GNUC__) && defined(CUPTI_LIB)
|
| 929 |
+
#pragma GCC visibility pop
|
| 930 |
+
#endif
|
| 931 |
+
|
| 932 |
+
#if defined(__cplusplus)
|
| 933 |
+
}
|
| 934 |
+
#endif
|
| 935 |
+
|
| 936 |
+
#endif /*_CUPTI_PCSAMPLING_H_*/
|
lib/python3.12/site-packages/nvidia/cuda_cupti/include/cupti_pcsampling_util.h
ADDED
|
@@ -0,0 +1,402 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#if !defined(_CUPTI_PCSAMPLING_UTIL_H_)
|
| 2 |
+
#define _CUPTI_PCSAMPLING_UTIL_H_
|
| 3 |
+
|
| 4 |
+
#include <cupti_pcsampling.h>
|
| 5 |
+
#include <fstream>
|
| 6 |
+
|
| 7 |
+
#include <cupti_common.h>
|
| 8 |
+
|
| 9 |
+
#ifndef CUPTI_UTIL_STRUCT_SIZE
|
| 10 |
+
#define CUPTI_UTIL_STRUCT_SIZE(type_, lastfield_) (offsetof(type_, lastfield_) + sizeof(((type_*)0)->lastfield_))
|
| 11 |
+
#endif
|
| 12 |
+
|
| 13 |
+
#ifndef CHECK_PC_SAMPLING_STRUCT_FIELD_EXISTS
|
| 14 |
+
#define CHECK_PC_SAMPLING_STRUCT_FIELD_EXISTS(type, member, structSize) \
|
| 15 |
+
(offsetof(type, member) < structSize)
|
| 16 |
+
#endif
|
| 17 |
+
|
| 18 |
+
#if defined(__cplusplus)
|
| 19 |
+
extern "C" {
|
| 20 |
+
#endif
|
| 21 |
+
|
| 22 |
+
#if defined(__GNUC__)
|
| 23 |
+
#pragma GCC visibility push(default)
|
| 24 |
+
#endif
|
| 25 |
+
|
| 26 |
+
namespace CUPTI { namespace PcSamplingUtil {
|
| 27 |
+
|
| 28 |
+
/**
|
| 29 |
+
* \defgroup CUPTI_PCSAMPLING_UTILITY CUPTI PC Sampling Utility API
|
| 30 |
+
* Functions, types, and enums that implement the CUPTI PC Sampling Utility API.
|
| 31 |
+
* @{
|
| 32 |
+
*/
|
| 33 |
+
|
| 34 |
+
/**
|
| 35 |
+
* \brief Header info will be stored in file.
|
| 36 |
+
*/
|
| 37 |
+
typedef struct PACKED_ALIGNMENT {
|
| 38 |
+
/**
|
| 39 |
+
* Version of file format.
|
| 40 |
+
*/
|
| 41 |
+
uint32_t version;
|
| 42 |
+
/**
|
| 43 |
+
* Total number of buffers present in the file.
|
| 44 |
+
*/
|
| 45 |
+
uint32_t totalBuffers;
|
| 46 |
+
} Header;
|
| 47 |
+
|
| 48 |
+
/**
|
| 49 |
+
* \brief BufferInfo will be stored in the file for every buffer
|
| 50 |
+
* i.e for every call of UtilDumpPcSamplingBufferInFile() API.
|
| 51 |
+
*/
|
| 52 |
+
typedef struct PACKED_ALIGNMENT {
|
| 53 |
+
/**
|
| 54 |
+
* Total number of PC records.
|
| 55 |
+
*/
|
| 56 |
+
uint64_t recordCount;
|
| 57 |
+
/**
|
| 58 |
+
* Count of all stall reasons supported on the GPU
|
| 59 |
+
*/
|
| 60 |
+
size_t numStallReasons;
|
| 61 |
+
/**
|
| 62 |
+
* Total number of stall reasons in single record.
|
| 63 |
+
*/
|
| 64 |
+
uint64_t numSelectedStallReasons;
|
| 65 |
+
/**
|
| 66 |
+
* Buffer size in Bytes.
|
| 67 |
+
*/
|
| 68 |
+
uint64_t bufferByteSize;
|
| 69 |
+
} BufferInfo;
|
| 70 |
+
|
| 71 |
+
/**
|
| 72 |
+
* \brief All available stall reasons name and respective indexes
|
| 73 |
+
* will be stored in it.
|
| 74 |
+
*/
|
| 75 |
+
typedef struct PACKED_ALIGNMENT {
|
| 76 |
+
/**
|
| 77 |
+
* Number of all available stall reasons
|
| 78 |
+
*/
|
| 79 |
+
size_t numStallReasons;
|
| 80 |
+
/**
|
| 81 |
+
* Stall reasons names of all available stall reasons
|
| 82 |
+
*/
|
| 83 |
+
char **stallReasons;
|
| 84 |
+
/**
|
| 85 |
+
* Stall reason index of all available stall reasons
|
| 86 |
+
*/
|
| 87 |
+
uint32_t *stallReasonIndex;
|
| 88 |
+
} PcSamplingStallReasons;
|
| 89 |
+
|
| 90 |
+
/**
|
| 91 |
+
* \brief CUPTI PC sampling buffer types.
|
| 92 |
+
*
|
| 93 |
+
*/
|
| 94 |
+
typedef enum {
|
| 95 |
+
/**
|
| 96 |
+
* Invalid buffer type.
|
| 97 |
+
*/
|
| 98 |
+
PC_SAMPLING_BUFFER_INVALID = 0,
|
| 99 |
+
/**
|
| 100 |
+
* Refers to CUpti_PCSamplingData buffer.
|
| 101 |
+
*/
|
| 102 |
+
PC_SAMPLING_BUFFER_PC_TO_COUNTER_DATA = 1
|
| 103 |
+
} PcSamplingBufferType;
|
| 104 |
+
|
| 105 |
+
/**
|
| 106 |
+
* \brief CUPTI PC sampling utility API result codes.
|
| 107 |
+
*
|
| 108 |
+
* Error and result codes returned by CUPTI PC sampling utility API.
|
| 109 |
+
*/
|
| 110 |
+
typedef enum {
|
| 111 |
+
/**
|
| 112 |
+
* No error
|
| 113 |
+
*/
|
| 114 |
+
CUPTI_UTIL_SUCCESS = 0,
|
| 115 |
+
/**
|
| 116 |
+
* One or more of the parameters are invalid.
|
| 117 |
+
*/
|
| 118 |
+
CUPTI_UTIL_ERROR_INVALID_PARAMETER = 1,
|
| 119 |
+
/**
|
| 120 |
+
* Unable to create a new file
|
| 121 |
+
*/
|
| 122 |
+
CUPTI_UTIL_ERROR_UNABLE_TO_CREATE_FILE = 2,
|
| 123 |
+
/**
|
| 124 |
+
* Unable to open a file
|
| 125 |
+
*/
|
| 126 |
+
CUPTI_UTIL_ERROR_UNABLE_TO_OPEN_FILE = 3,
|
| 127 |
+
/**
|
| 128 |
+
* Read or write operation failed
|
| 129 |
+
*/
|
| 130 |
+
CUPTI_UTIL_ERROR_READ_WRITE_OPERATION_FAILED = 4,
|
| 131 |
+
/**
|
| 132 |
+
* Provided file handle is corrupted.
|
| 133 |
+
*/
|
| 134 |
+
CUPTI_UTIL_ERROR_FILE_HANDLE_CORRUPTED = 5,
|
| 135 |
+
/**
|
| 136 |
+
* seek operation failed.
|
| 137 |
+
*/
|
| 138 |
+
CUPTI_UTIL_ERROR_SEEK_OPERATION_FAILED = 6,
|
| 139 |
+
/**
|
| 140 |
+
* Unable to allocate enough memory to perform the requested
|
| 141 |
+
* operation.
|
| 142 |
+
*/
|
| 143 |
+
CUPTI_UTIL_ERROR_OUT_OF_MEMORY = 7,
|
| 144 |
+
/**
|
| 145 |
+
* An unknown internal error has occurred.
|
| 146 |
+
*/
|
| 147 |
+
CUPTI_UTIL_ERROR_UNKNOWN = 999,
|
| 148 |
+
CUPTI_UTIL_ERROR_FORCE_INT = 0x7fffffff
|
| 149 |
+
} CUptiUtilResult;
|
| 150 |
+
|
| 151 |
+
/**
|
| 152 |
+
* \brief Params for \ref CuptiUtilPutPcSampData
|
| 153 |
+
*/
|
| 154 |
+
typedef struct {
|
| 155 |
+
/**
|
| 156 |
+
* Size of the data structure i.e. CUpti_PCSamplingDisableParamsSize
|
| 157 |
+
* CUPTI client should set the size of the structure. It will be used in CUPTI to check what fields are
|
| 158 |
+
* available in the structure. Used to preserve backward compatibility.
|
| 159 |
+
*/
|
| 160 |
+
size_t size;
|
| 161 |
+
/**
|
| 162 |
+
* Type of buffer to store in file
|
| 163 |
+
*/
|
| 164 |
+
PcSamplingBufferType bufferType;
|
| 165 |
+
/**
|
| 166 |
+
* PC sampling buffer.
|
| 167 |
+
*/
|
| 168 |
+
void *pSamplingData;
|
| 169 |
+
/**
|
| 170 |
+
* Number of configured attributes
|
| 171 |
+
*/
|
| 172 |
+
size_t numAttributes;
|
| 173 |
+
/**
|
| 174 |
+
* Refer \ref CUpti_PCSamplingConfigurationInfo
|
| 175 |
+
* It is expected to provide configuration details of at least
|
| 176 |
+
* CUPTI_PC_SAMPLING_CONFIGURATION_ATTR_TYPE_STALL_REASON attribute.
|
| 177 |
+
*/
|
| 178 |
+
CUpti_PCSamplingConfigurationInfo *pPCSamplingConfigurationInfo;
|
| 179 |
+
/**
|
| 180 |
+
* Refer \ref PcSamplingStallReasons.
|
| 181 |
+
*/
|
| 182 |
+
PcSamplingStallReasons *pPcSamplingStallReasons;
|
| 183 |
+
/**
|
| 184 |
+
* File name to store buffer into it.
|
| 185 |
+
*/
|
| 186 |
+
const char* fileName;
|
| 187 |
+
} CUptiUtil_PutPcSampDataParams;
|
| 188 |
+
#define CUptiUtil_PutPcSampDataParamsSize CUPTI_UTIL_STRUCT_SIZE(CUptiUtil_PutPcSampDataParams, fileName)
|
| 189 |
+
|
| 190 |
+
/**
|
| 191 |
+
* \brief Dump PC sampling data into the file.
|
| 192 |
+
*
|
| 193 |
+
* This API can be called multiple times.
|
| 194 |
+
* It will append buffer in the file.
|
| 195 |
+
* For every buffer it will store BufferInfo
|
| 196 |
+
* so that before retrieving data it will help to allocate buffer
|
| 197 |
+
* to store retrieved data.
|
| 198 |
+
* This API creates file if file does not present.
|
| 199 |
+
* If stallReasonIndex or stallReasons pointer of \ref CUptiUtil_PutPcSampDataParams is NULL
|
| 200 |
+
* then stall reasons data will not be stored in file.
|
| 201 |
+
* It is expected to store all available stall reason data at least once to refer it during
|
| 202 |
+
* offline correlation.
|
| 203 |
+
*
|
| 204 |
+
* \retval CUPTI_UTIL_SUCCESS
|
| 205 |
+
* \retval CUPTI_UTIL_ERROR_INVALID_PARAMETER error out if buffer type is invalid
|
| 206 |
+
* or if either of pSamplingData, pParams pointer is NULL or stall reason configuration details not provided
|
| 207 |
+
* or filename is empty.
|
| 208 |
+
* \retval CUPTI_UTIL_ERROR_UNABLE_TO_CREATE_FILE
|
| 209 |
+
* \retval CUPTI_UTIL_ERROR_UNABLE_TO_OPEN_FILE
|
| 210 |
+
* \retval CUPTI_UTIL_ERROR_READ_WRITE_OPERATION_FAILED
|
| 211 |
+
*/
|
| 212 |
+
CUptiUtilResult CUPTIUTILAPI CuptiUtilPutPcSampData(CUptiUtil_PutPcSampDataParams *pParams);
|
| 213 |
+
|
| 214 |
+
/**
|
| 215 |
+
* \brief Params for \ref CuptiUtilGetHeaderData
|
| 216 |
+
*/
|
| 217 |
+
typedef struct {
|
| 218 |
+
/**
|
| 219 |
+
* Size of the data structure i.e. CUpti_PCSamplingDisableParamsSize
|
| 220 |
+
* CUPTI client should set the size of the structure. It will be used in CUPTI to check what fields are
|
| 221 |
+
* available in the structure. Used to preserve backward compatibility.
|
| 222 |
+
*/
|
| 223 |
+
size_t size;
|
| 224 |
+
/**
|
| 225 |
+
* File handle.
|
| 226 |
+
*/
|
| 227 |
+
std::ifstream *fileHandler;
|
| 228 |
+
/**
|
| 229 |
+
* Header Info.
|
| 230 |
+
*/
|
| 231 |
+
Header headerInfo;
|
| 232 |
+
|
| 233 |
+
} CUptiUtil_GetHeaderDataParams;
|
| 234 |
+
#define CUptiUtil_GetHeaderDataParamsSize CUPTI_UTIL_STRUCT_SIZE(CUptiUtil_GetHeaderDataParams, headerInfo)
|
| 235 |
+
|
| 236 |
+
/**
|
| 237 |
+
* \brief Get header data of file.
|
| 238 |
+
*
|
| 239 |
+
* This API must be called once initially while retrieving data from file.
|
| 240 |
+
* \ref Header structure, it gives info about total number
|
| 241 |
+
* of buffers present in the file.
|
| 242 |
+
*
|
| 243 |
+
* \retval CUPTI_UTIL_SUCCESS
|
| 244 |
+
* \retval CUPTI_UTIL_ERROR_INVALID_PARAMETER error out if either of pParam or fileHandle is NULL or param struct size is incorrect.
|
| 245 |
+
* \retval CUPTI_UTIL_ERROR_FILE_HANDLE_CORRUPTED file handle is not in good state to read data from file
|
| 246 |
+
* \retval CUPTI_UTIL_ERROR_READ_WRITE_OPERATION_FAILED failed to read data from file.
|
| 247 |
+
*/
|
| 248 |
+
CUptiUtilResult CUPTIUTILAPI CuptiUtilGetHeaderData(CUptiUtil_GetHeaderDataParams *pParams);
|
| 249 |
+
|
| 250 |
+
/**
|
| 251 |
+
* \brief Params for \ref CuptiUtilGetBufferInfo
|
| 252 |
+
*/
|
| 253 |
+
typedef struct {
|
| 254 |
+
/**
|
| 255 |
+
* Size of the data structure i.e. CUpti_PCSamplingDisableParamsSize
|
| 256 |
+
* CUPTI client should set the size of the structure. It will be used in CUPTI to check what fields are
|
| 257 |
+
* available in the structure. Used to preserve backward compatibility.
|
| 258 |
+
*/
|
| 259 |
+
size_t size;
|
| 260 |
+
/**
|
| 261 |
+
* File handle.
|
| 262 |
+
*/
|
| 263 |
+
std::ifstream *fileHandler;
|
| 264 |
+
/**
|
| 265 |
+
* Buffer Info.
|
| 266 |
+
*/
|
| 267 |
+
BufferInfo bufferInfoData;
|
| 268 |
+
} CUptiUtil_GetBufferInfoParams;
|
| 269 |
+
#define CUptiUtil_GetBufferInfoParamsSize CUPTI_UTIL_STRUCT_SIZE(CUptiUtil_GetBufferInfoParams, bufferInfoData)
|
| 270 |
+
|
| 271 |
+
/**
|
| 272 |
+
* \brief Get buffer info data of file.
|
| 273 |
+
*
|
| 274 |
+
* This API must be called every time before calling CuptiUtilGetPcSampData API.
|
| 275 |
+
* \ref BufferInfo structure, it gives info about recordCount and stallReasonCount
|
| 276 |
+
* of every record in the buffer. This will help to allocate exact buffer to retrieve data into it.
|
| 277 |
+
*
|
| 278 |
+
* \retval CUPTI_UTIL_SUCCESS
|
| 279 |
+
* \retval CUPTI_UTIL_ERROR_INVALID_PARAMETER error out if either of pParam or fileHandle is NULL or param struct size is incorrect.
|
| 280 |
+
* \retval CUPTI_UTIL_ERROR_FILE_HANDLE_CORRUPTED file handle is not in good state to read data from file.
|
| 281 |
+
* \retval CUPTI_UTIL_ERROR_READ_WRITE_OPERATION_FAILED failed to read data from file.
|
| 282 |
+
*/
|
| 283 |
+
CUptiUtilResult CUPTIUTILAPI CuptiUtilGetBufferInfo(CUptiUtil_GetBufferInfoParams *pParams);
|
| 284 |
+
|
| 285 |
+
/**
|
| 286 |
+
* \brief Params for \ref CuptiUtilGetPcSampData
|
| 287 |
+
*/
|
| 288 |
+
typedef struct {
|
| 289 |
+
/**
|
| 290 |
+
* Size of the data structure i.e. CUpti_PCSamplingDisableParamsSize
|
| 291 |
+
* CUPTI client should set the size of the structure. It will be used in CUPTI to check what fields are
|
| 292 |
+
* available in the structure. Used to preserve backward compatibility.
|
| 293 |
+
*/
|
| 294 |
+
size_t size;
|
| 295 |
+
/**
|
| 296 |
+
* File handle.
|
| 297 |
+
*/
|
| 298 |
+
std::ifstream *fileHandler;
|
| 299 |
+
/**
|
| 300 |
+
* Type of buffer to store in file
|
| 301 |
+
*/
|
| 302 |
+
PcSamplingBufferType bufferType;
|
| 303 |
+
/**
|
| 304 |
+
* Pointer to collected buffer info using \ref CuptiUtilGetBufferInfo
|
| 305 |
+
*/
|
| 306 |
+
BufferInfo *pBufferInfoData;
|
| 307 |
+
/**
|
| 308 |
+
* Pointer to allocated memory to store retrieved data from file.
|
| 309 |
+
*/
|
| 310 |
+
void *pSamplingData;
|
| 311 |
+
/**
|
| 312 |
+
* Number of configuration attributes
|
| 313 |
+
*/
|
| 314 |
+
size_t numAttributes;
|
| 315 |
+
/**
|
| 316 |
+
* Refer \ref CUpti_PCSamplingConfigurationInfo
|
| 317 |
+
*/
|
| 318 |
+
CUpti_PCSamplingConfigurationInfo *pPCSamplingConfigurationInfo;
|
| 319 |
+
/**
|
| 320 |
+
* Refer \ref PcSamplingStallReasons.
|
| 321 |
+
* For stallReasons field of \ref PcSamplingStallReasons it is expected to
|
| 322 |
+
* allocate memory for each string element of array.
|
| 323 |
+
*/
|
| 324 |
+
PcSamplingStallReasons *pPcSamplingStallReasons;
|
| 325 |
+
} CUptiUtil_GetPcSampDataParams;
|
| 326 |
+
#define CUptiUtil_GetPcSampDataParamsSize CUPTI_UTIL_STRUCT_SIZE(CUptiUtil_GetPcSampDataParams, pPcSamplingStallReasons)
|
| 327 |
+
|
| 328 |
+
/**
|
| 329 |
+
* \brief Retrieve PC sampling data from file into allocated buffer.
|
| 330 |
+
*
|
| 331 |
+
* This API must be called after CuptiUtilGetBufferInfo API.
|
| 332 |
+
* It will retrieve data from file into allocated buffer.
|
| 333 |
+
*
|
| 334 |
+
* \retval CUPTI_UTIL_SUCCESS
|
| 335 |
+
* \retval CUPTI_UTIL_ERROR_INVALID_PARAMETER error out if buffer type is invalid
|
| 336 |
+
* or if either of pSampData, pParams is NULL. If pPcSamplingStallReasons is not NULL then
|
| 337 |
+
* error out if either of stallReasonIndex, stallReasons or stallReasons array element pointer is NULL.
|
| 338 |
+
* or filename is empty.
|
| 339 |
+
* \retval CUPTI_UTIL_ERROR_READ_WRITE_OPERATION_FAILED
|
| 340 |
+
* \retval CUPTI_UTIL_ERROR_FILE_HANDLE_CORRUPTED file handle is not in good state to read data from file.
|
| 341 |
+
*/
|
| 342 |
+
CUptiUtilResult CUPTIUTILAPI CuptiUtilGetPcSampData(CUptiUtil_GetPcSampDataParams *pParams);
|
| 343 |
+
|
| 344 |
+
/**
|
| 345 |
+
* \brief Params for \ref CuptiUtilMergePcSampData
|
| 346 |
+
*/
|
| 347 |
+
typedef struct
|
| 348 |
+
{
|
| 349 |
+
/**
|
| 350 |
+
* Size of the data structure i.e. CUpti_PCSamplingDisableParamsSize
|
| 351 |
+
* CUPTI client should set the size of the structure. It will be used in CUPTI to check what fields are
|
| 352 |
+
* available in the structure. Used to preserve backward compatibility.
|
| 353 |
+
*/
|
| 354 |
+
size_t size;
|
| 355 |
+
/**
|
| 356 |
+
* Number of buffers to merge.
|
| 357 |
+
*/
|
| 358 |
+
size_t numberOfBuffers;
|
| 359 |
+
/**
|
| 360 |
+
* Pointer to array of buffers to merge
|
| 361 |
+
*/
|
| 362 |
+
CUpti_PCSamplingData *PcSampDataBuffer;
|
| 363 |
+
/**
|
| 364 |
+
* Pointer to array of merged buffers as per the range id.
|
| 365 |
+
*/
|
| 366 |
+
CUpti_PCSamplingData **MergedPcSampDataBuffers;
|
| 367 |
+
/**
|
| 368 |
+
* Number of merged buffers.
|
| 369 |
+
*/
|
| 370 |
+
size_t *numMergedBuffer;
|
| 371 |
+
} CUptiUtil_MergePcSampDataParams;
|
| 372 |
+
#define CUptiUtil_MergePcSampDataParamsSize CUPTI_UTIL_STRUCT_SIZE(CUptiUtil_MergePcSampDataParams, numMergedBuffer)
|
| 373 |
+
|
| 374 |
+
/**
|
| 375 |
+
* \brief Merge PC sampling data range id wise.
|
| 376 |
+
*
|
| 377 |
+
* This API merge PC sampling data range id wise.
|
| 378 |
+
* It allocates memory for merged data and fill data in it
|
| 379 |
+
* and provide buffer pointer in MergedPcSampDataBuffers field.
|
| 380 |
+
* It is expected from user to free merge data buffers after use.
|
| 381 |
+
*
|
| 382 |
+
* \retval CUPTI_UTIL_SUCCESS
|
| 383 |
+
* \retval CUPTI_UTIL_ERROR_INVALID_PARAMETER error out if param struct size is invalid
|
| 384 |
+
* or count of buffers to merge is invalid i.e less than 1
|
| 385 |
+
* or either of PcSampDataBuffer, MergedPcSampDataBuffers, numMergedBuffer is NULL
|
| 386 |
+
* \retval CUPTI_UTIL_ERROR_OUT_OF_MEMORY Unable to allocate memory for merged buffer.
|
| 387 |
+
*/
|
| 388 |
+
CUptiUtilResult CUPTIUTILAPI CuptiUtilMergePcSampData(CUptiUtil_MergePcSampDataParams *pParams);
|
| 389 |
+
|
| 390 |
+
/** @} */ /* END CUPTI_PCSAMPLING_UTILITY */
|
| 391 |
+
|
| 392 |
+
} }
|
| 393 |
+
|
| 394 |
+
#if defined(__GNUC__)
|
| 395 |
+
#pragma GCC visibility pop
|
| 396 |
+
#endif
|
| 397 |
+
|
| 398 |
+
#if defined(__cplusplus)
|
| 399 |
+
}
|
| 400 |
+
#endif
|
| 401 |
+
|
| 402 |
+
#endif
|
lib/python3.12/site-packages/nvidia/cuda_cupti/include/cupti_profiler_target.h
ADDED
|
@@ -0,0 +1,601 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
* Copyright 2011-2023 NVIDIA Corporation. All rights reserved.
|
| 3 |
+
*
|
| 4 |
+
* NOTICE TO LICENSEE:
|
| 5 |
+
*
|
| 6 |
+
* This source code and/or documentation ("Licensed Deliverables") are
|
| 7 |
+
* subject to NVIDIA intellectual property rights under U.S. and
|
| 8 |
+
* international Copyright laws.
|
| 9 |
+
*
|
| 10 |
+
* These Licensed Deliverables contained herein is PROPRIETARY and
|
| 11 |
+
* CONFIDENTIAL to NVIDIA and is being provided under the terms and
|
| 12 |
+
* conditions of a form of NVIDIA software license agreement by and
|
| 13 |
+
* between NVIDIA and Licensee ("License Agreement") or electronically
|
| 14 |
+
* accepted by Licensee. Notwithstanding any terms or conditions to
|
| 15 |
+
* the contrary in the License Agreement, reproduction or disclosure
|
| 16 |
+
* of the Licensed Deliverables to any third party without the express
|
| 17 |
+
* written consent of NVIDIA is prohibited.
|
| 18 |
+
*
|
| 19 |
+
* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
|
| 20 |
+
* LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
|
| 21 |
+
* SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. IT IS
|
| 22 |
+
* PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
|
| 23 |
+
* NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
|
| 24 |
+
* DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
|
| 25 |
+
* NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
|
| 26 |
+
* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
|
| 27 |
+
* LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
|
| 28 |
+
* SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
|
| 29 |
+
* DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
| 30 |
+
* WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
| 31 |
+
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
| 32 |
+
* OF THESE LICENSED DELIVERABLES.
|
| 33 |
+
*
|
| 34 |
+
* U.S. Government End Users. These Licensed Deliverables are a
|
| 35 |
+
* "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
|
| 36 |
+
* 1995), consisting of "commercial computer software" and "commercial
|
| 37 |
+
* computer software documentation" as such terms are used in 48
|
| 38 |
+
* C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
|
| 39 |
+
* only as a commercial end item. Consistent with 48 C.F.R.12.212 and
|
| 40 |
+
* 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
|
| 41 |
+
* U.S. Government End Users acquire the Licensed Deliverables with
|
| 42 |
+
* only those rights set forth herein.
|
| 43 |
+
*
|
| 44 |
+
* Any use of the Licensed Deliverables in individual and commercial
|
| 45 |
+
* software must include, in the user documentation and internal
|
| 46 |
+
* comments to the code, the above Disclaimer and U.S. Government End
|
| 47 |
+
* Users Notice.
|
| 48 |
+
*/
|
| 49 |
+
|
| 50 |
+
#if !defined(_CUPTI_PROFILER_TARGET_H_)
|
| 51 |
+
#define _CUPTI_PROFILER_TARGET_H_
|
| 52 |
+
|
| 53 |
+
#include <cuda.h>
|
| 54 |
+
#include <cupti_result.h>
|
| 55 |
+
#include <stddef.h>
|
| 56 |
+
#include <stdint.h>
|
| 57 |
+
|
| 58 |
+
#ifdef __cplusplus
|
| 59 |
+
extern "C" {
|
| 60 |
+
#endif
|
| 61 |
+
|
| 62 |
+
#if defined(__GNUC__) && defined(CUPTI_LIB)
|
| 63 |
+
#pragma GCC visibility push(default)
|
| 64 |
+
#endif
|
| 65 |
+
|
| 66 |
+
/**
|
| 67 |
+
* \defgroup CUPTI_PROFILER_API CUPTI Profiling API
|
| 68 |
+
* Functions, types, and enums that implement the CUPTI Profiling API.
|
| 69 |
+
* @{
|
| 70 |
+
*/
|
| 71 |
+
#ifndef CUPTI_PROFILER_STRUCT_SIZE
|
| 72 |
+
#define CUPTI_PROFILER_STRUCT_SIZE(type_, lastfield_) (offsetof(type_, lastfield_) + sizeof(((type_*)0)->lastfield_))
|
| 73 |
+
#endif
|
| 74 |
+
|
| 75 |
+
/**
|
| 76 |
+
* \brief Profiler range attribute
|
| 77 |
+
*
|
| 78 |
+
* A metric enabled in the session's configuration is collected separately per unique range-stack in the pass.
|
| 79 |
+
* This is an attribute to collect metrics around each kernel in a profiling session or in an user defined range.
|
| 80 |
+
*/
|
| 81 |
+
typedef enum
|
| 82 |
+
{
|
| 83 |
+
/**
|
| 84 |
+
* Invalid value
|
| 85 |
+
*/
|
| 86 |
+
CUPTI_Range_INVALID,
|
| 87 |
+
/**
|
| 88 |
+
* Ranges are auto defined around each kernel in a profiling session
|
| 89 |
+
*/
|
| 90 |
+
CUPTI_AutoRange,
|
| 91 |
+
/**
|
| 92 |
+
* A range in which metric data to be collected is defined by the user
|
| 93 |
+
*/
|
| 94 |
+
CUPTI_UserRange,
|
| 95 |
+
/**
|
| 96 |
+
* Range count
|
| 97 |
+
*/
|
| 98 |
+
CUPTI_Range_COUNT,
|
| 99 |
+
} CUpti_ProfilerRange;
|
| 100 |
+
|
| 101 |
+
/**
|
| 102 |
+
* \brief Profiler replay attribute
|
| 103 |
+
*
|
| 104 |
+
* For metrics which require multipass collection, a replay of the GPU kernel(s) is required.
|
| 105 |
+
* This is an attribute which specify how the replay of the kernel(s) to be measured is done.
|
| 106 |
+
*/
|
| 107 |
+
typedef enum
|
| 108 |
+
{
|
| 109 |
+
/**
|
| 110 |
+
* Invalid Value
|
| 111 |
+
*/
|
| 112 |
+
CUPTI_Replay_INVALID,
|
| 113 |
+
/**
|
| 114 |
+
* Replay is done by CUPTI user around the process
|
| 115 |
+
*/
|
| 116 |
+
CUPTI_ApplicationReplay,
|
| 117 |
+
/**
|
| 118 |
+
* Replay is done around kernel implicitly by CUPTI
|
| 119 |
+
*/
|
| 120 |
+
CUPTI_KernelReplay,
|
| 121 |
+
/**
|
| 122 |
+
* Replay is done by CUPTI user within a process
|
| 123 |
+
*/
|
| 124 |
+
CUPTI_UserReplay,
|
| 125 |
+
/**
|
| 126 |
+
* Replay count
|
| 127 |
+
*/
|
| 128 |
+
CUPTI_Replay_COUNT,
|
| 129 |
+
} CUpti_ProfilerReplayMode;
|
| 130 |
+
|
| 131 |
+
/**
|
| 132 |
+
* \brief Default parameter for cuptiProfilerInitialize
|
| 133 |
+
*/
|
| 134 |
+
typedef struct CUpti_Profiler_Initialize_Params
|
| 135 |
+
{
|
| 136 |
+
size_t structSize; //!< [in] CUpti_Profiler_Initialize_Params_STRUCT_SIZE
|
| 137 |
+
void* pPriv; //!< [in] assign to NULL
|
| 138 |
+
|
| 139 |
+
} CUpti_Profiler_Initialize_Params;
|
| 140 |
+
#define CUpti_Profiler_Initialize_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_Profiler_Initialize_Params, pPriv)
|
| 141 |
+
|
| 142 |
+
/**
|
| 143 |
+
* \brief Default parameter for cuptiProfilerDeInitialize
|
| 144 |
+
*/
|
| 145 |
+
typedef struct CUpti_Profiler_DeInitialize_Params
|
| 146 |
+
{
|
| 147 |
+
size_t structSize; //!< [in] CUpti_Profiler_DeInitialize_Params_STRUCT_SIZE
|
| 148 |
+
void* pPriv; //!< [in] assign to NULL
|
| 149 |
+
|
| 150 |
+
} CUpti_Profiler_DeInitialize_Params;
|
| 151 |
+
#define CUpti_Profiler_DeInitialize_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_Profiler_DeInitialize_Params, pPriv)
|
| 152 |
+
|
| 153 |
+
/**
|
| 154 |
+
* \brief Initializes the profiler interface
|
| 155 |
+
*
|
| 156 |
+
* Loads the required libraries in the process address space.
|
| 157 |
+
* Sets up the hooks with the CUDA driver.
|
| 158 |
+
*/
|
| 159 |
+
CUptiResult CUPTIAPI cuptiProfilerInitialize(CUpti_Profiler_Initialize_Params *pParams);
|
| 160 |
+
|
| 161 |
+
/**
|
| 162 |
+
* \brief DeInitializes the profiler interface
|
| 163 |
+
*/
|
| 164 |
+
CUptiResult CUPTIAPI cuptiProfilerDeInitialize(CUpti_Profiler_DeInitialize_Params *pParams);
|
| 165 |
+
|
| 166 |
+
/**
|
| 167 |
+
* \brief Input parameter to define the counterDataImage
|
| 168 |
+
*/
|
| 169 |
+
typedef struct CUpti_Profiler_CounterDataImageOptions
|
| 170 |
+
{
|
| 171 |
+
size_t structSize; //!< [in] CUpti_Profiler_CounterDataImageOptions_Params_STRUCT_SIZE
|
| 172 |
+
void* pPriv; //!< [in] assign to NULL
|
| 173 |
+
|
| 174 |
+
const uint8_t* pCounterDataPrefix; /**< [in] Address of CounterDataPrefix generated from NVPW_CounterDataBuilder_GetCounterDataPrefix().
|
| 175 |
+
Must be align(8).*/
|
| 176 |
+
size_t counterDataPrefixSize; //!< [in] Size of CounterDataPrefix generated from NVPW_CounterDataBuilder_GetCounterDataPrefix().
|
| 177 |
+
uint32_t maxNumRanges; //!< [in] Maximum number of ranges that can be profiled
|
| 178 |
+
uint32_t maxNumRangeTreeNodes; //!< [in] Maximum number of RangeTree nodes; must be >= maxNumRanges
|
| 179 |
+
uint32_t maxRangeNameLength; //!< [in] Maximum string length of each RangeName, including the trailing NULL character
|
| 180 |
+
} CUpti_Profiler_CounterDataImageOptions;
|
| 181 |
+
#define CUpti_Profiler_CounterDataImageOptions_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_Profiler_CounterDataImageOptions, maxRangeNameLength)
|
| 182 |
+
|
| 183 |
+
/**
|
| 184 |
+
* \brief Params for cuptiProfilerCounterDataImageCalculateSize
|
| 185 |
+
*/
|
| 186 |
+
typedef struct CUpti_Profiler_CounterDataImage_CalculateSize_Params
|
| 187 |
+
{
|
| 188 |
+
size_t structSize; //!< [in] CUpti_Profiler_CounterDataImage_CalculateSize_Params_STRUCT_SIZE
|
| 189 |
+
void* pPriv; //!< [in] assign to NULL
|
| 190 |
+
|
| 191 |
+
size_t sizeofCounterDataImageOptions; //!< [in] CUpti_Profiler_CounterDataImageOptions_STRUCT_SIZE
|
| 192 |
+
const CUpti_Profiler_CounterDataImageOptions* pOptions; //!< [in] Pointer to Counter Data Image Options
|
| 193 |
+
size_t counterDataImageSize; //!< [out]
|
| 194 |
+
} CUpti_Profiler_CounterDataImage_CalculateSize_Params;
|
| 195 |
+
#define CUpti_Profiler_CounterDataImage_CalculateSize_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_Profiler_CounterDataImage_CalculateSize_Params, counterDataImageSize)
|
| 196 |
+
|
| 197 |
+
/**
|
| 198 |
+
* \brief Params for cuptiProfilerCounterDataImageInitialize
|
| 199 |
+
*/
|
| 200 |
+
typedef struct CUpti_Profiler_CounterDataImage_Initialize_Params
|
| 201 |
+
{
|
| 202 |
+
size_t structSize; //!< [in] CUpti_Profiler_CounterDataImage_Initialize_Params_STRUCT_SIZE
|
| 203 |
+
void* pPriv; //!< [in] assign to NULL
|
| 204 |
+
|
| 205 |
+
size_t sizeofCounterDataImageOptions; //!< [in] CUpti_Profiler_CounterDataImageOptions_STRUCT_SIZE
|
| 206 |
+
const CUpti_Profiler_CounterDataImageOptions* pOptions; //!< [in] Pointer to Counter Data Image Options
|
| 207 |
+
size_t counterDataImageSize; //!< [in] Size calculated from cuptiProfilerCounterDataImageCalculateSize
|
| 208 |
+
uint8_t* pCounterDataImage; //!< [in] The buffer to be initialized.
|
| 209 |
+
} CUpti_Profiler_CounterDataImage_Initialize_Params;
|
| 210 |
+
#define CUpti_Profiler_CounterDataImage_Initialize_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_Profiler_CounterDataImage_Initialize_Params, pCounterDataImage)
|
| 211 |
+
|
| 212 |
+
/**
|
| 213 |
+
* \brief A CounterData image allocates space for values for each counter for each range.
|
| 214 |
+
*
|
| 215 |
+
* User borne the resposibility of managing the counterDataImage allocations.
|
| 216 |
+
* CounterDataPrefix contains meta data about the metrics that will be stored in counterDataImage.
|
| 217 |
+
* Use these APIs to calculate the allocation size and initialize counterData image.
|
| 218 |
+
*/
|
| 219 |
+
CUptiResult cuptiProfilerCounterDataImageCalculateSize(CUpti_Profiler_CounterDataImage_CalculateSize_Params* pParams);
|
| 220 |
+
CUptiResult cuptiProfilerCounterDataImageInitialize(CUpti_Profiler_CounterDataImage_Initialize_Params* pParams);
|
| 221 |
+
|
| 222 |
+
/**
|
| 223 |
+
* \brief Params for cuptiProfilerCounterDataImageCalculateScratchBufferSize
|
| 224 |
+
*/
|
| 225 |
+
typedef struct CUpti_Profiler_CounterDataImage_CalculateScratchBufferSize_Params
|
| 226 |
+
{
|
| 227 |
+
size_t structSize; //!< [in] CUpti_Profiler_CounterDataImage_CalculateScratchBufferSize_Params_STRUCT_SIZE
|
| 228 |
+
void* pPriv; //!< [in] assign to NULL
|
| 229 |
+
|
| 230 |
+
size_t counterDataImageSize; //!< [in] size calculated from cuptiProfilerCounterDataImageCalculateSize
|
| 231 |
+
uint8_t* pCounterDataImage; //!< [in]
|
| 232 |
+
size_t counterDataScratchBufferSize; //!< [out]
|
| 233 |
+
} CUpti_Profiler_CounterDataImage_CalculateScratchBufferSize_Params;
|
| 234 |
+
#define CUpti_Profiler_CounterDataImage_CalculateScratchBufferSize_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_Profiler_CounterDataImage_CalculateScratchBufferSize_Params, counterDataScratchBufferSize)
|
| 235 |
+
|
| 236 |
+
/**
|
| 237 |
+
* \brief Params for cuptiProfilerCounterDataImageInitializeScratchBuffer
|
| 238 |
+
*/
|
| 239 |
+
typedef struct CUpti_Profiler_CounterDataImage_InitializeScratchBuffer_Params
|
| 240 |
+
{
|
| 241 |
+
size_t structSize; //!< [in] CUpti_Profiler_CounterDataImage_InitializeScratchBuffer_Params_STRUCT_SIZE
|
| 242 |
+
void* pPriv; //!< [in] assign to NULL
|
| 243 |
+
|
| 244 |
+
size_t counterDataImageSize; //!< [in] size calculated from cuptiProfilerCounterDataImageCalculateSize
|
| 245 |
+
uint8_t* pCounterDataImage; //!< [in]
|
| 246 |
+
size_t counterDataScratchBufferSize; //!< [in] size calculated using cuptiProfilerCounterDataImageCalculateScratchBufferSize
|
| 247 |
+
uint8_t* pCounterDataScratchBuffer; //!< [in] the scratch buffer to be initialized.
|
| 248 |
+
} CUpti_Profiler_CounterDataImage_InitializeScratchBuffer_Params;
|
| 249 |
+
#define CUpti_Profiler_CounterDataImage_InitializeScratchBuffer_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_Profiler_CounterDataImage_InitializeScratchBuffer_Params, pCounterDataScratchBuffer)
|
| 250 |
+
|
| 251 |
+
/**
|
| 252 |
+
* \brief A temporary storage for CounterData image needed for internal operations
|
| 253 |
+
*
|
| 254 |
+
* Use these APIs to calculate the allocation size and initialize counterData image scratch buffer.
|
| 255 |
+
*/
|
| 256 |
+
CUptiResult cuptiProfilerCounterDataImageCalculateScratchBufferSize(CUpti_Profiler_CounterDataImage_CalculateScratchBufferSize_Params* pParams);
|
| 257 |
+
CUptiResult cuptiProfilerCounterDataImageInitializeScratchBuffer(CUpti_Profiler_CounterDataImage_InitializeScratchBuffer_Params* pParams);
|
| 258 |
+
|
| 259 |
+
/**
|
| 260 |
+
* \brief Params for cuptiProfilerBeginSession
|
| 261 |
+
*/
|
| 262 |
+
typedef struct CUpti_Profiler_BeginSession_Params
|
| 263 |
+
{
|
| 264 |
+
size_t structSize; //!< [in] CUpti_Profiler_BeginSession_Params_STRUCT_SIZE
|
| 265 |
+
void* pPriv; //!< [in] assign to NULL
|
| 266 |
+
|
| 267 |
+
CUcontext ctx; //!< [in] if NULL, the current CUcontext is used
|
| 268 |
+
size_t counterDataImageSize; //!< [in] size calculated from cuptiProfilerCounterDataImageCalculateSize
|
| 269 |
+
uint8_t* pCounterDataImage; //!< [in] address of CounterDataImage
|
| 270 |
+
size_t counterDataScratchBufferSize; //!< [in] size calculated from cuptiProfilerCounterDataImageInitializeScratchBuffer
|
| 271 |
+
uint8_t* pCounterDataScratchBuffer; //!< [in] address of CounterDataImage scratch buffer
|
| 272 |
+
uint8_t bDumpCounterDataInFile; //!< [in] [optional]
|
| 273 |
+
const char* pCounterDataFilePath; //!< [in] [optional]
|
| 274 |
+
CUpti_ProfilerRange range; //!< [in] CUpti_ProfilerRange
|
| 275 |
+
CUpti_ProfilerReplayMode replayMode; //!< [in] CUpti_ProfilerReplayMode
|
| 276 |
+
/* Replay options, required when replay is done by cupti user */
|
| 277 |
+
size_t maxRangesPerPass; //!< [in] Maximum number of ranges that can be recorded in a single pass.
|
| 278 |
+
size_t maxLaunchesPerPass; //!< [in] Maximum number of kernel launches that can be recorded in a single pass; must be >= maxRangesPerPass.
|
| 279 |
+
|
| 280 |
+
} CUpti_Profiler_BeginSession_Params;
|
| 281 |
+
#define CUpti_Profiler_BeginSession_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_Profiler_BeginSession_Params, maxLaunchesPerPass)
|
| 282 |
+
/**
|
| 283 |
+
* \brief Params for cuptiProfilerEndSession
|
| 284 |
+
*/
|
| 285 |
+
typedef struct CUpti_Profiler_EndSession_Params
|
| 286 |
+
{
|
| 287 |
+
size_t structSize; //!< [in] CUpti_Profiler_EndSession_Params_STRUCT_SIZE
|
| 288 |
+
void* pPriv; //!< [in] assign to NULL
|
| 289 |
+
|
| 290 |
+
CUcontext ctx; //!< [in] if NULL, the current CUcontext is used
|
| 291 |
+
} CUpti_Profiler_EndSession_Params;
|
| 292 |
+
#define CUpti_Profiler_EndSession_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_Profiler_EndSession_Params, ctx)
|
| 293 |
+
|
| 294 |
+
/**
|
| 295 |
+
* \brief Begin profiling session sets up the profiling on the device
|
| 296 |
+
*
|
| 297 |
+
* Although, it doesn't start the profiling but GPU resources needed for profiling are allocated.
|
| 298 |
+
* Outside of a session, the GPU will return to its normal operating state.
|
| 299 |
+
*/
|
| 300 |
+
CUptiResult CUPTIAPI cuptiProfilerBeginSession(CUpti_Profiler_BeginSession_Params* pParams);
|
| 301 |
+
/**
|
| 302 |
+
* \brief Ends profiling session
|
| 303 |
+
*
|
| 304 |
+
* Frees up the GPU resources acquired for profiling.
|
| 305 |
+
* Outside of a session, the GPU will return to it's normal operating state.
|
| 306 |
+
*/
|
| 307 |
+
CUptiResult CUPTIAPI cuptiProfilerEndSession(CUpti_Profiler_EndSession_Params* pParams);
|
| 308 |
+
|
| 309 |
+
/**
|
| 310 |
+
* \brief Params for cuptiProfilerSetConfig
|
| 311 |
+
*/
|
| 312 |
+
typedef struct CUpti_Profiler_SetConfig_Params
|
| 313 |
+
{
|
| 314 |
+
size_t structSize; //!< [in] CUpti_Profiler_SetConfig_Params_STRUCT_SIZE
|
| 315 |
+
void* pPriv; //!< [in] assign to NULL
|
| 316 |
+
|
| 317 |
+
CUcontext ctx; //!< [in] if NULL, the current CUcontext is used
|
| 318 |
+
const uint8_t* pConfig; //!< [in] Config created by NVPW_RawMetricsConfig_GetConfigImage(). Must be align(8).
|
| 319 |
+
size_t configSize; //!< [in] size of config
|
| 320 |
+
uint16_t minNestingLevel; //!< [in] the lowest nesting level to be profiled; must be >= 1
|
| 321 |
+
uint16_t numNestingLevels; //!< [in] the number of nesting levels to profile; must be >= 1
|
| 322 |
+
size_t passIndex; //!< [in] Set this to zero for in-app replay; set this to the output of EndPass() for application replay
|
| 323 |
+
uint16_t targetNestingLevel; //!< [in] Set this to minNestingLevel for in-app replay; set this to the output of EndPass() for application
|
| 324 |
+
} CUpti_Profiler_SetConfig_Params;
|
| 325 |
+
|
| 326 |
+
#define CUpti_Profiler_SetConfig_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_Profiler_SetConfig_Params, targetNestingLevel)
|
| 327 |
+
|
| 328 |
+
/**
|
| 329 |
+
* \brief Params for cuptiProfilerUnsetConfig
|
| 330 |
+
*/
|
| 331 |
+
typedef struct CUpti_Profiler_UnsetConfig_Params
|
| 332 |
+
{
|
| 333 |
+
size_t structSize; //!< [in] CUpti_Profiler_UnsetConfig_Params_STRUCT_SIZE
|
| 334 |
+
void* pPriv; //!< [in] assign to NULL
|
| 335 |
+
|
| 336 |
+
CUcontext ctx; //!< [in] if NULL, the current CUcontext is used
|
| 337 |
+
} CUpti_Profiler_UnsetConfig_Params;
|
| 338 |
+
#define CUpti_Profiler_UnsetConfig_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_Profiler_UnsetConfig_Params, ctx)
|
| 339 |
+
|
| 340 |
+
/**
|
| 341 |
+
* \brief Set metrics configuration to be profiled
|
| 342 |
+
*
|
| 343 |
+
* Use these APIs to set the config to profile in a session. It can be used for advanced cases such as where multiple
|
| 344 |
+
* configurations are collected into a single CounterData Image on the need basis, without restarting the session.
|
| 345 |
+
*/
|
| 346 |
+
CUptiResult CUPTIAPI cuptiProfilerSetConfig(CUpti_Profiler_SetConfig_Params* pParams);
|
| 347 |
+
/**
|
| 348 |
+
* \brief Unset metrics configuration profiled
|
| 349 |
+
*
|
| 350 |
+
*/
|
| 351 |
+
CUptiResult CUPTIAPI cuptiProfilerUnsetConfig(CUpti_Profiler_UnsetConfig_Params* pParams);
|
| 352 |
+
|
| 353 |
+
/**
|
| 354 |
+
* \brief Params for cuptiProfilerBeginPass
|
| 355 |
+
*/
|
| 356 |
+
typedef struct CUpti_Profiler_BeginPass_Params
|
| 357 |
+
{
|
| 358 |
+
size_t structSize; //!< [in] CUpti_Profiler_BeginPass_Params_STRUCT_SIZE
|
| 359 |
+
void* pPriv; //!< [in] assign to NULL
|
| 360 |
+
|
| 361 |
+
CUcontext ctx; //!< [in] if NULL, the current CUcontext is used
|
| 362 |
+
} CUpti_Profiler_BeginPass_Params;
|
| 363 |
+
#define CUpti_Profiler_BeginPass_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_Profiler_BeginPass_Params, ctx)
|
| 364 |
+
|
| 365 |
+
/**
|
| 366 |
+
* \brief Params for cuptiProfilerEndPass
|
| 367 |
+
*/
|
| 368 |
+
typedef struct CUpti_Profiler_EndPass_Params
|
| 369 |
+
{
|
| 370 |
+
size_t structSize; //!< [in] CUpti_Profiler_EndPass_Params_STRUCT_SIZE
|
| 371 |
+
void* pPriv; //!< [in] assign to NULL
|
| 372 |
+
|
| 373 |
+
CUcontext ctx; //!< [in] if NULL, the current CUcontext is used
|
| 374 |
+
uint16_t targetNestingLevel; //! [out] The targetNestingLevel that will be collected by the *next* BeginPass.
|
| 375 |
+
size_t passIndex; //!< [out] The passIndex that will be collected by the *next* BeginPass
|
| 376 |
+
uint8_t allPassesSubmitted; //!< [out] becomes true when the last pass has been queued to the GPU
|
| 377 |
+
} CUpti_Profiler_EndPass_Params;
|
| 378 |
+
#define CUpti_Profiler_EndPass_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_Profiler_EndPass_Params, allPassesSubmitted)
|
| 379 |
+
|
| 380 |
+
/**
|
| 381 |
+
* \brief Replay API: used for multipass collection.
|
| 382 |
+
|
| 383 |
+
* These APIs are used if user chooses to replay by itself \ref CUPTI_UserReplay or \ref CUPTI_ApplicationReplay
|
| 384 |
+
* for multipass collection of the metrics configurations.
|
| 385 |
+
* It's a no-op in case of \ref CUPTI_KernelReplay.
|
| 386 |
+
*/
|
| 387 |
+
CUptiResult cuptiProfilerBeginPass(CUpti_Profiler_BeginPass_Params* pParams);
|
| 388 |
+
|
| 389 |
+
/**
|
| 390 |
+
* \brief Replay API: used for multipass collection.
|
| 391 |
+
|
| 392 |
+
* These APIs are used if user chooses to replay by itself \ref CUPTI_UserReplay or \ref CUPTI_ApplicationReplay
|
| 393 |
+
* for multipass collection of the metrics configurations.
|
| 394 |
+
* Its a no-op in case of \ref CUPTI_KernelReplay.
|
| 395 |
+
* Returns information for next pass.
|
| 396 |
+
*/
|
| 397 |
+
CUptiResult cuptiProfilerEndPass(CUpti_Profiler_EndPass_Params* pParams);
|
| 398 |
+
|
| 399 |
+
/**
|
| 400 |
+
* \brief Params for cuptiProfilerEnableProfiling
|
| 401 |
+
*/
|
| 402 |
+
typedef struct CUpti_Profiler_EnableProfiling_Params
|
| 403 |
+
{
|
| 404 |
+
size_t structSize; //!< [in] CUpti_Profiler_EnableProfiling_Params_STRUCT_SIZE
|
| 405 |
+
void* pPriv; //!< [in] assign to NULL
|
| 406 |
+
|
| 407 |
+
CUcontext ctx; //!< [in] if NULL, the current CUcontext is used
|
| 408 |
+
} CUpti_Profiler_EnableProfiling_Params;
|
| 409 |
+
#define CUpti_Profiler_EnableProfiling_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_Profiler_EnableProfiling_Params, ctx)
|
| 410 |
+
|
| 411 |
+
/**
|
| 412 |
+
* \brief Params for cuptiProfilerDisableProfiling
|
| 413 |
+
*/
|
| 414 |
+
typedef struct CUpti_Profiler_DisableProfiling_Params
|
| 415 |
+
{
|
| 416 |
+
size_t structSize; //!< [in] CUpti_Profiler_DisableProfiling_Params_STRUCT_SIZE
|
| 417 |
+
void* pPriv; //!< [in] assign to NULL
|
| 418 |
+
|
| 419 |
+
CUcontext ctx; //!< [in] if NULL, the current CUcontext is used
|
| 420 |
+
} CUpti_Profiler_DisableProfiling_Params;
|
| 421 |
+
#define CUpti_Profiler_DisableProfiling_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_Profiler_DisableProfiling_Params, ctx)
|
| 422 |
+
|
| 423 |
+
/**
|
| 424 |
+
* \brief Enables Profiling
|
| 425 |
+
*
|
| 426 |
+
* In \ref CUPTI_AutoRange, these APIs are used to enable/disable profiling for the kernels to be executed in
|
| 427 |
+
* a profiling session.
|
| 428 |
+
*/
|
| 429 |
+
CUptiResult CUPTIAPI cuptiProfilerEnableProfiling(CUpti_Profiler_EnableProfiling_Params* pParams);
|
| 430 |
+
|
| 431 |
+
/**
|
| 432 |
+
* \brief Disable Profiling
|
| 433 |
+
*
|
| 434 |
+
* In \ref CUPTI_AutoRange, these APIs are used to enable/disable profiling for the kernels to be executed in
|
| 435 |
+
* a profiling session.
|
| 436 |
+
*/
|
| 437 |
+
CUptiResult CUPTIAPI cuptiProfilerDisableProfiling(CUpti_Profiler_DisableProfiling_Params* pParams);
|
| 438 |
+
|
| 439 |
+
/**
|
| 440 |
+
* \brief Params for cuptiProfilerIsPassCollected
|
| 441 |
+
*/
|
| 442 |
+
typedef struct CUpti_Profiler_IsPassCollected_Params
|
| 443 |
+
{
|
| 444 |
+
size_t structSize; //!< [in] CUpti_Profiler_IsPassCollected_Params_STRUCT_SIZE
|
| 445 |
+
void* pPriv; //!< [in] assign to NULL
|
| 446 |
+
|
| 447 |
+
CUcontext ctx; //!< [in] if NULL, the current CUcontext is used
|
| 448 |
+
size_t numRangesDropped; //!< [out] number of ranges whose data was dropped in the processed pass
|
| 449 |
+
size_t numTraceBytesDropped; //!< [out] number of bytes not written to TraceBuffer due to buffer full
|
| 450 |
+
uint8_t onePassCollected; //!< [out] true if a pass was successfully decoded
|
| 451 |
+
uint8_t allPassesCollected; //!< [out] becomes true when the last pass has been decoded
|
| 452 |
+
} CUpti_Profiler_IsPassCollected_Params;
|
| 453 |
+
#define CUpti_Profiler_IsPassCollected_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_Profiler_IsPassCollected_Params, allPassesCollected)
|
| 454 |
+
|
| 455 |
+
/**
|
| 456 |
+
* \brief Asynchronous call to query if the submitted pass to GPU is collected
|
| 457 |
+
*
|
| 458 |
+
*/
|
| 459 |
+
CUptiResult CUPTIAPI cuptiProfilerIsPassCollected(CUpti_Profiler_IsPassCollected_Params* pParams);
|
| 460 |
+
|
| 461 |
+
/**
|
| 462 |
+
* \brief Params for cuptiProfilerFlushCounterData
|
| 463 |
+
*/
|
| 464 |
+
typedef struct CUpti_Profiler_FlushCounterData_Params
|
| 465 |
+
{
|
| 466 |
+
size_t structSize; //!< [in] CUpti_Profiler_FlushCounterData_Params_STRUCT_SIZE
|
| 467 |
+
void* pPriv; //!< [in] assign to NULL
|
| 468 |
+
|
| 469 |
+
CUcontext ctx; //!< [in] if NULL, the current CUcontext is used
|
| 470 |
+
size_t numRangesDropped; //!< [out] number of ranges whose data was dropped in the processed passes
|
| 471 |
+
size_t numTraceBytesDropped; //!< [out] number of bytes not written to TraceBuffer due to buffer full
|
| 472 |
+
} CUpti_Profiler_FlushCounterData_Params;
|
| 473 |
+
#define CUpti_Profiler_FlushCounterData_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_Profiler_FlushCounterData_Params, numTraceBytesDropped)
|
| 474 |
+
|
| 475 |
+
/**
|
| 476 |
+
* \brief Decode all the submitted passes
|
| 477 |
+
*
|
| 478 |
+
* Flush Counter data API to ensure every pass is decoded into the counterDataImage passed at beginSession.
|
| 479 |
+
* This will cause the CPU/GPU sync to collect all the undecoded pass.
|
| 480 |
+
*/
|
| 481 |
+
CUptiResult CUPTIAPI cuptiProfilerFlushCounterData(CUpti_Profiler_FlushCounterData_Params* pParams);
|
| 482 |
+
|
| 483 |
+
typedef struct CUpti_Profiler_PushRange_Params
|
| 484 |
+
{
|
| 485 |
+
size_t structSize; //!< [in] CUpti_Profiler_PushRange_Params_STRUCT_SIZE
|
| 486 |
+
void* pPriv; //!< [in] assign to NULL
|
| 487 |
+
|
| 488 |
+
CUcontext ctx; //!< [in] if NULL, the current CUcontext is used
|
| 489 |
+
const char* pRangeName; //!< [in] specifies the range for subsequent launches; must not be NULL
|
| 490 |
+
size_t rangeNameLength; //!< [in] assign to strlen(pRangeName) if known; if set to zero, the library will call strlen()
|
| 491 |
+
} CUpti_Profiler_PushRange_Params;
|
| 492 |
+
#define CUpti_Profiler_PushRange_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_Profiler_PushRange_Params, rangeNameLength)
|
| 493 |
+
|
| 494 |
+
typedef struct CUpti_Profiler_PopRange_Params
|
| 495 |
+
{
|
| 496 |
+
size_t structSize; //!< [in] CUpti_Profiler_PopRange_Params_STRUCT_SIZE
|
| 497 |
+
void* pPriv; //!< [in] assign to NULL
|
| 498 |
+
|
| 499 |
+
CUcontext ctx; //!< [in] if NULL, the current CUcontext is used
|
| 500 |
+
} CUpti_Profiler_PopRange_Params;
|
| 501 |
+
#define CUpti_Profiler_PopRange_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_Profiler_PopRange_Params, ctx)
|
| 502 |
+
|
| 503 |
+
|
| 504 |
+
/**
|
| 505 |
+
* \brief Range API's : Push user range
|
| 506 |
+
*
|
| 507 |
+
* Counter data is collected per unique range-stack. Identified by a string label passsed by the user.
|
| 508 |
+
* It's an invalid operation in case of \ref CUPTI_AutoRange.
|
| 509 |
+
*/
|
| 510 |
+
CUptiResult CUPTIAPI cuptiProfilerPushRange(CUpti_Profiler_PushRange_Params *pParams);
|
| 511 |
+
|
| 512 |
+
/**
|
| 513 |
+
* \brief Range API's : Pop user range
|
| 514 |
+
*
|
| 515 |
+
* Counter data is collected per unique range-stack. Identified by a string label passsed by the user.
|
| 516 |
+
* It's an invalid operation in case of \ref CUPTI_AutoRange.
|
| 517 |
+
*/
|
| 518 |
+
CUptiResult CUPTIAPI cuptiProfilerPopRange(CUpti_Profiler_PopRange_Params *pParams);
|
| 519 |
+
|
| 520 |
+
/**
|
| 521 |
+
* \brief Params for cuptiProfilerGetCounterAvailability
|
| 522 |
+
*/
|
| 523 |
+
typedef struct CUpti_Profiler_GetCounterAvailability_Params
|
| 524 |
+
{
|
| 525 |
+
size_t structSize; //!< [in] CUpti_Profiler_GetCounterAvailability_Params_STRUCT_SIZE
|
| 526 |
+
void* pPriv; //!< [in] assign to NULL
|
| 527 |
+
CUcontext ctx; //!< [in] if NULL, the current CUcontext is used
|
| 528 |
+
size_t counterAvailabilityImageSize; //!< [in/out] If `pCounterAvailabilityImage` is NULL, then the required size is returned in
|
| 529 |
+
//!< `counterAvailabilityImageSize`, otherwise `counterAvailabilityImageSize` should be set to the size of
|
| 530 |
+
//!< `pCounterAvailabilityImage`, and on return it would be overwritten with number of actual bytes copied
|
| 531 |
+
uint8_t* pCounterAvailabilityImage; //!< [in] buffer receiving counter availability image, may be NULL
|
| 532 |
+
} CUpti_Profiler_GetCounterAvailability_Params;
|
| 533 |
+
#define CUpti_Profiler_GetCounterAvailability_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_Profiler_GetCounterAvailability_Params, pCounterAvailabilityImage)
|
| 534 |
+
|
| 535 |
+
/**
|
| 536 |
+
* \brief Query counter availibility
|
| 537 |
+
*
|
| 538 |
+
* Use this API to query counter availability information in a buffer which can be used to filter unavailable raw metrics on host.
|
| 539 |
+
* Note: This API may fail, if any profiling or sampling session is active on the specified context or its device.
|
| 540 |
+
*/
|
| 541 |
+
CUptiResult CUPTIAPI cuptiProfilerGetCounterAvailability(CUpti_Profiler_GetCounterAvailability_Params *pParams);
|
| 542 |
+
|
| 543 |
+
/// Generic support level enum for CUPTI
|
| 544 |
+
typedef enum
|
| 545 |
+
{
|
| 546 |
+
CUPTI_PROFILER_CONFIGURATION_UNKNOWN = 0, //!< Configuration support level unknown - either detection code errored out before setting this value, or unable to determine it
|
| 547 |
+
CUPTI_PROFILER_CONFIGURATION_UNSUPPORTED, //!< Profiling is unavailable. For specific feature fields, this means that the current configuration of this feature does not work with profiling. For instance, SLI-enabled devices do not support profiling, and this value would be returned for SLI on an SLI-enabled device.
|
| 548 |
+
CUPTI_PROFILER_CONFIGURATION_DISABLED, //!< Profiling would be available for this configuration, but was disabled by the system
|
| 549 |
+
CUPTI_PROFILER_CONFIGURATION_SUPPORTED //!< Profiling is supported. For specific feature fields, this means that the current configuration of this feature works with profiling. For instance, SLI-enabled devices do not support profiling, and this value would only be returned for devices which are not SLI-enabled.
|
| 550 |
+
} CUpti_Profiler_Support_Level;
|
| 551 |
+
|
| 552 |
+
/**
|
| 553 |
+
* \brief Profiler API types
|
| 554 |
+
*/
|
| 555 |
+
typedef enum
|
| 556 |
+
{
|
| 557 |
+
CUPTI_PROFILER_RANGE_PROFILING = 0, //!< CUPTI APIs for range based profiling (cuptiProfiler*)
|
| 558 |
+
CUPTI_PROFILER_PC_SAMPLING, //!< CUPTI APIs collecting pc sampling data (cuptiPcSampling*)
|
| 559 |
+
CUPTI_PROFILER_SASS_METRICS, //!< CUPTI APIs collecting SASS metrics data (cuptiSassMetrics*)
|
| 560 |
+
CUPTI_PROFILER_UNKNOWN
|
| 561 |
+
} CUpti_Profiler_API;
|
| 562 |
+
|
| 563 |
+
/**
|
| 564 |
+
* \brief Params for cuptiProfilerDeviceSupported
|
| 565 |
+
*/
|
| 566 |
+
typedef struct
|
| 567 |
+
{
|
| 568 |
+
size_t structSize; //!< [in] Must be CUpti_Profiler_DeviceSupported_Params_STRUCT_SIZE
|
| 569 |
+
void *pPriv; //!< [in] assign to NULL
|
| 570 |
+
CUdevice cuDevice; //!< [in] if NULL, the current CUcontext is used
|
| 571 |
+
|
| 572 |
+
CUpti_Profiler_Support_Level isSupported; //!< [out] overall SUPPORTED / UNSUPPORTED flag representing whether Profiling and PC Sampling APIs work on the given device and configuration. SUPPORTED if all following flags are SUPPORTED, UNSUPPORTED otherwise.
|
| 573 |
+
|
| 574 |
+
CUpti_Profiler_Support_Level architecture; //!< [out] SUPPORTED if the device architecture level supports the Profiling API (Compute Capability >= 7.0), UNSUPPORTED otherwise
|
| 575 |
+
CUpti_Profiler_Support_Level sli; //!< [out] SUPPORTED if SLI is not enabled, UNSUPPORTED otherwise
|
| 576 |
+
CUpti_Profiler_Support_Level vGpu; //!< [out] SUPPORTED if vGPU is supported and profiling is enabled, DISABLED if profiling is supported but not enabled, UNSUPPORTED otherwise
|
| 577 |
+
CUpti_Profiler_Support_Level confidentialCompute; //!< [out] SUPPORTED if confidential compute is not enabled, UNSUPPORTED otherwise
|
| 578 |
+
CUpti_Profiler_Support_Level cmp; //!< [out] SUPPORTED if not NVIDIA Crypto Mining Processors (CMP), UNSUPPORTED otherwise
|
| 579 |
+
CUpti_Profiler_Support_Level wsl; //!< [out] SUPPORTED if WSL supported, UNSUPPORTED otherwise
|
| 580 |
+
CUpti_Profiler_API api; //!< [in] the CUPTI API type for which device support will be checked
|
| 581 |
+
} CUpti_Profiler_DeviceSupported_Params;
|
| 582 |
+
#define CUpti_Profiler_DeviceSupported_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_Profiler_DeviceSupported_Params, api)
|
| 583 |
+
|
| 584 |
+
/**
|
| 585 |
+
* \brief Query device compatibility with Profiling API
|
| 586 |
+
*
|
| 587 |
+
* Use this call to determine whether a compute device and configuration are compatible with the Profiling API.
|
| 588 |
+
* If the configuration does not support profiling, one of several flags will indicate why.
|
| 589 |
+
*/
|
| 590 |
+
CUptiResult CUPTIAPI cuptiProfilerDeviceSupported(CUpti_Profiler_DeviceSupported_Params *pParams);
|
| 591 |
+
|
| 592 |
+
/** @} */ /* END CUPTI_METRIC_API */
|
| 593 |
+
#if defined(__GNUC__) && defined(CUPTI_LIB)
|
| 594 |
+
#pragma GCC visibility pop
|
| 595 |
+
#endif
|
| 596 |
+
|
| 597 |
+
#ifdef __cplusplus
|
| 598 |
+
} /* extern "C" */
|
| 599 |
+
#endif
|
| 600 |
+
|
| 601 |
+
#endif /*_CUPTI_PROFILER_TARGET_H_*/
|