Add files using upload-large-folder tool
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- .gitattributes +3 -0
- .venv/lib/python3.11/site-packages/charset_normalizer/__init__.py +48 -0
- .venv/lib/python3.11/site-packages/charset_normalizer/__main__.py +6 -0
- .venv/lib/python3.11/site-packages/charset_normalizer/api.py +668 -0
- .venv/lib/python3.11/site-packages/charset_normalizer/cd.py +395 -0
- .venv/lib/python3.11/site-packages/charset_normalizer/constant.py +1998 -0
- .venv/lib/python3.11/site-packages/charset_normalizer/legacy.py +66 -0
- .venv/lib/python3.11/site-packages/charset_normalizer/md.cpython-311-x86_64-linux-gnu.so +0 -0
- .venv/lib/python3.11/site-packages/charset_normalizer/md.py +630 -0
- .venv/lib/python3.11/site-packages/charset_normalizer/models.py +360 -0
- .venv/lib/python3.11/site-packages/charset_normalizer/py.typed +0 -0
- .venv/lib/python3.11/site-packages/charset_normalizer/utils.py +408 -0
- .venv/lib/python3.11/site-packages/charset_normalizer/version.py +8 -0
- .venv/lib/python3.11/site-packages/cv2/cv2.abi3.so +3 -0
- .venv/lib/python3.11/site-packages/huggingface_hub/inference/_generated/types/audio_classification.py +44 -0
- .venv/lib/python3.11/site-packages/huggingface_hub/inference/_generated/types/document_question_answering.py +81 -0
- .venv/lib/python3.11/site-packages/huggingface_hub/inference/_generated/types/feature_extraction.py +37 -0
- .venv/lib/python3.11/site-packages/huggingface_hub/inference/_generated/types/image_classification.py +44 -0
- .venv/lib/python3.11/site-packages/huggingface_hub/inference/_generated/types/sentence_similarity.py +28 -0
- .venv/lib/python3.11/site-packages/huggingface_hub/inference/_generated/types/text_to_video.py +47 -0
- .venv/lib/python3.11/site-packages/huggingface_hub/inference/_generated/types/translation.py +50 -0
- .venv/lib/python3.11/site-packages/huggingface_hub/inference/_generated/types/video_classification.py +46 -0
- .venv/lib/python3.11/site-packages/huggingface_hub/inference/_generated/types/visual_question_answering.py +50 -0
- .venv/lib/python3.11/site-packages/huggingface_hub/inference/_generated/types/zero_shot_image_classification.py +41 -0
- .venv/lib/python3.11/site-packages/nvidia/cuda_cupti/__init__.py +0 -0
- .venv/lib/python3.11/site-packages/nvidia/cuda_cupti/__pycache__/__init__.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/Openacc/cupti_openacc.h +98 -0
- .venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/Openmp/cupti_openmp.h +100 -0
- .venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/Openmp/omp-tools.h +1083 -0
- .venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/__init__.py +0 -0
- .venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/__pycache__/__init__.cpython-311.pyc +0 -0
- .venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/cuda_stdint.h +112 -0
- .venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/cupti.h +123 -0
- .venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/cupti_activity.h +0 -0
- .venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/cupti_activity_deprecated.h +0 -0
- .venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/cupti_callbacks.h +860 -0
- .venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/cupti_checkpoint.h +127 -0
- .venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/cupti_common.h +93 -0
- .venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/cupti_driver_cbid.h +767 -0
- .venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/cupti_events.h +1350 -0
- .venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/cupti_metrics.h +825 -0
- .venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/cupti_nvtx_cbid.h +111 -0
- .venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/cupti_pcsampling.h +936 -0
- .venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/cupti_pcsampling_util.h +402 -0
- .venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/cupti_profiler_target.h +601 -0
- .venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/cupti_result.h +346 -0
- .venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/cupti_runtime_cbid.h +481 -0
- .venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/cupti_sass_metrics.h +436 -0
- .venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/cupti_target.h +43 -0
- .venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/cupti_version.h +134 -0
.gitattributes
CHANGED
|
@@ -409,3 +409,6 @@ tuning-competition-baseline/.venv/lib/python3.11/site-packages/nvidia/cudnn/lib/
|
|
| 409 |
.venv/lib/python3.11/site-packages/aiohttp/_websocket/reader_c.cpython-311-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 410 |
.venv/lib/python3.11/site-packages/opencv_python_headless.libs/libssl-28bef1ac.so.1.1 filter=lfs diff=lfs merge=lfs -text
|
| 411 |
.venv/lib/python3.11/site-packages/opencv_python_headless.libs/libavutil-734d06dd.so.57.28.100 filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
| 409 |
.venv/lib/python3.11/site-packages/aiohttp/_websocket/reader_c.cpython-311-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
| 410 |
.venv/lib/python3.11/site-packages/opencv_python_headless.libs/libssl-28bef1ac.so.1.1 filter=lfs diff=lfs merge=lfs -text
|
| 411 |
.venv/lib/python3.11/site-packages/opencv_python_headless.libs/libavutil-734d06dd.so.57.28.100 filter=lfs diff=lfs merge=lfs -text
|
| 412 |
+
.venv/lib/python3.11/site-packages/opencv_python_headless.libs/libavcodec-76c43bf0.so.59.37.100 filter=lfs diff=lfs merge=lfs -text
|
| 413 |
+
.venv/lib/python3.11/site-packages/nvidia/cuda_nvrtc/lib/libnvrtc-builtins.so.12.4 filter=lfs diff=lfs merge=lfs -text
|
| 414 |
+
.venv/lib/python3.11/site-packages/cv2/cv2.abi3.so filter=lfs diff=lfs merge=lfs -text
|
.venv/lib/python3.11/site-packages/charset_normalizer/__init__.py
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Charset-Normalizer
|
| 3 |
+
~~~~~~~~~~~~~~
|
| 4 |
+
The Real First Universal Charset Detector.
|
| 5 |
+
A library that helps you read text from an unknown charset encoding.
|
| 6 |
+
Motivated by chardet, This package is trying to resolve the issue by taking a new approach.
|
| 7 |
+
All IANA character set names for which the Python core library provides codecs are supported.
|
| 8 |
+
|
| 9 |
+
Basic usage:
|
| 10 |
+
>>> from charset_normalizer import from_bytes
|
| 11 |
+
>>> results = from_bytes('Bсеки човек има право на образование. Oбразованието!'.encode('utf_8'))
|
| 12 |
+
>>> best_guess = results.best()
|
| 13 |
+
>>> str(best_guess)
|
| 14 |
+
'Bсеки човек има право на образование. Oбразованието!'
|
| 15 |
+
|
| 16 |
+
Others methods and usages are available - see the full documentation
|
| 17 |
+
at <https://github.com/Ousret/charset_normalizer>.
|
| 18 |
+
:copyright: (c) 2021 by Ahmed TAHRI
|
| 19 |
+
:license: MIT, see LICENSE for more details.
|
| 20 |
+
"""
|
| 21 |
+
|
| 22 |
+
from __future__ import annotations
|
| 23 |
+
|
| 24 |
+
import logging
|
| 25 |
+
|
| 26 |
+
from .api import from_bytes, from_fp, from_path, is_binary
|
| 27 |
+
from .legacy import detect
|
| 28 |
+
from .models import CharsetMatch, CharsetMatches
|
| 29 |
+
from .utils import set_logging_handler
|
| 30 |
+
from .version import VERSION, __version__
|
| 31 |
+
|
| 32 |
+
__all__ = (
|
| 33 |
+
"from_fp",
|
| 34 |
+
"from_path",
|
| 35 |
+
"from_bytes",
|
| 36 |
+
"is_binary",
|
| 37 |
+
"detect",
|
| 38 |
+
"CharsetMatch",
|
| 39 |
+
"CharsetMatches",
|
| 40 |
+
"__version__",
|
| 41 |
+
"VERSION",
|
| 42 |
+
"set_logging_handler",
|
| 43 |
+
)
|
| 44 |
+
|
| 45 |
+
# Attach a NullHandler to the top level logger by default
|
| 46 |
+
# https://docs.python.org/3.3/howto/logging.html#configuring-logging-for-a-library
|
| 47 |
+
|
| 48 |
+
logging.getLogger("charset_normalizer").addHandler(logging.NullHandler())
|
.venv/lib/python3.11/site-packages/charset_normalizer/__main__.py
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
|
| 3 |
+
from .cli import cli_detect
|
| 4 |
+
|
| 5 |
+
if __name__ == "__main__":
|
| 6 |
+
cli_detect()
|
.venv/lib/python3.11/site-packages/charset_normalizer/api.py
ADDED
|
@@ -0,0 +1,668 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
|
| 3 |
+
import logging
|
| 4 |
+
from os import PathLike
|
| 5 |
+
from typing import BinaryIO
|
| 6 |
+
|
| 7 |
+
from .cd import (
|
| 8 |
+
coherence_ratio,
|
| 9 |
+
encoding_languages,
|
| 10 |
+
mb_encoding_languages,
|
| 11 |
+
merge_coherence_ratios,
|
| 12 |
+
)
|
| 13 |
+
from .constant import IANA_SUPPORTED, TOO_BIG_SEQUENCE, TOO_SMALL_SEQUENCE, TRACE
|
| 14 |
+
from .md import mess_ratio
|
| 15 |
+
from .models import CharsetMatch, CharsetMatches
|
| 16 |
+
from .utils import (
|
| 17 |
+
any_specified_encoding,
|
| 18 |
+
cut_sequence_chunks,
|
| 19 |
+
iana_name,
|
| 20 |
+
identify_sig_or_bom,
|
| 21 |
+
is_cp_similar,
|
| 22 |
+
is_multi_byte_encoding,
|
| 23 |
+
should_strip_sig_or_bom,
|
| 24 |
+
)
|
| 25 |
+
|
| 26 |
+
logger = logging.getLogger("charset_normalizer")
|
| 27 |
+
explain_handler = logging.StreamHandler()
|
| 28 |
+
explain_handler.setFormatter(
|
| 29 |
+
logging.Formatter("%(asctime)s | %(levelname)s | %(message)s")
|
| 30 |
+
)
|
| 31 |
+
|
| 32 |
+
|
| 33 |
+
def from_bytes(
|
| 34 |
+
sequences: bytes | bytearray,
|
| 35 |
+
steps: int = 5,
|
| 36 |
+
chunk_size: int = 512,
|
| 37 |
+
threshold: float = 0.2,
|
| 38 |
+
cp_isolation: list[str] | None = None,
|
| 39 |
+
cp_exclusion: list[str] | None = None,
|
| 40 |
+
preemptive_behaviour: bool = True,
|
| 41 |
+
explain: bool = False,
|
| 42 |
+
language_threshold: float = 0.1,
|
| 43 |
+
enable_fallback: bool = True,
|
| 44 |
+
) -> CharsetMatches:
|
| 45 |
+
"""
|
| 46 |
+
Given a raw bytes sequence, return the best possibles charset usable to render str objects.
|
| 47 |
+
If there is no results, it is a strong indicator that the source is binary/not text.
|
| 48 |
+
By default, the process will extract 5 blocks of 512o each to assess the mess and coherence of a given sequence.
|
| 49 |
+
And will give up a particular code page after 20% of measured mess. Those criteria are customizable at will.
|
| 50 |
+
|
| 51 |
+
The preemptive behavior DOES NOT replace the traditional detection workflow, it prioritize a particular code page
|
| 52 |
+
but never take it for granted. Can improve the performance.
|
| 53 |
+
|
| 54 |
+
You may want to focus your attention to some code page or/and not others, use cp_isolation and cp_exclusion for that
|
| 55 |
+
purpose.
|
| 56 |
+
|
| 57 |
+
This function will strip the SIG in the payload/sequence every time except on UTF-16, UTF-32.
|
| 58 |
+
By default the library does not setup any handler other than the NullHandler, if you choose to set the 'explain'
|
| 59 |
+
toggle to True it will alter the logger configuration to add a StreamHandler that is suitable for debugging.
|
| 60 |
+
Custom logging format and handler can be set manually.
|
| 61 |
+
"""
|
| 62 |
+
|
| 63 |
+
if not isinstance(sequences, (bytearray, bytes)):
|
| 64 |
+
raise TypeError(
|
| 65 |
+
"Expected object of type bytes or bytearray, got: {}".format(
|
| 66 |
+
type(sequences)
|
| 67 |
+
)
|
| 68 |
+
)
|
| 69 |
+
|
| 70 |
+
if explain:
|
| 71 |
+
previous_logger_level: int = logger.level
|
| 72 |
+
logger.addHandler(explain_handler)
|
| 73 |
+
logger.setLevel(TRACE)
|
| 74 |
+
|
| 75 |
+
length: int = len(sequences)
|
| 76 |
+
|
| 77 |
+
if length == 0:
|
| 78 |
+
logger.debug("Encoding detection on empty bytes, assuming utf_8 intention.")
|
| 79 |
+
if explain: # Defensive: ensure exit path clean handler
|
| 80 |
+
logger.removeHandler(explain_handler)
|
| 81 |
+
logger.setLevel(previous_logger_level or logging.WARNING)
|
| 82 |
+
return CharsetMatches([CharsetMatch(sequences, "utf_8", 0.0, False, [], "")])
|
| 83 |
+
|
| 84 |
+
if cp_isolation is not None:
|
| 85 |
+
logger.log(
|
| 86 |
+
TRACE,
|
| 87 |
+
"cp_isolation is set. use this flag for debugging purpose. "
|
| 88 |
+
"limited list of encoding allowed : %s.",
|
| 89 |
+
", ".join(cp_isolation),
|
| 90 |
+
)
|
| 91 |
+
cp_isolation = [iana_name(cp, False) for cp in cp_isolation]
|
| 92 |
+
else:
|
| 93 |
+
cp_isolation = []
|
| 94 |
+
|
| 95 |
+
if cp_exclusion is not None:
|
| 96 |
+
logger.log(
|
| 97 |
+
TRACE,
|
| 98 |
+
"cp_exclusion is set. use this flag for debugging purpose. "
|
| 99 |
+
"limited list of encoding excluded : %s.",
|
| 100 |
+
", ".join(cp_exclusion),
|
| 101 |
+
)
|
| 102 |
+
cp_exclusion = [iana_name(cp, False) for cp in cp_exclusion]
|
| 103 |
+
else:
|
| 104 |
+
cp_exclusion = []
|
| 105 |
+
|
| 106 |
+
if length <= (chunk_size * steps):
|
| 107 |
+
logger.log(
|
| 108 |
+
TRACE,
|
| 109 |
+
"override steps (%i) and chunk_size (%i) as content does not fit (%i byte(s) given) parameters.",
|
| 110 |
+
steps,
|
| 111 |
+
chunk_size,
|
| 112 |
+
length,
|
| 113 |
+
)
|
| 114 |
+
steps = 1
|
| 115 |
+
chunk_size = length
|
| 116 |
+
|
| 117 |
+
if steps > 1 and length / steps < chunk_size:
|
| 118 |
+
chunk_size = int(length / steps)
|
| 119 |
+
|
| 120 |
+
is_too_small_sequence: bool = len(sequences) < TOO_SMALL_SEQUENCE
|
| 121 |
+
is_too_large_sequence: bool = len(sequences) >= TOO_BIG_SEQUENCE
|
| 122 |
+
|
| 123 |
+
if is_too_small_sequence:
|
| 124 |
+
logger.log(
|
| 125 |
+
TRACE,
|
| 126 |
+
"Trying to detect encoding from a tiny portion of ({}) byte(s).".format(
|
| 127 |
+
length
|
| 128 |
+
),
|
| 129 |
+
)
|
| 130 |
+
elif is_too_large_sequence:
|
| 131 |
+
logger.log(
|
| 132 |
+
TRACE,
|
| 133 |
+
"Using lazy str decoding because the payload is quite large, ({}) byte(s).".format(
|
| 134 |
+
length
|
| 135 |
+
),
|
| 136 |
+
)
|
| 137 |
+
|
| 138 |
+
prioritized_encodings: list[str] = []
|
| 139 |
+
|
| 140 |
+
specified_encoding: str | None = (
|
| 141 |
+
any_specified_encoding(sequences) if preemptive_behaviour else None
|
| 142 |
+
)
|
| 143 |
+
|
| 144 |
+
if specified_encoding is not None:
|
| 145 |
+
prioritized_encodings.append(specified_encoding)
|
| 146 |
+
logger.log(
|
| 147 |
+
TRACE,
|
| 148 |
+
"Detected declarative mark in sequence. Priority +1 given for %s.",
|
| 149 |
+
specified_encoding,
|
| 150 |
+
)
|
| 151 |
+
|
| 152 |
+
tested: set[str] = set()
|
| 153 |
+
tested_but_hard_failure: list[str] = []
|
| 154 |
+
tested_but_soft_failure: list[str] = []
|
| 155 |
+
|
| 156 |
+
fallback_ascii: CharsetMatch | None = None
|
| 157 |
+
fallback_u8: CharsetMatch | None = None
|
| 158 |
+
fallback_specified: CharsetMatch | None = None
|
| 159 |
+
|
| 160 |
+
results: CharsetMatches = CharsetMatches()
|
| 161 |
+
|
| 162 |
+
early_stop_results: CharsetMatches = CharsetMatches()
|
| 163 |
+
|
| 164 |
+
sig_encoding, sig_payload = identify_sig_or_bom(sequences)
|
| 165 |
+
|
| 166 |
+
if sig_encoding is not None:
|
| 167 |
+
prioritized_encodings.append(sig_encoding)
|
| 168 |
+
logger.log(
|
| 169 |
+
TRACE,
|
| 170 |
+
"Detected a SIG or BOM mark on first %i byte(s). Priority +1 given for %s.",
|
| 171 |
+
len(sig_payload),
|
| 172 |
+
sig_encoding,
|
| 173 |
+
)
|
| 174 |
+
|
| 175 |
+
prioritized_encodings.append("ascii")
|
| 176 |
+
|
| 177 |
+
if "utf_8" not in prioritized_encodings:
|
| 178 |
+
prioritized_encodings.append("utf_8")
|
| 179 |
+
|
| 180 |
+
for encoding_iana in prioritized_encodings + IANA_SUPPORTED:
|
| 181 |
+
if cp_isolation and encoding_iana not in cp_isolation:
|
| 182 |
+
continue
|
| 183 |
+
|
| 184 |
+
if cp_exclusion and encoding_iana in cp_exclusion:
|
| 185 |
+
continue
|
| 186 |
+
|
| 187 |
+
if encoding_iana in tested:
|
| 188 |
+
continue
|
| 189 |
+
|
| 190 |
+
tested.add(encoding_iana)
|
| 191 |
+
|
| 192 |
+
decoded_payload: str | None = None
|
| 193 |
+
bom_or_sig_available: bool = sig_encoding == encoding_iana
|
| 194 |
+
strip_sig_or_bom: bool = bom_or_sig_available and should_strip_sig_or_bom(
|
| 195 |
+
encoding_iana
|
| 196 |
+
)
|
| 197 |
+
|
| 198 |
+
if encoding_iana in {"utf_16", "utf_32"} and not bom_or_sig_available:
|
| 199 |
+
logger.log(
|
| 200 |
+
TRACE,
|
| 201 |
+
"Encoding %s won't be tested as-is because it require a BOM. Will try some sub-encoder LE/BE.",
|
| 202 |
+
encoding_iana,
|
| 203 |
+
)
|
| 204 |
+
continue
|
| 205 |
+
if encoding_iana in {"utf_7"} and not bom_or_sig_available:
|
| 206 |
+
logger.log(
|
| 207 |
+
TRACE,
|
| 208 |
+
"Encoding %s won't be tested as-is because detection is unreliable without BOM/SIG.",
|
| 209 |
+
encoding_iana,
|
| 210 |
+
)
|
| 211 |
+
continue
|
| 212 |
+
|
| 213 |
+
try:
|
| 214 |
+
is_multi_byte_decoder: bool = is_multi_byte_encoding(encoding_iana)
|
| 215 |
+
except (ModuleNotFoundError, ImportError):
|
| 216 |
+
logger.log(
|
| 217 |
+
TRACE,
|
| 218 |
+
"Encoding %s does not provide an IncrementalDecoder",
|
| 219 |
+
encoding_iana,
|
| 220 |
+
)
|
| 221 |
+
continue
|
| 222 |
+
|
| 223 |
+
try:
|
| 224 |
+
if is_too_large_sequence and is_multi_byte_decoder is False:
|
| 225 |
+
str(
|
| 226 |
+
(
|
| 227 |
+
sequences[: int(50e4)]
|
| 228 |
+
if strip_sig_or_bom is False
|
| 229 |
+
else sequences[len(sig_payload) : int(50e4)]
|
| 230 |
+
),
|
| 231 |
+
encoding=encoding_iana,
|
| 232 |
+
)
|
| 233 |
+
else:
|
| 234 |
+
decoded_payload = str(
|
| 235 |
+
(
|
| 236 |
+
sequences
|
| 237 |
+
if strip_sig_or_bom is False
|
| 238 |
+
else sequences[len(sig_payload) :]
|
| 239 |
+
),
|
| 240 |
+
encoding=encoding_iana,
|
| 241 |
+
)
|
| 242 |
+
except (UnicodeDecodeError, LookupError) as e:
|
| 243 |
+
if not isinstance(e, LookupError):
|
| 244 |
+
logger.log(
|
| 245 |
+
TRACE,
|
| 246 |
+
"Code page %s does not fit given bytes sequence at ALL. %s",
|
| 247 |
+
encoding_iana,
|
| 248 |
+
str(e),
|
| 249 |
+
)
|
| 250 |
+
tested_but_hard_failure.append(encoding_iana)
|
| 251 |
+
continue
|
| 252 |
+
|
| 253 |
+
similar_soft_failure_test: bool = False
|
| 254 |
+
|
| 255 |
+
for encoding_soft_failed in tested_but_soft_failure:
|
| 256 |
+
if is_cp_similar(encoding_iana, encoding_soft_failed):
|
| 257 |
+
similar_soft_failure_test = True
|
| 258 |
+
break
|
| 259 |
+
|
| 260 |
+
if similar_soft_failure_test:
|
| 261 |
+
logger.log(
|
| 262 |
+
TRACE,
|
| 263 |
+
"%s is deemed too similar to code page %s and was consider unsuited already. Continuing!",
|
| 264 |
+
encoding_iana,
|
| 265 |
+
encoding_soft_failed,
|
| 266 |
+
)
|
| 267 |
+
continue
|
| 268 |
+
|
| 269 |
+
r_ = range(
|
| 270 |
+
0 if not bom_or_sig_available else len(sig_payload),
|
| 271 |
+
length,
|
| 272 |
+
int(length / steps),
|
| 273 |
+
)
|
| 274 |
+
|
| 275 |
+
multi_byte_bonus: bool = (
|
| 276 |
+
is_multi_byte_decoder
|
| 277 |
+
and decoded_payload is not None
|
| 278 |
+
and len(decoded_payload) < length
|
| 279 |
+
)
|
| 280 |
+
|
| 281 |
+
if multi_byte_bonus:
|
| 282 |
+
logger.log(
|
| 283 |
+
TRACE,
|
| 284 |
+
"Code page %s is a multi byte encoding table and it appear that at least one character "
|
| 285 |
+
"was encoded using n-bytes.",
|
| 286 |
+
encoding_iana,
|
| 287 |
+
)
|
| 288 |
+
|
| 289 |
+
max_chunk_gave_up: int = int(len(r_) / 4)
|
| 290 |
+
|
| 291 |
+
max_chunk_gave_up = max(max_chunk_gave_up, 2)
|
| 292 |
+
early_stop_count: int = 0
|
| 293 |
+
lazy_str_hard_failure = False
|
| 294 |
+
|
| 295 |
+
md_chunks: list[str] = []
|
| 296 |
+
md_ratios = []
|
| 297 |
+
|
| 298 |
+
try:
|
| 299 |
+
for chunk in cut_sequence_chunks(
|
| 300 |
+
sequences,
|
| 301 |
+
encoding_iana,
|
| 302 |
+
r_,
|
| 303 |
+
chunk_size,
|
| 304 |
+
bom_or_sig_available,
|
| 305 |
+
strip_sig_or_bom,
|
| 306 |
+
sig_payload,
|
| 307 |
+
is_multi_byte_decoder,
|
| 308 |
+
decoded_payload,
|
| 309 |
+
):
|
| 310 |
+
md_chunks.append(chunk)
|
| 311 |
+
|
| 312 |
+
md_ratios.append(
|
| 313 |
+
mess_ratio(
|
| 314 |
+
chunk,
|
| 315 |
+
threshold,
|
| 316 |
+
explain is True and 1 <= len(cp_isolation) <= 2,
|
| 317 |
+
)
|
| 318 |
+
)
|
| 319 |
+
|
| 320 |
+
if md_ratios[-1] >= threshold:
|
| 321 |
+
early_stop_count += 1
|
| 322 |
+
|
| 323 |
+
if (early_stop_count >= max_chunk_gave_up) or (
|
| 324 |
+
bom_or_sig_available and strip_sig_or_bom is False
|
| 325 |
+
):
|
| 326 |
+
break
|
| 327 |
+
except (
|
| 328 |
+
UnicodeDecodeError
|
| 329 |
+
) as e: # Lazy str loading may have missed something there
|
| 330 |
+
logger.log(
|
| 331 |
+
TRACE,
|
| 332 |
+
"LazyStr Loading: After MD chunk decode, code page %s does not fit given bytes sequence at ALL. %s",
|
| 333 |
+
encoding_iana,
|
| 334 |
+
str(e),
|
| 335 |
+
)
|
| 336 |
+
early_stop_count = max_chunk_gave_up
|
| 337 |
+
lazy_str_hard_failure = True
|
| 338 |
+
|
| 339 |
+
# We might want to check the sequence again with the whole content
|
| 340 |
+
# Only if initial MD tests passes
|
| 341 |
+
if (
|
| 342 |
+
not lazy_str_hard_failure
|
| 343 |
+
and is_too_large_sequence
|
| 344 |
+
and not is_multi_byte_decoder
|
| 345 |
+
):
|
| 346 |
+
try:
|
| 347 |
+
sequences[int(50e3) :].decode(encoding_iana, errors="strict")
|
| 348 |
+
except UnicodeDecodeError as e:
|
| 349 |
+
logger.log(
|
| 350 |
+
TRACE,
|
| 351 |
+
"LazyStr Loading: After final lookup, code page %s does not fit given bytes sequence at ALL. %s",
|
| 352 |
+
encoding_iana,
|
| 353 |
+
str(e),
|
| 354 |
+
)
|
| 355 |
+
tested_but_hard_failure.append(encoding_iana)
|
| 356 |
+
continue
|
| 357 |
+
|
| 358 |
+
mean_mess_ratio: float = sum(md_ratios) / len(md_ratios) if md_ratios else 0.0
|
| 359 |
+
if mean_mess_ratio >= threshold or early_stop_count >= max_chunk_gave_up:
|
| 360 |
+
tested_but_soft_failure.append(encoding_iana)
|
| 361 |
+
logger.log(
|
| 362 |
+
TRACE,
|
| 363 |
+
"%s was excluded because of initial chaos probing. Gave up %i time(s). "
|
| 364 |
+
"Computed mean chaos is %f %%.",
|
| 365 |
+
encoding_iana,
|
| 366 |
+
early_stop_count,
|
| 367 |
+
round(mean_mess_ratio * 100, ndigits=3),
|
| 368 |
+
)
|
| 369 |
+
# Preparing those fallbacks in case we got nothing.
|
| 370 |
+
if (
|
| 371 |
+
enable_fallback
|
| 372 |
+
and encoding_iana in ["ascii", "utf_8", specified_encoding]
|
| 373 |
+
and not lazy_str_hard_failure
|
| 374 |
+
):
|
| 375 |
+
fallback_entry = CharsetMatch(
|
| 376 |
+
sequences,
|
| 377 |
+
encoding_iana,
|
| 378 |
+
threshold,
|
| 379 |
+
False,
|
| 380 |
+
[],
|
| 381 |
+
decoded_payload,
|
| 382 |
+
preemptive_declaration=specified_encoding,
|
| 383 |
+
)
|
| 384 |
+
if encoding_iana == specified_encoding:
|
| 385 |
+
fallback_specified = fallback_entry
|
| 386 |
+
elif encoding_iana == "ascii":
|
| 387 |
+
fallback_ascii = fallback_entry
|
| 388 |
+
else:
|
| 389 |
+
fallback_u8 = fallback_entry
|
| 390 |
+
continue
|
| 391 |
+
|
| 392 |
+
logger.log(
|
| 393 |
+
TRACE,
|
| 394 |
+
"%s passed initial chaos probing. Mean measured chaos is %f %%",
|
| 395 |
+
encoding_iana,
|
| 396 |
+
round(mean_mess_ratio * 100, ndigits=3),
|
| 397 |
+
)
|
| 398 |
+
|
| 399 |
+
if not is_multi_byte_decoder:
|
| 400 |
+
target_languages: list[str] = encoding_languages(encoding_iana)
|
| 401 |
+
else:
|
| 402 |
+
target_languages = mb_encoding_languages(encoding_iana)
|
| 403 |
+
|
| 404 |
+
if target_languages:
|
| 405 |
+
logger.log(
|
| 406 |
+
TRACE,
|
| 407 |
+
"{} should target any language(s) of {}".format(
|
| 408 |
+
encoding_iana, str(target_languages)
|
| 409 |
+
),
|
| 410 |
+
)
|
| 411 |
+
|
| 412 |
+
cd_ratios = []
|
| 413 |
+
|
| 414 |
+
# We shall skip the CD when its about ASCII
|
| 415 |
+
# Most of the time its not relevant to run "language-detection" on it.
|
| 416 |
+
if encoding_iana != "ascii":
|
| 417 |
+
for chunk in md_chunks:
|
| 418 |
+
chunk_languages = coherence_ratio(
|
| 419 |
+
chunk,
|
| 420 |
+
language_threshold,
|
| 421 |
+
",".join(target_languages) if target_languages else None,
|
| 422 |
+
)
|
| 423 |
+
|
| 424 |
+
cd_ratios.append(chunk_languages)
|
| 425 |
+
|
| 426 |
+
cd_ratios_merged = merge_coherence_ratios(cd_ratios)
|
| 427 |
+
|
| 428 |
+
if cd_ratios_merged:
|
| 429 |
+
logger.log(
|
| 430 |
+
TRACE,
|
| 431 |
+
"We detected language {} using {}".format(
|
| 432 |
+
cd_ratios_merged, encoding_iana
|
| 433 |
+
),
|
| 434 |
+
)
|
| 435 |
+
|
| 436 |
+
current_match = CharsetMatch(
|
| 437 |
+
sequences,
|
| 438 |
+
encoding_iana,
|
| 439 |
+
mean_mess_ratio,
|
| 440 |
+
bom_or_sig_available,
|
| 441 |
+
cd_ratios_merged,
|
| 442 |
+
(
|
| 443 |
+
decoded_payload
|
| 444 |
+
if (
|
| 445 |
+
is_too_large_sequence is False
|
| 446 |
+
or encoding_iana in [specified_encoding, "ascii", "utf_8"]
|
| 447 |
+
)
|
| 448 |
+
else None
|
| 449 |
+
),
|
| 450 |
+
preemptive_declaration=specified_encoding,
|
| 451 |
+
)
|
| 452 |
+
|
| 453 |
+
results.append(current_match)
|
| 454 |
+
|
| 455 |
+
if (
|
| 456 |
+
encoding_iana in [specified_encoding, "ascii", "utf_8"]
|
| 457 |
+
and mean_mess_ratio < 0.1
|
| 458 |
+
):
|
| 459 |
+
# If md says nothing to worry about, then... stop immediately!
|
| 460 |
+
if mean_mess_ratio == 0.0:
|
| 461 |
+
logger.debug(
|
| 462 |
+
"Encoding detection: %s is most likely the one.",
|
| 463 |
+
current_match.encoding,
|
| 464 |
+
)
|
| 465 |
+
if explain: # Defensive: ensure exit path clean handler
|
| 466 |
+
logger.removeHandler(explain_handler)
|
| 467 |
+
logger.setLevel(previous_logger_level)
|
| 468 |
+
return CharsetMatches([current_match])
|
| 469 |
+
|
| 470 |
+
early_stop_results.append(current_match)
|
| 471 |
+
|
| 472 |
+
if (
|
| 473 |
+
len(early_stop_results)
|
| 474 |
+
and (specified_encoding is None or specified_encoding in tested)
|
| 475 |
+
and "ascii" in tested
|
| 476 |
+
and "utf_8" in tested
|
| 477 |
+
):
|
| 478 |
+
probable_result: CharsetMatch = early_stop_results.best() # type: ignore[assignment]
|
| 479 |
+
logger.debug(
|
| 480 |
+
"Encoding detection: %s is most likely the one.",
|
| 481 |
+
probable_result.encoding,
|
| 482 |
+
)
|
| 483 |
+
if explain: # Defensive: ensure exit path clean handler
|
| 484 |
+
logger.removeHandler(explain_handler)
|
| 485 |
+
logger.setLevel(previous_logger_level)
|
| 486 |
+
|
| 487 |
+
return CharsetMatches([probable_result])
|
| 488 |
+
|
| 489 |
+
if encoding_iana == sig_encoding:
|
| 490 |
+
logger.debug(
|
| 491 |
+
"Encoding detection: %s is most likely the one as we detected a BOM or SIG within "
|
| 492 |
+
"the beginning of the sequence.",
|
| 493 |
+
encoding_iana,
|
| 494 |
+
)
|
| 495 |
+
if explain: # Defensive: ensure exit path clean handler
|
| 496 |
+
logger.removeHandler(explain_handler)
|
| 497 |
+
logger.setLevel(previous_logger_level)
|
| 498 |
+
return CharsetMatches([results[encoding_iana]])
|
| 499 |
+
|
| 500 |
+
if len(results) == 0:
|
| 501 |
+
if fallback_u8 or fallback_ascii or fallback_specified:
|
| 502 |
+
logger.log(
|
| 503 |
+
TRACE,
|
| 504 |
+
"Nothing got out of the detection process. Using ASCII/UTF-8/Specified fallback.",
|
| 505 |
+
)
|
| 506 |
+
|
| 507 |
+
if fallback_specified:
|
| 508 |
+
logger.debug(
|
| 509 |
+
"Encoding detection: %s will be used as a fallback match",
|
| 510 |
+
fallback_specified.encoding,
|
| 511 |
+
)
|
| 512 |
+
results.append(fallback_specified)
|
| 513 |
+
elif (
|
| 514 |
+
(fallback_u8 and fallback_ascii is None)
|
| 515 |
+
or (
|
| 516 |
+
fallback_u8
|
| 517 |
+
and fallback_ascii
|
| 518 |
+
and fallback_u8.fingerprint != fallback_ascii.fingerprint
|
| 519 |
+
)
|
| 520 |
+
or (fallback_u8 is not None)
|
| 521 |
+
):
|
| 522 |
+
logger.debug("Encoding detection: utf_8 will be used as a fallback match")
|
| 523 |
+
results.append(fallback_u8)
|
| 524 |
+
elif fallback_ascii:
|
| 525 |
+
logger.debug("Encoding detection: ascii will be used as a fallback match")
|
| 526 |
+
results.append(fallback_ascii)
|
| 527 |
+
|
| 528 |
+
if results:
|
| 529 |
+
logger.debug(
|
| 530 |
+
"Encoding detection: Found %s as plausible (best-candidate) for content. With %i alternatives.",
|
| 531 |
+
results.best().encoding, # type: ignore
|
| 532 |
+
len(results) - 1,
|
| 533 |
+
)
|
| 534 |
+
else:
|
| 535 |
+
logger.debug("Encoding detection: Unable to determine any suitable charset.")
|
| 536 |
+
|
| 537 |
+
if explain:
|
| 538 |
+
logger.removeHandler(explain_handler)
|
| 539 |
+
logger.setLevel(previous_logger_level)
|
| 540 |
+
|
| 541 |
+
return results
|
| 542 |
+
|
| 543 |
+
|
| 544 |
+
def from_fp(
|
| 545 |
+
fp: BinaryIO,
|
| 546 |
+
steps: int = 5,
|
| 547 |
+
chunk_size: int = 512,
|
| 548 |
+
threshold: float = 0.20,
|
| 549 |
+
cp_isolation: list[str] | None = None,
|
| 550 |
+
cp_exclusion: list[str] | None = None,
|
| 551 |
+
preemptive_behaviour: bool = True,
|
| 552 |
+
explain: bool = False,
|
| 553 |
+
language_threshold: float = 0.1,
|
| 554 |
+
enable_fallback: bool = True,
|
| 555 |
+
) -> CharsetMatches:
|
| 556 |
+
"""
|
| 557 |
+
Same thing than the function from_bytes but using a file pointer that is already ready.
|
| 558 |
+
Will not close the file pointer.
|
| 559 |
+
"""
|
| 560 |
+
return from_bytes(
|
| 561 |
+
fp.read(),
|
| 562 |
+
steps,
|
| 563 |
+
chunk_size,
|
| 564 |
+
threshold,
|
| 565 |
+
cp_isolation,
|
| 566 |
+
cp_exclusion,
|
| 567 |
+
preemptive_behaviour,
|
| 568 |
+
explain,
|
| 569 |
+
language_threshold,
|
| 570 |
+
enable_fallback,
|
| 571 |
+
)
|
| 572 |
+
|
| 573 |
+
|
| 574 |
+
def from_path(
|
| 575 |
+
path: str | bytes | PathLike, # type: ignore[type-arg]
|
| 576 |
+
steps: int = 5,
|
| 577 |
+
chunk_size: int = 512,
|
| 578 |
+
threshold: float = 0.20,
|
| 579 |
+
cp_isolation: list[str] | None = None,
|
| 580 |
+
cp_exclusion: list[str] | None = None,
|
| 581 |
+
preemptive_behaviour: bool = True,
|
| 582 |
+
explain: bool = False,
|
| 583 |
+
language_threshold: float = 0.1,
|
| 584 |
+
enable_fallback: bool = True,
|
| 585 |
+
) -> CharsetMatches:
|
| 586 |
+
"""
|
| 587 |
+
Same thing than the function from_bytes but with one extra step. Opening and reading given file path in binary mode.
|
| 588 |
+
Can raise IOError.
|
| 589 |
+
"""
|
| 590 |
+
with open(path, "rb") as fp:
|
| 591 |
+
return from_fp(
|
| 592 |
+
fp,
|
| 593 |
+
steps,
|
| 594 |
+
chunk_size,
|
| 595 |
+
threshold,
|
| 596 |
+
cp_isolation,
|
| 597 |
+
cp_exclusion,
|
| 598 |
+
preemptive_behaviour,
|
| 599 |
+
explain,
|
| 600 |
+
language_threshold,
|
| 601 |
+
enable_fallback,
|
| 602 |
+
)
|
| 603 |
+
|
| 604 |
+
|
| 605 |
+
def is_binary(
|
| 606 |
+
fp_or_path_or_payload: PathLike | str | BinaryIO | bytes, # type: ignore[type-arg]
|
| 607 |
+
steps: int = 5,
|
| 608 |
+
chunk_size: int = 512,
|
| 609 |
+
threshold: float = 0.20,
|
| 610 |
+
cp_isolation: list[str] | None = None,
|
| 611 |
+
cp_exclusion: list[str] | None = None,
|
| 612 |
+
preemptive_behaviour: bool = True,
|
| 613 |
+
explain: bool = False,
|
| 614 |
+
language_threshold: float = 0.1,
|
| 615 |
+
enable_fallback: bool = False,
|
| 616 |
+
) -> bool:
|
| 617 |
+
"""
|
| 618 |
+
Detect if the given input (file, bytes, or path) points to a binary file. aka. not a string.
|
| 619 |
+
Based on the same main heuristic algorithms and default kwargs at the sole exception that fallbacks match
|
| 620 |
+
are disabled to be stricter around ASCII-compatible but unlikely to be a string.
|
| 621 |
+
"""
|
| 622 |
+
if isinstance(fp_or_path_or_payload, (str, PathLike)):
|
| 623 |
+
guesses = from_path(
|
| 624 |
+
fp_or_path_or_payload,
|
| 625 |
+
steps=steps,
|
| 626 |
+
chunk_size=chunk_size,
|
| 627 |
+
threshold=threshold,
|
| 628 |
+
cp_isolation=cp_isolation,
|
| 629 |
+
cp_exclusion=cp_exclusion,
|
| 630 |
+
preemptive_behaviour=preemptive_behaviour,
|
| 631 |
+
explain=explain,
|
| 632 |
+
language_threshold=language_threshold,
|
| 633 |
+
enable_fallback=enable_fallback,
|
| 634 |
+
)
|
| 635 |
+
elif isinstance(
|
| 636 |
+
fp_or_path_or_payload,
|
| 637 |
+
(
|
| 638 |
+
bytes,
|
| 639 |
+
bytearray,
|
| 640 |
+
),
|
| 641 |
+
):
|
| 642 |
+
guesses = from_bytes(
|
| 643 |
+
fp_or_path_or_payload,
|
| 644 |
+
steps=steps,
|
| 645 |
+
chunk_size=chunk_size,
|
| 646 |
+
threshold=threshold,
|
| 647 |
+
cp_isolation=cp_isolation,
|
| 648 |
+
cp_exclusion=cp_exclusion,
|
| 649 |
+
preemptive_behaviour=preemptive_behaviour,
|
| 650 |
+
explain=explain,
|
| 651 |
+
language_threshold=language_threshold,
|
| 652 |
+
enable_fallback=enable_fallback,
|
| 653 |
+
)
|
| 654 |
+
else:
|
| 655 |
+
guesses = from_fp(
|
| 656 |
+
fp_or_path_or_payload,
|
| 657 |
+
steps=steps,
|
| 658 |
+
chunk_size=chunk_size,
|
| 659 |
+
threshold=threshold,
|
| 660 |
+
cp_isolation=cp_isolation,
|
| 661 |
+
cp_exclusion=cp_exclusion,
|
| 662 |
+
preemptive_behaviour=preemptive_behaviour,
|
| 663 |
+
explain=explain,
|
| 664 |
+
language_threshold=language_threshold,
|
| 665 |
+
enable_fallback=enable_fallback,
|
| 666 |
+
)
|
| 667 |
+
|
| 668 |
+
return not guesses
|
.venv/lib/python3.11/site-packages/charset_normalizer/cd.py
ADDED
|
@@ -0,0 +1,395 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
|
| 3 |
+
import importlib
|
| 4 |
+
from codecs import IncrementalDecoder
|
| 5 |
+
from collections import Counter
|
| 6 |
+
from functools import lru_cache
|
| 7 |
+
from typing import Counter as TypeCounter
|
| 8 |
+
|
| 9 |
+
from .constant import (
|
| 10 |
+
FREQUENCIES,
|
| 11 |
+
KO_NAMES,
|
| 12 |
+
LANGUAGE_SUPPORTED_COUNT,
|
| 13 |
+
TOO_SMALL_SEQUENCE,
|
| 14 |
+
ZH_NAMES,
|
| 15 |
+
)
|
| 16 |
+
from .md import is_suspiciously_successive_range
|
| 17 |
+
from .models import CoherenceMatches
|
| 18 |
+
from .utils import (
|
| 19 |
+
is_accentuated,
|
| 20 |
+
is_latin,
|
| 21 |
+
is_multi_byte_encoding,
|
| 22 |
+
is_unicode_range_secondary,
|
| 23 |
+
unicode_range,
|
| 24 |
+
)
|
| 25 |
+
|
| 26 |
+
|
| 27 |
+
def encoding_unicode_range(iana_name: str) -> list[str]:
|
| 28 |
+
"""
|
| 29 |
+
Return associated unicode ranges in a single byte code page.
|
| 30 |
+
"""
|
| 31 |
+
if is_multi_byte_encoding(iana_name):
|
| 32 |
+
raise OSError("Function not supported on multi-byte code page")
|
| 33 |
+
|
| 34 |
+
decoder = importlib.import_module(f"encodings.{iana_name}").IncrementalDecoder
|
| 35 |
+
|
| 36 |
+
p: IncrementalDecoder = decoder(errors="ignore")
|
| 37 |
+
seen_ranges: dict[str, int] = {}
|
| 38 |
+
character_count: int = 0
|
| 39 |
+
|
| 40 |
+
for i in range(0x40, 0xFF):
|
| 41 |
+
chunk: str = p.decode(bytes([i]))
|
| 42 |
+
|
| 43 |
+
if chunk:
|
| 44 |
+
character_range: str | None = unicode_range(chunk)
|
| 45 |
+
|
| 46 |
+
if character_range is None:
|
| 47 |
+
continue
|
| 48 |
+
|
| 49 |
+
if is_unicode_range_secondary(character_range) is False:
|
| 50 |
+
if character_range not in seen_ranges:
|
| 51 |
+
seen_ranges[character_range] = 0
|
| 52 |
+
seen_ranges[character_range] += 1
|
| 53 |
+
character_count += 1
|
| 54 |
+
|
| 55 |
+
return sorted(
|
| 56 |
+
[
|
| 57 |
+
character_range
|
| 58 |
+
for character_range in seen_ranges
|
| 59 |
+
if seen_ranges[character_range] / character_count >= 0.15
|
| 60 |
+
]
|
| 61 |
+
)
|
| 62 |
+
|
| 63 |
+
|
| 64 |
+
def unicode_range_languages(primary_range: str) -> list[str]:
|
| 65 |
+
"""
|
| 66 |
+
Return inferred languages used with a unicode range.
|
| 67 |
+
"""
|
| 68 |
+
languages: list[str] = []
|
| 69 |
+
|
| 70 |
+
for language, characters in FREQUENCIES.items():
|
| 71 |
+
for character in characters:
|
| 72 |
+
if unicode_range(character) == primary_range:
|
| 73 |
+
languages.append(language)
|
| 74 |
+
break
|
| 75 |
+
|
| 76 |
+
return languages
|
| 77 |
+
|
| 78 |
+
|
| 79 |
+
@lru_cache()
|
| 80 |
+
def encoding_languages(iana_name: str) -> list[str]:
|
| 81 |
+
"""
|
| 82 |
+
Single-byte encoding language association. Some code page are heavily linked to particular language(s).
|
| 83 |
+
This function does the correspondence.
|
| 84 |
+
"""
|
| 85 |
+
unicode_ranges: list[str] = encoding_unicode_range(iana_name)
|
| 86 |
+
primary_range: str | None = None
|
| 87 |
+
|
| 88 |
+
for specified_range in unicode_ranges:
|
| 89 |
+
if "Latin" not in specified_range:
|
| 90 |
+
primary_range = specified_range
|
| 91 |
+
break
|
| 92 |
+
|
| 93 |
+
if primary_range is None:
|
| 94 |
+
return ["Latin Based"]
|
| 95 |
+
|
| 96 |
+
return unicode_range_languages(primary_range)
|
| 97 |
+
|
| 98 |
+
|
| 99 |
+
@lru_cache()
|
| 100 |
+
def mb_encoding_languages(iana_name: str) -> list[str]:
|
| 101 |
+
"""
|
| 102 |
+
Multi-byte encoding language association. Some code page are heavily linked to particular language(s).
|
| 103 |
+
This function does the correspondence.
|
| 104 |
+
"""
|
| 105 |
+
if (
|
| 106 |
+
iana_name.startswith("shift_")
|
| 107 |
+
or iana_name.startswith("iso2022_jp")
|
| 108 |
+
or iana_name.startswith("euc_j")
|
| 109 |
+
or iana_name == "cp932"
|
| 110 |
+
):
|
| 111 |
+
return ["Japanese"]
|
| 112 |
+
if iana_name.startswith("gb") or iana_name in ZH_NAMES:
|
| 113 |
+
return ["Chinese"]
|
| 114 |
+
if iana_name.startswith("iso2022_kr") or iana_name in KO_NAMES:
|
| 115 |
+
return ["Korean"]
|
| 116 |
+
|
| 117 |
+
return []
|
| 118 |
+
|
| 119 |
+
|
| 120 |
+
@lru_cache(maxsize=LANGUAGE_SUPPORTED_COUNT)
|
| 121 |
+
def get_target_features(language: str) -> tuple[bool, bool]:
|
| 122 |
+
"""
|
| 123 |
+
Determine main aspects from a supported language if it contains accents and if is pure Latin.
|
| 124 |
+
"""
|
| 125 |
+
target_have_accents: bool = False
|
| 126 |
+
target_pure_latin: bool = True
|
| 127 |
+
|
| 128 |
+
for character in FREQUENCIES[language]:
|
| 129 |
+
if not target_have_accents and is_accentuated(character):
|
| 130 |
+
target_have_accents = True
|
| 131 |
+
if target_pure_latin and is_latin(character) is False:
|
| 132 |
+
target_pure_latin = False
|
| 133 |
+
|
| 134 |
+
return target_have_accents, target_pure_latin
|
| 135 |
+
|
| 136 |
+
|
| 137 |
+
def alphabet_languages(
|
| 138 |
+
characters: list[str], ignore_non_latin: bool = False
|
| 139 |
+
) -> list[str]:
|
| 140 |
+
"""
|
| 141 |
+
Return associated languages associated to given characters.
|
| 142 |
+
"""
|
| 143 |
+
languages: list[tuple[str, float]] = []
|
| 144 |
+
|
| 145 |
+
source_have_accents = any(is_accentuated(character) for character in characters)
|
| 146 |
+
|
| 147 |
+
for language, language_characters in FREQUENCIES.items():
|
| 148 |
+
target_have_accents, target_pure_latin = get_target_features(language)
|
| 149 |
+
|
| 150 |
+
if ignore_non_latin and target_pure_latin is False:
|
| 151 |
+
continue
|
| 152 |
+
|
| 153 |
+
if target_have_accents is False and source_have_accents:
|
| 154 |
+
continue
|
| 155 |
+
|
| 156 |
+
character_count: int = len(language_characters)
|
| 157 |
+
|
| 158 |
+
character_match_count: int = len(
|
| 159 |
+
[c for c in language_characters if c in characters]
|
| 160 |
+
)
|
| 161 |
+
|
| 162 |
+
ratio: float = character_match_count / character_count
|
| 163 |
+
|
| 164 |
+
if ratio >= 0.2:
|
| 165 |
+
languages.append((language, ratio))
|
| 166 |
+
|
| 167 |
+
languages = sorted(languages, key=lambda x: x[1], reverse=True)
|
| 168 |
+
|
| 169 |
+
return [compatible_language[0] for compatible_language in languages]
|
| 170 |
+
|
| 171 |
+
|
| 172 |
+
def characters_popularity_compare(
|
| 173 |
+
language: str, ordered_characters: list[str]
|
| 174 |
+
) -> float:
|
| 175 |
+
"""
|
| 176 |
+
Determine if a ordered characters list (by occurrence from most appearance to rarest) match a particular language.
|
| 177 |
+
The result is a ratio between 0. (absolutely no correspondence) and 1. (near perfect fit).
|
| 178 |
+
Beware that is function is not strict on the match in order to ease the detection. (Meaning close match is 1.)
|
| 179 |
+
"""
|
| 180 |
+
if language not in FREQUENCIES:
|
| 181 |
+
raise ValueError(f"{language} not available")
|
| 182 |
+
|
| 183 |
+
character_approved_count: int = 0
|
| 184 |
+
FREQUENCIES_language_set = set(FREQUENCIES[language])
|
| 185 |
+
|
| 186 |
+
ordered_characters_count: int = len(ordered_characters)
|
| 187 |
+
target_language_characters_count: int = len(FREQUENCIES[language])
|
| 188 |
+
|
| 189 |
+
large_alphabet: bool = target_language_characters_count > 26
|
| 190 |
+
|
| 191 |
+
for character, character_rank in zip(
|
| 192 |
+
ordered_characters, range(0, ordered_characters_count)
|
| 193 |
+
):
|
| 194 |
+
if character not in FREQUENCIES_language_set:
|
| 195 |
+
continue
|
| 196 |
+
|
| 197 |
+
character_rank_in_language: int = FREQUENCIES[language].index(character)
|
| 198 |
+
expected_projection_ratio: float = (
|
| 199 |
+
target_language_characters_count / ordered_characters_count
|
| 200 |
+
)
|
| 201 |
+
character_rank_projection: int = int(character_rank * expected_projection_ratio)
|
| 202 |
+
|
| 203 |
+
if (
|
| 204 |
+
large_alphabet is False
|
| 205 |
+
and abs(character_rank_projection - character_rank_in_language) > 4
|
| 206 |
+
):
|
| 207 |
+
continue
|
| 208 |
+
|
| 209 |
+
if (
|
| 210 |
+
large_alphabet is True
|
| 211 |
+
and abs(character_rank_projection - character_rank_in_language)
|
| 212 |
+
< target_language_characters_count / 3
|
| 213 |
+
):
|
| 214 |
+
character_approved_count += 1
|
| 215 |
+
continue
|
| 216 |
+
|
| 217 |
+
characters_before_source: list[str] = FREQUENCIES[language][
|
| 218 |
+
0:character_rank_in_language
|
| 219 |
+
]
|
| 220 |
+
characters_after_source: list[str] = FREQUENCIES[language][
|
| 221 |
+
character_rank_in_language:
|
| 222 |
+
]
|
| 223 |
+
characters_before: list[str] = ordered_characters[0:character_rank]
|
| 224 |
+
characters_after: list[str] = ordered_characters[character_rank:]
|
| 225 |
+
|
| 226 |
+
before_match_count: int = len(
|
| 227 |
+
set(characters_before) & set(characters_before_source)
|
| 228 |
+
)
|
| 229 |
+
|
| 230 |
+
after_match_count: int = len(
|
| 231 |
+
set(characters_after) & set(characters_after_source)
|
| 232 |
+
)
|
| 233 |
+
|
| 234 |
+
if len(characters_before_source) == 0 and before_match_count <= 4:
|
| 235 |
+
character_approved_count += 1
|
| 236 |
+
continue
|
| 237 |
+
|
| 238 |
+
if len(characters_after_source) == 0 and after_match_count <= 4:
|
| 239 |
+
character_approved_count += 1
|
| 240 |
+
continue
|
| 241 |
+
|
| 242 |
+
if (
|
| 243 |
+
before_match_count / len(characters_before_source) >= 0.4
|
| 244 |
+
or after_match_count / len(characters_after_source) >= 0.4
|
| 245 |
+
):
|
| 246 |
+
character_approved_count += 1
|
| 247 |
+
continue
|
| 248 |
+
|
| 249 |
+
return character_approved_count / len(ordered_characters)
|
| 250 |
+
|
| 251 |
+
|
| 252 |
+
def alpha_unicode_split(decoded_sequence: str) -> list[str]:
|
| 253 |
+
"""
|
| 254 |
+
Given a decoded text sequence, return a list of str. Unicode range / alphabet separation.
|
| 255 |
+
Ex. a text containing English/Latin with a bit a Hebrew will return two items in the resulting list;
|
| 256 |
+
One containing the latin letters and the other hebrew.
|
| 257 |
+
"""
|
| 258 |
+
layers: dict[str, str] = {}
|
| 259 |
+
|
| 260 |
+
for character in decoded_sequence:
|
| 261 |
+
if character.isalpha() is False:
|
| 262 |
+
continue
|
| 263 |
+
|
| 264 |
+
character_range: str | None = unicode_range(character)
|
| 265 |
+
|
| 266 |
+
if character_range is None:
|
| 267 |
+
continue
|
| 268 |
+
|
| 269 |
+
layer_target_range: str | None = None
|
| 270 |
+
|
| 271 |
+
for discovered_range in layers:
|
| 272 |
+
if (
|
| 273 |
+
is_suspiciously_successive_range(discovered_range, character_range)
|
| 274 |
+
is False
|
| 275 |
+
):
|
| 276 |
+
layer_target_range = discovered_range
|
| 277 |
+
break
|
| 278 |
+
|
| 279 |
+
if layer_target_range is None:
|
| 280 |
+
layer_target_range = character_range
|
| 281 |
+
|
| 282 |
+
if layer_target_range not in layers:
|
| 283 |
+
layers[layer_target_range] = character.lower()
|
| 284 |
+
continue
|
| 285 |
+
|
| 286 |
+
layers[layer_target_range] += character.lower()
|
| 287 |
+
|
| 288 |
+
return list(layers.values())
|
| 289 |
+
|
| 290 |
+
|
| 291 |
+
def merge_coherence_ratios(results: list[CoherenceMatches]) -> CoherenceMatches:
|
| 292 |
+
"""
|
| 293 |
+
This function merge results previously given by the function coherence_ratio.
|
| 294 |
+
The return type is the same as coherence_ratio.
|
| 295 |
+
"""
|
| 296 |
+
per_language_ratios: dict[str, list[float]] = {}
|
| 297 |
+
for result in results:
|
| 298 |
+
for sub_result in result:
|
| 299 |
+
language, ratio = sub_result
|
| 300 |
+
if language not in per_language_ratios:
|
| 301 |
+
per_language_ratios[language] = [ratio]
|
| 302 |
+
continue
|
| 303 |
+
per_language_ratios[language].append(ratio)
|
| 304 |
+
|
| 305 |
+
merge = [
|
| 306 |
+
(
|
| 307 |
+
language,
|
| 308 |
+
round(
|
| 309 |
+
sum(per_language_ratios[language]) / len(per_language_ratios[language]),
|
| 310 |
+
4,
|
| 311 |
+
),
|
| 312 |
+
)
|
| 313 |
+
for language in per_language_ratios
|
| 314 |
+
]
|
| 315 |
+
|
| 316 |
+
return sorted(merge, key=lambda x: x[1], reverse=True)
|
| 317 |
+
|
| 318 |
+
|
| 319 |
+
def filter_alt_coherence_matches(results: CoherenceMatches) -> CoherenceMatches:
|
| 320 |
+
"""
|
| 321 |
+
We shall NOT return "English—" in CoherenceMatches because it is an alternative
|
| 322 |
+
of "English". This function only keeps the best match and remove the em-dash in it.
|
| 323 |
+
"""
|
| 324 |
+
index_results: dict[str, list[float]] = dict()
|
| 325 |
+
|
| 326 |
+
for result in results:
|
| 327 |
+
language, ratio = result
|
| 328 |
+
no_em_name: str = language.replace("—", "")
|
| 329 |
+
|
| 330 |
+
if no_em_name not in index_results:
|
| 331 |
+
index_results[no_em_name] = []
|
| 332 |
+
|
| 333 |
+
index_results[no_em_name].append(ratio)
|
| 334 |
+
|
| 335 |
+
if any(len(index_results[e]) > 1 for e in index_results):
|
| 336 |
+
filtered_results: CoherenceMatches = []
|
| 337 |
+
|
| 338 |
+
for language in index_results:
|
| 339 |
+
filtered_results.append((language, max(index_results[language])))
|
| 340 |
+
|
| 341 |
+
return filtered_results
|
| 342 |
+
|
| 343 |
+
return results
|
| 344 |
+
|
| 345 |
+
|
| 346 |
+
@lru_cache(maxsize=2048)
|
| 347 |
+
def coherence_ratio(
|
| 348 |
+
decoded_sequence: str, threshold: float = 0.1, lg_inclusion: str | None = None
|
| 349 |
+
) -> CoherenceMatches:
|
| 350 |
+
"""
|
| 351 |
+
Detect ANY language that can be identified in given sequence. The sequence will be analysed by layers.
|
| 352 |
+
A layer = Character extraction by alphabets/ranges.
|
| 353 |
+
"""
|
| 354 |
+
|
| 355 |
+
results: list[tuple[str, float]] = []
|
| 356 |
+
ignore_non_latin: bool = False
|
| 357 |
+
|
| 358 |
+
sufficient_match_count: int = 0
|
| 359 |
+
|
| 360 |
+
lg_inclusion_list = lg_inclusion.split(",") if lg_inclusion is not None else []
|
| 361 |
+
if "Latin Based" in lg_inclusion_list:
|
| 362 |
+
ignore_non_latin = True
|
| 363 |
+
lg_inclusion_list.remove("Latin Based")
|
| 364 |
+
|
| 365 |
+
for layer in alpha_unicode_split(decoded_sequence):
|
| 366 |
+
sequence_frequencies: TypeCounter[str] = Counter(layer)
|
| 367 |
+
most_common = sequence_frequencies.most_common()
|
| 368 |
+
|
| 369 |
+
character_count: int = sum(o for c, o in most_common)
|
| 370 |
+
|
| 371 |
+
if character_count <= TOO_SMALL_SEQUENCE:
|
| 372 |
+
continue
|
| 373 |
+
|
| 374 |
+
popular_character_ordered: list[str] = [c for c, o in most_common]
|
| 375 |
+
|
| 376 |
+
for language in lg_inclusion_list or alphabet_languages(
|
| 377 |
+
popular_character_ordered, ignore_non_latin
|
| 378 |
+
):
|
| 379 |
+
ratio: float = characters_popularity_compare(
|
| 380 |
+
language, popular_character_ordered
|
| 381 |
+
)
|
| 382 |
+
|
| 383 |
+
if ratio < threshold:
|
| 384 |
+
continue
|
| 385 |
+
elif ratio >= 0.8:
|
| 386 |
+
sufficient_match_count += 1
|
| 387 |
+
|
| 388 |
+
results.append((language, round(ratio, 4)))
|
| 389 |
+
|
| 390 |
+
if sufficient_match_count >= 3:
|
| 391 |
+
break
|
| 392 |
+
|
| 393 |
+
return sorted(
|
| 394 |
+
filter_alt_coherence_matches(results), key=lambda x: x[1], reverse=True
|
| 395 |
+
)
|
.venv/lib/python3.11/site-packages/charset_normalizer/constant.py
ADDED
|
@@ -0,0 +1,1998 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
|
| 3 |
+
from codecs import BOM_UTF8, BOM_UTF16_BE, BOM_UTF16_LE, BOM_UTF32_BE, BOM_UTF32_LE
|
| 4 |
+
from encodings.aliases import aliases
|
| 5 |
+
from re import IGNORECASE
|
| 6 |
+
from re import compile as re_compile
|
| 7 |
+
|
| 8 |
+
# Contain for each eligible encoding a list of/item bytes SIG/BOM
|
| 9 |
+
ENCODING_MARKS: dict[str, bytes | list[bytes]] = {
|
| 10 |
+
"utf_8": BOM_UTF8,
|
| 11 |
+
"utf_7": [
|
| 12 |
+
b"\x2b\x2f\x76\x38",
|
| 13 |
+
b"\x2b\x2f\x76\x39",
|
| 14 |
+
b"\x2b\x2f\x76\x2b",
|
| 15 |
+
b"\x2b\x2f\x76\x2f",
|
| 16 |
+
b"\x2b\x2f\x76\x38\x2d",
|
| 17 |
+
],
|
| 18 |
+
"gb18030": b"\x84\x31\x95\x33",
|
| 19 |
+
"utf_32": [BOM_UTF32_BE, BOM_UTF32_LE],
|
| 20 |
+
"utf_16": [BOM_UTF16_BE, BOM_UTF16_LE],
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
TOO_SMALL_SEQUENCE: int = 32
|
| 24 |
+
TOO_BIG_SEQUENCE: int = int(10e6)
|
| 25 |
+
|
| 26 |
+
UTF8_MAXIMAL_ALLOCATION: int = 1_112_064
|
| 27 |
+
|
| 28 |
+
# Up-to-date Unicode ucd/15.0.0
|
| 29 |
+
UNICODE_RANGES_COMBINED: dict[str, range] = {
|
| 30 |
+
"Control character": range(32),
|
| 31 |
+
"Basic Latin": range(32, 128),
|
| 32 |
+
"Latin-1 Supplement": range(128, 256),
|
| 33 |
+
"Latin Extended-A": range(256, 384),
|
| 34 |
+
"Latin Extended-B": range(384, 592),
|
| 35 |
+
"IPA Extensions": range(592, 688),
|
| 36 |
+
"Spacing Modifier Letters": range(688, 768),
|
| 37 |
+
"Combining Diacritical Marks": range(768, 880),
|
| 38 |
+
"Greek and Coptic": range(880, 1024),
|
| 39 |
+
"Cyrillic": range(1024, 1280),
|
| 40 |
+
"Cyrillic Supplement": range(1280, 1328),
|
| 41 |
+
"Armenian": range(1328, 1424),
|
| 42 |
+
"Hebrew": range(1424, 1536),
|
| 43 |
+
"Arabic": range(1536, 1792),
|
| 44 |
+
"Syriac": range(1792, 1872),
|
| 45 |
+
"Arabic Supplement": range(1872, 1920),
|
| 46 |
+
"Thaana": range(1920, 1984),
|
| 47 |
+
"NKo": range(1984, 2048),
|
| 48 |
+
"Samaritan": range(2048, 2112),
|
| 49 |
+
"Mandaic": range(2112, 2144),
|
| 50 |
+
"Syriac Supplement": range(2144, 2160),
|
| 51 |
+
"Arabic Extended-B": range(2160, 2208),
|
| 52 |
+
"Arabic Extended-A": range(2208, 2304),
|
| 53 |
+
"Devanagari": range(2304, 2432),
|
| 54 |
+
"Bengali": range(2432, 2560),
|
| 55 |
+
"Gurmukhi": range(2560, 2688),
|
| 56 |
+
"Gujarati": range(2688, 2816),
|
| 57 |
+
"Oriya": range(2816, 2944),
|
| 58 |
+
"Tamil": range(2944, 3072),
|
| 59 |
+
"Telugu": range(3072, 3200),
|
| 60 |
+
"Kannada": range(3200, 3328),
|
| 61 |
+
"Malayalam": range(3328, 3456),
|
| 62 |
+
"Sinhala": range(3456, 3584),
|
| 63 |
+
"Thai": range(3584, 3712),
|
| 64 |
+
"Lao": range(3712, 3840),
|
| 65 |
+
"Tibetan": range(3840, 4096),
|
| 66 |
+
"Myanmar": range(4096, 4256),
|
| 67 |
+
"Georgian": range(4256, 4352),
|
| 68 |
+
"Hangul Jamo": range(4352, 4608),
|
| 69 |
+
"Ethiopic": range(4608, 4992),
|
| 70 |
+
"Ethiopic Supplement": range(4992, 5024),
|
| 71 |
+
"Cherokee": range(5024, 5120),
|
| 72 |
+
"Unified Canadian Aboriginal Syllabics": range(5120, 5760),
|
| 73 |
+
"Ogham": range(5760, 5792),
|
| 74 |
+
"Runic": range(5792, 5888),
|
| 75 |
+
"Tagalog": range(5888, 5920),
|
| 76 |
+
"Hanunoo": range(5920, 5952),
|
| 77 |
+
"Buhid": range(5952, 5984),
|
| 78 |
+
"Tagbanwa": range(5984, 6016),
|
| 79 |
+
"Khmer": range(6016, 6144),
|
| 80 |
+
"Mongolian": range(6144, 6320),
|
| 81 |
+
"Unified Canadian Aboriginal Syllabics Extended": range(6320, 6400),
|
| 82 |
+
"Limbu": range(6400, 6480),
|
| 83 |
+
"Tai Le": range(6480, 6528),
|
| 84 |
+
"New Tai Lue": range(6528, 6624),
|
| 85 |
+
"Khmer Symbols": range(6624, 6656),
|
| 86 |
+
"Buginese": range(6656, 6688),
|
| 87 |
+
"Tai Tham": range(6688, 6832),
|
| 88 |
+
"Combining Diacritical Marks Extended": range(6832, 6912),
|
| 89 |
+
"Balinese": range(6912, 7040),
|
| 90 |
+
"Sundanese": range(7040, 7104),
|
| 91 |
+
"Batak": range(7104, 7168),
|
| 92 |
+
"Lepcha": range(7168, 7248),
|
| 93 |
+
"Ol Chiki": range(7248, 7296),
|
| 94 |
+
"Cyrillic Extended-C": range(7296, 7312),
|
| 95 |
+
"Georgian Extended": range(7312, 7360),
|
| 96 |
+
"Sundanese Supplement": range(7360, 7376),
|
| 97 |
+
"Vedic Extensions": range(7376, 7424),
|
| 98 |
+
"Phonetic Extensions": range(7424, 7552),
|
| 99 |
+
"Phonetic Extensions Supplement": range(7552, 7616),
|
| 100 |
+
"Combining Diacritical Marks Supplement": range(7616, 7680),
|
| 101 |
+
"Latin Extended Additional": range(7680, 7936),
|
| 102 |
+
"Greek Extended": range(7936, 8192),
|
| 103 |
+
"General Punctuation": range(8192, 8304),
|
| 104 |
+
"Superscripts and Subscripts": range(8304, 8352),
|
| 105 |
+
"Currency Symbols": range(8352, 8400),
|
| 106 |
+
"Combining Diacritical Marks for Symbols": range(8400, 8448),
|
| 107 |
+
"Letterlike Symbols": range(8448, 8528),
|
| 108 |
+
"Number Forms": range(8528, 8592),
|
| 109 |
+
"Arrows": range(8592, 8704),
|
| 110 |
+
"Mathematical Operators": range(8704, 8960),
|
| 111 |
+
"Miscellaneous Technical": range(8960, 9216),
|
| 112 |
+
"Control Pictures": range(9216, 9280),
|
| 113 |
+
"Optical Character Recognition": range(9280, 9312),
|
| 114 |
+
"Enclosed Alphanumerics": range(9312, 9472),
|
| 115 |
+
"Box Drawing": range(9472, 9600),
|
| 116 |
+
"Block Elements": range(9600, 9632),
|
| 117 |
+
"Geometric Shapes": range(9632, 9728),
|
| 118 |
+
"Miscellaneous Symbols": range(9728, 9984),
|
| 119 |
+
"Dingbats": range(9984, 10176),
|
| 120 |
+
"Miscellaneous Mathematical Symbols-A": range(10176, 10224),
|
| 121 |
+
"Supplemental Arrows-A": range(10224, 10240),
|
| 122 |
+
"Braille Patterns": range(10240, 10496),
|
| 123 |
+
"Supplemental Arrows-B": range(10496, 10624),
|
| 124 |
+
"Miscellaneous Mathematical Symbols-B": range(10624, 10752),
|
| 125 |
+
"Supplemental Mathematical Operators": range(10752, 11008),
|
| 126 |
+
"Miscellaneous Symbols and Arrows": range(11008, 11264),
|
| 127 |
+
"Glagolitic": range(11264, 11360),
|
| 128 |
+
"Latin Extended-C": range(11360, 11392),
|
| 129 |
+
"Coptic": range(11392, 11520),
|
| 130 |
+
"Georgian Supplement": range(11520, 11568),
|
| 131 |
+
"Tifinagh": range(11568, 11648),
|
| 132 |
+
"Ethiopic Extended": range(11648, 11744),
|
| 133 |
+
"Cyrillic Extended-A": range(11744, 11776),
|
| 134 |
+
"Supplemental Punctuation": range(11776, 11904),
|
| 135 |
+
"CJK Radicals Supplement": range(11904, 12032),
|
| 136 |
+
"Kangxi Radicals": range(12032, 12256),
|
| 137 |
+
"Ideographic Description Characters": range(12272, 12288),
|
| 138 |
+
"CJK Symbols and Punctuation": range(12288, 12352),
|
| 139 |
+
"Hiragana": range(12352, 12448),
|
| 140 |
+
"Katakana": range(12448, 12544),
|
| 141 |
+
"Bopomofo": range(12544, 12592),
|
| 142 |
+
"Hangul Compatibility Jamo": range(12592, 12688),
|
| 143 |
+
"Kanbun": range(12688, 12704),
|
| 144 |
+
"Bopomofo Extended": range(12704, 12736),
|
| 145 |
+
"CJK Strokes": range(12736, 12784),
|
| 146 |
+
"Katakana Phonetic Extensions": range(12784, 12800),
|
| 147 |
+
"Enclosed CJK Letters and Months": range(12800, 13056),
|
| 148 |
+
"CJK Compatibility": range(13056, 13312),
|
| 149 |
+
"CJK Unified Ideographs Extension A": range(13312, 19904),
|
| 150 |
+
"Yijing Hexagram Symbols": range(19904, 19968),
|
| 151 |
+
"CJK Unified Ideographs": range(19968, 40960),
|
| 152 |
+
"Yi Syllables": range(40960, 42128),
|
| 153 |
+
"Yi Radicals": range(42128, 42192),
|
| 154 |
+
"Lisu": range(42192, 42240),
|
| 155 |
+
"Vai": range(42240, 42560),
|
| 156 |
+
"Cyrillic Extended-B": range(42560, 42656),
|
| 157 |
+
"Bamum": range(42656, 42752),
|
| 158 |
+
"Modifier Tone Letters": range(42752, 42784),
|
| 159 |
+
"Latin Extended-D": range(42784, 43008),
|
| 160 |
+
"Syloti Nagri": range(43008, 43056),
|
| 161 |
+
"Common Indic Number Forms": range(43056, 43072),
|
| 162 |
+
"Phags-pa": range(43072, 43136),
|
| 163 |
+
"Saurashtra": range(43136, 43232),
|
| 164 |
+
"Devanagari Extended": range(43232, 43264),
|
| 165 |
+
"Kayah Li": range(43264, 43312),
|
| 166 |
+
"Rejang": range(43312, 43360),
|
| 167 |
+
"Hangul Jamo Extended-A": range(43360, 43392),
|
| 168 |
+
"Javanese": range(43392, 43488),
|
| 169 |
+
"Myanmar Extended-B": range(43488, 43520),
|
| 170 |
+
"Cham": range(43520, 43616),
|
| 171 |
+
"Myanmar Extended-A": range(43616, 43648),
|
| 172 |
+
"Tai Viet": range(43648, 43744),
|
| 173 |
+
"Meetei Mayek Extensions": range(43744, 43776),
|
| 174 |
+
"Ethiopic Extended-A": range(43776, 43824),
|
| 175 |
+
"Latin Extended-E": range(43824, 43888),
|
| 176 |
+
"Cherokee Supplement": range(43888, 43968),
|
| 177 |
+
"Meetei Mayek": range(43968, 44032),
|
| 178 |
+
"Hangul Syllables": range(44032, 55216),
|
| 179 |
+
"Hangul Jamo Extended-B": range(55216, 55296),
|
| 180 |
+
"High Surrogates": range(55296, 56192),
|
| 181 |
+
"High Private Use Surrogates": range(56192, 56320),
|
| 182 |
+
"Low Surrogates": range(56320, 57344),
|
| 183 |
+
"Private Use Area": range(57344, 63744),
|
| 184 |
+
"CJK Compatibility Ideographs": range(63744, 64256),
|
| 185 |
+
"Alphabetic Presentation Forms": range(64256, 64336),
|
| 186 |
+
"Arabic Presentation Forms-A": range(64336, 65024),
|
| 187 |
+
"Variation Selectors": range(65024, 65040),
|
| 188 |
+
"Vertical Forms": range(65040, 65056),
|
| 189 |
+
"Combining Half Marks": range(65056, 65072),
|
| 190 |
+
"CJK Compatibility Forms": range(65072, 65104),
|
| 191 |
+
"Small Form Variants": range(65104, 65136),
|
| 192 |
+
"Arabic Presentation Forms-B": range(65136, 65280),
|
| 193 |
+
"Halfwidth and Fullwidth Forms": range(65280, 65520),
|
| 194 |
+
"Specials": range(65520, 65536),
|
| 195 |
+
"Linear B Syllabary": range(65536, 65664),
|
| 196 |
+
"Linear B Ideograms": range(65664, 65792),
|
| 197 |
+
"Aegean Numbers": range(65792, 65856),
|
| 198 |
+
"Ancient Greek Numbers": range(65856, 65936),
|
| 199 |
+
"Ancient Symbols": range(65936, 66000),
|
| 200 |
+
"Phaistos Disc": range(66000, 66048),
|
| 201 |
+
"Lycian": range(66176, 66208),
|
| 202 |
+
"Carian": range(66208, 66272),
|
| 203 |
+
"Coptic Epact Numbers": range(66272, 66304),
|
| 204 |
+
"Old Italic": range(66304, 66352),
|
| 205 |
+
"Gothic": range(66352, 66384),
|
| 206 |
+
"Old Permic": range(66384, 66432),
|
| 207 |
+
"Ugaritic": range(66432, 66464),
|
| 208 |
+
"Old Persian": range(66464, 66528),
|
| 209 |
+
"Deseret": range(66560, 66640),
|
| 210 |
+
"Shavian": range(66640, 66688),
|
| 211 |
+
"Osmanya": range(66688, 66736),
|
| 212 |
+
"Osage": range(66736, 66816),
|
| 213 |
+
"Elbasan": range(66816, 66864),
|
| 214 |
+
"Caucasian Albanian": range(66864, 66928),
|
| 215 |
+
"Vithkuqi": range(66928, 67008),
|
| 216 |
+
"Linear A": range(67072, 67456),
|
| 217 |
+
"Latin Extended-F": range(67456, 67520),
|
| 218 |
+
"Cypriot Syllabary": range(67584, 67648),
|
| 219 |
+
"Imperial Aramaic": range(67648, 67680),
|
| 220 |
+
"Palmyrene": range(67680, 67712),
|
| 221 |
+
"Nabataean": range(67712, 67760),
|
| 222 |
+
"Hatran": range(67808, 67840),
|
| 223 |
+
"Phoenician": range(67840, 67872),
|
| 224 |
+
"Lydian": range(67872, 67904),
|
| 225 |
+
"Meroitic Hieroglyphs": range(67968, 68000),
|
| 226 |
+
"Meroitic Cursive": range(68000, 68096),
|
| 227 |
+
"Kharoshthi": range(68096, 68192),
|
| 228 |
+
"Old South Arabian": range(68192, 68224),
|
| 229 |
+
"Old North Arabian": range(68224, 68256),
|
| 230 |
+
"Manichaean": range(68288, 68352),
|
| 231 |
+
"Avestan": range(68352, 68416),
|
| 232 |
+
"Inscriptional Parthian": range(68416, 68448),
|
| 233 |
+
"Inscriptional Pahlavi": range(68448, 68480),
|
| 234 |
+
"Psalter Pahlavi": range(68480, 68528),
|
| 235 |
+
"Old Turkic": range(68608, 68688),
|
| 236 |
+
"Old Hungarian": range(68736, 68864),
|
| 237 |
+
"Hanifi Rohingya": range(68864, 68928),
|
| 238 |
+
"Rumi Numeral Symbols": range(69216, 69248),
|
| 239 |
+
"Yezidi": range(69248, 69312),
|
| 240 |
+
"Arabic Extended-C": range(69312, 69376),
|
| 241 |
+
"Old Sogdian": range(69376, 69424),
|
| 242 |
+
"Sogdian": range(69424, 69488),
|
| 243 |
+
"Old Uyghur": range(69488, 69552),
|
| 244 |
+
"Chorasmian": range(69552, 69600),
|
| 245 |
+
"Elymaic": range(69600, 69632),
|
| 246 |
+
"Brahmi": range(69632, 69760),
|
| 247 |
+
"Kaithi": range(69760, 69840),
|
| 248 |
+
"Sora Sompeng": range(69840, 69888),
|
| 249 |
+
"Chakma": range(69888, 69968),
|
| 250 |
+
"Mahajani": range(69968, 70016),
|
| 251 |
+
"Sharada": range(70016, 70112),
|
| 252 |
+
"Sinhala Archaic Numbers": range(70112, 70144),
|
| 253 |
+
"Khojki": range(70144, 70224),
|
| 254 |
+
"Multani": range(70272, 70320),
|
| 255 |
+
"Khudawadi": range(70320, 70400),
|
| 256 |
+
"Grantha": range(70400, 70528),
|
| 257 |
+
"Newa": range(70656, 70784),
|
| 258 |
+
"Tirhuta": range(70784, 70880),
|
| 259 |
+
"Siddham": range(71040, 71168),
|
| 260 |
+
"Modi": range(71168, 71264),
|
| 261 |
+
"Mongolian Supplement": range(71264, 71296),
|
| 262 |
+
"Takri": range(71296, 71376),
|
| 263 |
+
"Ahom": range(71424, 71504),
|
| 264 |
+
"Dogra": range(71680, 71760),
|
| 265 |
+
"Warang Citi": range(71840, 71936),
|
| 266 |
+
"Dives Akuru": range(71936, 72032),
|
| 267 |
+
"Nandinagari": range(72096, 72192),
|
| 268 |
+
"Zanabazar Square": range(72192, 72272),
|
| 269 |
+
"Soyombo": range(72272, 72368),
|
| 270 |
+
"Unified Canadian Aboriginal Syllabics Extended-A": range(72368, 72384),
|
| 271 |
+
"Pau Cin Hau": range(72384, 72448),
|
| 272 |
+
"Devanagari Extended-A": range(72448, 72544),
|
| 273 |
+
"Bhaiksuki": range(72704, 72816),
|
| 274 |
+
"Marchen": range(72816, 72896),
|
| 275 |
+
"Masaram Gondi": range(72960, 73056),
|
| 276 |
+
"Gunjala Gondi": range(73056, 73136),
|
| 277 |
+
"Makasar": range(73440, 73472),
|
| 278 |
+
"Kawi": range(73472, 73568),
|
| 279 |
+
"Lisu Supplement": range(73648, 73664),
|
| 280 |
+
"Tamil Supplement": range(73664, 73728),
|
| 281 |
+
"Cuneiform": range(73728, 74752),
|
| 282 |
+
"Cuneiform Numbers and Punctuation": range(74752, 74880),
|
| 283 |
+
"Early Dynastic Cuneiform": range(74880, 75088),
|
| 284 |
+
"Cypro-Minoan": range(77712, 77824),
|
| 285 |
+
"Egyptian Hieroglyphs": range(77824, 78896),
|
| 286 |
+
"Egyptian Hieroglyph Format Controls": range(78896, 78944),
|
| 287 |
+
"Anatolian Hieroglyphs": range(82944, 83584),
|
| 288 |
+
"Bamum Supplement": range(92160, 92736),
|
| 289 |
+
"Mro": range(92736, 92784),
|
| 290 |
+
"Tangsa": range(92784, 92880),
|
| 291 |
+
"Bassa Vah": range(92880, 92928),
|
| 292 |
+
"Pahawh Hmong": range(92928, 93072),
|
| 293 |
+
"Medefaidrin": range(93760, 93856),
|
| 294 |
+
"Miao": range(93952, 94112),
|
| 295 |
+
"Ideographic Symbols and Punctuation": range(94176, 94208),
|
| 296 |
+
"Tangut": range(94208, 100352),
|
| 297 |
+
"Tangut Components": range(100352, 101120),
|
| 298 |
+
"Khitan Small Script": range(101120, 101632),
|
| 299 |
+
"Tangut Supplement": range(101632, 101760),
|
| 300 |
+
"Kana Extended-B": range(110576, 110592),
|
| 301 |
+
"Kana Supplement": range(110592, 110848),
|
| 302 |
+
"Kana Extended-A": range(110848, 110896),
|
| 303 |
+
"Small Kana Extension": range(110896, 110960),
|
| 304 |
+
"Nushu": range(110960, 111360),
|
| 305 |
+
"Duployan": range(113664, 113824),
|
| 306 |
+
"Shorthand Format Controls": range(113824, 113840),
|
| 307 |
+
"Znamenny Musical Notation": range(118528, 118736),
|
| 308 |
+
"Byzantine Musical Symbols": range(118784, 119040),
|
| 309 |
+
"Musical Symbols": range(119040, 119296),
|
| 310 |
+
"Ancient Greek Musical Notation": range(119296, 119376),
|
| 311 |
+
"Kaktovik Numerals": range(119488, 119520),
|
| 312 |
+
"Mayan Numerals": range(119520, 119552),
|
| 313 |
+
"Tai Xuan Jing Symbols": range(119552, 119648),
|
| 314 |
+
"Counting Rod Numerals": range(119648, 119680),
|
| 315 |
+
"Mathematical Alphanumeric Symbols": range(119808, 120832),
|
| 316 |
+
"Sutton SignWriting": range(120832, 121520),
|
| 317 |
+
"Latin Extended-G": range(122624, 122880),
|
| 318 |
+
"Glagolitic Supplement": range(122880, 122928),
|
| 319 |
+
"Cyrillic Extended-D": range(122928, 123024),
|
| 320 |
+
"Nyiakeng Puachue Hmong": range(123136, 123216),
|
| 321 |
+
"Toto": range(123536, 123584),
|
| 322 |
+
"Wancho": range(123584, 123648),
|
| 323 |
+
"Nag Mundari": range(124112, 124160),
|
| 324 |
+
"Ethiopic Extended-B": range(124896, 124928),
|
| 325 |
+
"Mende Kikakui": range(124928, 125152),
|
| 326 |
+
"Adlam": range(125184, 125280),
|
| 327 |
+
"Indic Siyaq Numbers": range(126064, 126144),
|
| 328 |
+
"Ottoman Siyaq Numbers": range(126208, 126288),
|
| 329 |
+
"Arabic Mathematical Alphabetic Symbols": range(126464, 126720),
|
| 330 |
+
"Mahjong Tiles": range(126976, 127024),
|
| 331 |
+
"Domino Tiles": range(127024, 127136),
|
| 332 |
+
"Playing Cards": range(127136, 127232),
|
| 333 |
+
"Enclosed Alphanumeric Supplement": range(127232, 127488),
|
| 334 |
+
"Enclosed Ideographic Supplement": range(127488, 127744),
|
| 335 |
+
"Miscellaneous Symbols and Pictographs": range(127744, 128512),
|
| 336 |
+
"Emoticons range(Emoji)": range(128512, 128592),
|
| 337 |
+
"Ornamental Dingbats": range(128592, 128640),
|
| 338 |
+
"Transport and Map Symbols": range(128640, 128768),
|
| 339 |
+
"Alchemical Symbols": range(128768, 128896),
|
| 340 |
+
"Geometric Shapes Extended": range(128896, 129024),
|
| 341 |
+
"Supplemental Arrows-C": range(129024, 129280),
|
| 342 |
+
"Supplemental Symbols and Pictographs": range(129280, 129536),
|
| 343 |
+
"Chess Symbols": range(129536, 129648),
|
| 344 |
+
"Symbols and Pictographs Extended-A": range(129648, 129792),
|
| 345 |
+
"Symbols for Legacy Computing": range(129792, 130048),
|
| 346 |
+
"CJK Unified Ideographs Extension B": range(131072, 173792),
|
| 347 |
+
"CJK Unified Ideographs Extension C": range(173824, 177984),
|
| 348 |
+
"CJK Unified Ideographs Extension D": range(177984, 178208),
|
| 349 |
+
"CJK Unified Ideographs Extension E": range(178208, 183984),
|
| 350 |
+
"CJK Unified Ideographs Extension F": range(183984, 191472),
|
| 351 |
+
"CJK Compatibility Ideographs Supplement": range(194560, 195104),
|
| 352 |
+
"CJK Unified Ideographs Extension G": range(196608, 201552),
|
| 353 |
+
"CJK Unified Ideographs Extension H": range(201552, 205744),
|
| 354 |
+
"Tags": range(917504, 917632),
|
| 355 |
+
"Variation Selectors Supplement": range(917760, 918000),
|
| 356 |
+
"Supplementary Private Use Area-A": range(983040, 1048576),
|
| 357 |
+
"Supplementary Private Use Area-B": range(1048576, 1114112),
|
| 358 |
+
}
|
| 359 |
+
|
| 360 |
+
|
| 361 |
+
UNICODE_SECONDARY_RANGE_KEYWORD: list[str] = [
|
| 362 |
+
"Supplement",
|
| 363 |
+
"Extended",
|
| 364 |
+
"Extensions",
|
| 365 |
+
"Modifier",
|
| 366 |
+
"Marks",
|
| 367 |
+
"Punctuation",
|
| 368 |
+
"Symbols",
|
| 369 |
+
"Forms",
|
| 370 |
+
"Operators",
|
| 371 |
+
"Miscellaneous",
|
| 372 |
+
"Drawing",
|
| 373 |
+
"Block",
|
| 374 |
+
"Shapes",
|
| 375 |
+
"Supplemental",
|
| 376 |
+
"Tags",
|
| 377 |
+
]
|
| 378 |
+
|
| 379 |
+
RE_POSSIBLE_ENCODING_INDICATION = re_compile(
|
| 380 |
+
r"(?:(?:encoding)|(?:charset)|(?:coding))(?:[\:= ]{1,10})(?:[\"\']?)([a-zA-Z0-9\-_]+)(?:[\"\']?)",
|
| 381 |
+
IGNORECASE,
|
| 382 |
+
)
|
| 383 |
+
|
| 384 |
+
IANA_NO_ALIASES = [
|
| 385 |
+
"cp720",
|
| 386 |
+
"cp737",
|
| 387 |
+
"cp856",
|
| 388 |
+
"cp874",
|
| 389 |
+
"cp875",
|
| 390 |
+
"cp1006",
|
| 391 |
+
"koi8_r",
|
| 392 |
+
"koi8_t",
|
| 393 |
+
"koi8_u",
|
| 394 |
+
]
|
| 395 |
+
|
| 396 |
+
IANA_SUPPORTED: list[str] = sorted(
|
| 397 |
+
filter(
|
| 398 |
+
lambda x: x.endswith("_codec") is False
|
| 399 |
+
and x not in {"rot_13", "tactis", "mbcs"},
|
| 400 |
+
list(set(aliases.values())) + IANA_NO_ALIASES,
|
| 401 |
+
)
|
| 402 |
+
)
|
| 403 |
+
|
| 404 |
+
IANA_SUPPORTED_COUNT: int = len(IANA_SUPPORTED)
|
| 405 |
+
|
| 406 |
+
# pre-computed code page that are similar using the function cp_similarity.
|
| 407 |
+
IANA_SUPPORTED_SIMILAR: dict[str, list[str]] = {
|
| 408 |
+
"cp037": ["cp1026", "cp1140", "cp273", "cp500"],
|
| 409 |
+
"cp1026": ["cp037", "cp1140", "cp273", "cp500"],
|
| 410 |
+
"cp1125": ["cp866"],
|
| 411 |
+
"cp1140": ["cp037", "cp1026", "cp273", "cp500"],
|
| 412 |
+
"cp1250": ["iso8859_2"],
|
| 413 |
+
"cp1251": ["kz1048", "ptcp154"],
|
| 414 |
+
"cp1252": ["iso8859_15", "iso8859_9", "latin_1"],
|
| 415 |
+
"cp1253": ["iso8859_7"],
|
| 416 |
+
"cp1254": ["iso8859_15", "iso8859_9", "latin_1"],
|
| 417 |
+
"cp1257": ["iso8859_13"],
|
| 418 |
+
"cp273": ["cp037", "cp1026", "cp1140", "cp500"],
|
| 419 |
+
"cp437": ["cp850", "cp858", "cp860", "cp861", "cp862", "cp863", "cp865"],
|
| 420 |
+
"cp500": ["cp037", "cp1026", "cp1140", "cp273"],
|
| 421 |
+
"cp850": ["cp437", "cp857", "cp858", "cp865"],
|
| 422 |
+
"cp857": ["cp850", "cp858", "cp865"],
|
| 423 |
+
"cp858": ["cp437", "cp850", "cp857", "cp865"],
|
| 424 |
+
"cp860": ["cp437", "cp861", "cp862", "cp863", "cp865"],
|
| 425 |
+
"cp861": ["cp437", "cp860", "cp862", "cp863", "cp865"],
|
| 426 |
+
"cp862": ["cp437", "cp860", "cp861", "cp863", "cp865"],
|
| 427 |
+
"cp863": ["cp437", "cp860", "cp861", "cp862", "cp865"],
|
| 428 |
+
"cp865": ["cp437", "cp850", "cp857", "cp858", "cp860", "cp861", "cp862", "cp863"],
|
| 429 |
+
"cp866": ["cp1125"],
|
| 430 |
+
"iso8859_10": ["iso8859_14", "iso8859_15", "iso8859_4", "iso8859_9", "latin_1"],
|
| 431 |
+
"iso8859_11": ["tis_620"],
|
| 432 |
+
"iso8859_13": ["cp1257"],
|
| 433 |
+
"iso8859_14": [
|
| 434 |
+
"iso8859_10",
|
| 435 |
+
"iso8859_15",
|
| 436 |
+
"iso8859_16",
|
| 437 |
+
"iso8859_3",
|
| 438 |
+
"iso8859_9",
|
| 439 |
+
"latin_1",
|
| 440 |
+
],
|
| 441 |
+
"iso8859_15": [
|
| 442 |
+
"cp1252",
|
| 443 |
+
"cp1254",
|
| 444 |
+
"iso8859_10",
|
| 445 |
+
"iso8859_14",
|
| 446 |
+
"iso8859_16",
|
| 447 |
+
"iso8859_3",
|
| 448 |
+
"iso8859_9",
|
| 449 |
+
"latin_1",
|
| 450 |
+
],
|
| 451 |
+
"iso8859_16": [
|
| 452 |
+
"iso8859_14",
|
| 453 |
+
"iso8859_15",
|
| 454 |
+
"iso8859_2",
|
| 455 |
+
"iso8859_3",
|
| 456 |
+
"iso8859_9",
|
| 457 |
+
"latin_1",
|
| 458 |
+
],
|
| 459 |
+
"iso8859_2": ["cp1250", "iso8859_16", "iso8859_4"],
|
| 460 |
+
"iso8859_3": ["iso8859_14", "iso8859_15", "iso8859_16", "iso8859_9", "latin_1"],
|
| 461 |
+
"iso8859_4": ["iso8859_10", "iso8859_2", "iso8859_9", "latin_1"],
|
| 462 |
+
"iso8859_7": ["cp1253"],
|
| 463 |
+
"iso8859_9": [
|
| 464 |
+
"cp1252",
|
| 465 |
+
"cp1254",
|
| 466 |
+
"cp1258",
|
| 467 |
+
"iso8859_10",
|
| 468 |
+
"iso8859_14",
|
| 469 |
+
"iso8859_15",
|
| 470 |
+
"iso8859_16",
|
| 471 |
+
"iso8859_3",
|
| 472 |
+
"iso8859_4",
|
| 473 |
+
"latin_1",
|
| 474 |
+
],
|
| 475 |
+
"kz1048": ["cp1251", "ptcp154"],
|
| 476 |
+
"latin_1": [
|
| 477 |
+
"cp1252",
|
| 478 |
+
"cp1254",
|
| 479 |
+
"cp1258",
|
| 480 |
+
"iso8859_10",
|
| 481 |
+
"iso8859_14",
|
| 482 |
+
"iso8859_15",
|
| 483 |
+
"iso8859_16",
|
| 484 |
+
"iso8859_3",
|
| 485 |
+
"iso8859_4",
|
| 486 |
+
"iso8859_9",
|
| 487 |
+
],
|
| 488 |
+
"mac_iceland": ["mac_roman", "mac_turkish"],
|
| 489 |
+
"mac_roman": ["mac_iceland", "mac_turkish"],
|
| 490 |
+
"mac_turkish": ["mac_iceland", "mac_roman"],
|
| 491 |
+
"ptcp154": ["cp1251", "kz1048"],
|
| 492 |
+
"tis_620": ["iso8859_11"],
|
| 493 |
+
}
|
| 494 |
+
|
| 495 |
+
|
| 496 |
+
CHARDET_CORRESPONDENCE: dict[str, str] = {
|
| 497 |
+
"iso2022_kr": "ISO-2022-KR",
|
| 498 |
+
"iso2022_jp": "ISO-2022-JP",
|
| 499 |
+
"euc_kr": "EUC-KR",
|
| 500 |
+
"tis_620": "TIS-620",
|
| 501 |
+
"utf_32": "UTF-32",
|
| 502 |
+
"euc_jp": "EUC-JP",
|
| 503 |
+
"koi8_r": "KOI8-R",
|
| 504 |
+
"iso8859_1": "ISO-8859-1",
|
| 505 |
+
"iso8859_2": "ISO-8859-2",
|
| 506 |
+
"iso8859_5": "ISO-8859-5",
|
| 507 |
+
"iso8859_6": "ISO-8859-6",
|
| 508 |
+
"iso8859_7": "ISO-8859-7",
|
| 509 |
+
"iso8859_8": "ISO-8859-8",
|
| 510 |
+
"utf_16": "UTF-16",
|
| 511 |
+
"cp855": "IBM855",
|
| 512 |
+
"mac_cyrillic": "MacCyrillic",
|
| 513 |
+
"gb2312": "GB2312",
|
| 514 |
+
"gb18030": "GB18030",
|
| 515 |
+
"cp932": "CP932",
|
| 516 |
+
"cp866": "IBM866",
|
| 517 |
+
"utf_8": "utf-8",
|
| 518 |
+
"utf_8_sig": "UTF-8-SIG",
|
| 519 |
+
"shift_jis": "SHIFT_JIS",
|
| 520 |
+
"big5": "Big5",
|
| 521 |
+
"cp1250": "windows-1250",
|
| 522 |
+
"cp1251": "windows-1251",
|
| 523 |
+
"cp1252": "Windows-1252",
|
| 524 |
+
"cp1253": "windows-1253",
|
| 525 |
+
"cp1255": "windows-1255",
|
| 526 |
+
"cp1256": "windows-1256",
|
| 527 |
+
"cp1254": "Windows-1254",
|
| 528 |
+
"cp949": "CP949",
|
| 529 |
+
}
|
| 530 |
+
|
| 531 |
+
|
| 532 |
+
COMMON_SAFE_ASCII_CHARACTERS: set[str] = {
|
| 533 |
+
"<",
|
| 534 |
+
">",
|
| 535 |
+
"=",
|
| 536 |
+
":",
|
| 537 |
+
"/",
|
| 538 |
+
"&",
|
| 539 |
+
";",
|
| 540 |
+
"{",
|
| 541 |
+
"}",
|
| 542 |
+
"[",
|
| 543 |
+
"]",
|
| 544 |
+
",",
|
| 545 |
+
"|",
|
| 546 |
+
'"',
|
| 547 |
+
"-",
|
| 548 |
+
"(",
|
| 549 |
+
")",
|
| 550 |
+
}
|
| 551 |
+
|
| 552 |
+
|
| 553 |
+
KO_NAMES: set[str] = {"johab", "cp949", "euc_kr"}
|
| 554 |
+
ZH_NAMES: set[str] = {"big5", "cp950", "big5hkscs", "hz"}
|
| 555 |
+
|
| 556 |
+
# Logging LEVEL below DEBUG
|
| 557 |
+
TRACE: int = 5
|
| 558 |
+
|
| 559 |
+
|
| 560 |
+
# Language label that contain the em dash "—"
|
| 561 |
+
# character are to be considered alternative seq to origin
|
| 562 |
+
FREQUENCIES: dict[str, list[str]] = {
|
| 563 |
+
"English": [
|
| 564 |
+
"e",
|
| 565 |
+
"a",
|
| 566 |
+
"t",
|
| 567 |
+
"i",
|
| 568 |
+
"o",
|
| 569 |
+
"n",
|
| 570 |
+
"s",
|
| 571 |
+
"r",
|
| 572 |
+
"h",
|
| 573 |
+
"l",
|
| 574 |
+
"d",
|
| 575 |
+
"c",
|
| 576 |
+
"u",
|
| 577 |
+
"m",
|
| 578 |
+
"f",
|
| 579 |
+
"p",
|
| 580 |
+
"g",
|
| 581 |
+
"w",
|
| 582 |
+
"y",
|
| 583 |
+
"b",
|
| 584 |
+
"v",
|
| 585 |
+
"k",
|
| 586 |
+
"x",
|
| 587 |
+
"j",
|
| 588 |
+
"z",
|
| 589 |
+
"q",
|
| 590 |
+
],
|
| 591 |
+
"English—": [
|
| 592 |
+
"e",
|
| 593 |
+
"a",
|
| 594 |
+
"t",
|
| 595 |
+
"i",
|
| 596 |
+
"o",
|
| 597 |
+
"n",
|
| 598 |
+
"s",
|
| 599 |
+
"r",
|
| 600 |
+
"h",
|
| 601 |
+
"l",
|
| 602 |
+
"d",
|
| 603 |
+
"c",
|
| 604 |
+
"m",
|
| 605 |
+
"u",
|
| 606 |
+
"f",
|
| 607 |
+
"p",
|
| 608 |
+
"g",
|
| 609 |
+
"w",
|
| 610 |
+
"b",
|
| 611 |
+
"y",
|
| 612 |
+
"v",
|
| 613 |
+
"k",
|
| 614 |
+
"j",
|
| 615 |
+
"x",
|
| 616 |
+
"z",
|
| 617 |
+
"q",
|
| 618 |
+
],
|
| 619 |
+
"German": [
|
| 620 |
+
"e",
|
| 621 |
+
"n",
|
| 622 |
+
"i",
|
| 623 |
+
"r",
|
| 624 |
+
"s",
|
| 625 |
+
"t",
|
| 626 |
+
"a",
|
| 627 |
+
"d",
|
| 628 |
+
"h",
|
| 629 |
+
"u",
|
| 630 |
+
"l",
|
| 631 |
+
"g",
|
| 632 |
+
"o",
|
| 633 |
+
"c",
|
| 634 |
+
"m",
|
| 635 |
+
"b",
|
| 636 |
+
"f",
|
| 637 |
+
"k",
|
| 638 |
+
"w",
|
| 639 |
+
"z",
|
| 640 |
+
"p",
|
| 641 |
+
"v",
|
| 642 |
+
"ü",
|
| 643 |
+
"ä",
|
| 644 |
+
"ö",
|
| 645 |
+
"j",
|
| 646 |
+
],
|
| 647 |
+
"French": [
|
| 648 |
+
"e",
|
| 649 |
+
"a",
|
| 650 |
+
"s",
|
| 651 |
+
"n",
|
| 652 |
+
"i",
|
| 653 |
+
"t",
|
| 654 |
+
"r",
|
| 655 |
+
"l",
|
| 656 |
+
"u",
|
| 657 |
+
"o",
|
| 658 |
+
"d",
|
| 659 |
+
"c",
|
| 660 |
+
"p",
|
| 661 |
+
"m",
|
| 662 |
+
"é",
|
| 663 |
+
"v",
|
| 664 |
+
"g",
|
| 665 |
+
"f",
|
| 666 |
+
"b",
|
| 667 |
+
"h",
|
| 668 |
+
"q",
|
| 669 |
+
"à",
|
| 670 |
+
"x",
|
| 671 |
+
"è",
|
| 672 |
+
"y",
|
| 673 |
+
"j",
|
| 674 |
+
],
|
| 675 |
+
"Dutch": [
|
| 676 |
+
"e",
|
| 677 |
+
"n",
|
| 678 |
+
"a",
|
| 679 |
+
"i",
|
| 680 |
+
"r",
|
| 681 |
+
"t",
|
| 682 |
+
"o",
|
| 683 |
+
"d",
|
| 684 |
+
"s",
|
| 685 |
+
"l",
|
| 686 |
+
"g",
|
| 687 |
+
"h",
|
| 688 |
+
"v",
|
| 689 |
+
"m",
|
| 690 |
+
"u",
|
| 691 |
+
"k",
|
| 692 |
+
"c",
|
| 693 |
+
"p",
|
| 694 |
+
"b",
|
| 695 |
+
"w",
|
| 696 |
+
"j",
|
| 697 |
+
"z",
|
| 698 |
+
"f",
|
| 699 |
+
"y",
|
| 700 |
+
"x",
|
| 701 |
+
"ë",
|
| 702 |
+
],
|
| 703 |
+
"Italian": [
|
| 704 |
+
"e",
|
| 705 |
+
"i",
|
| 706 |
+
"a",
|
| 707 |
+
"o",
|
| 708 |
+
"n",
|
| 709 |
+
"l",
|
| 710 |
+
"t",
|
| 711 |
+
"r",
|
| 712 |
+
"s",
|
| 713 |
+
"c",
|
| 714 |
+
"d",
|
| 715 |
+
"u",
|
| 716 |
+
"p",
|
| 717 |
+
"m",
|
| 718 |
+
"g",
|
| 719 |
+
"v",
|
| 720 |
+
"f",
|
| 721 |
+
"b",
|
| 722 |
+
"z",
|
| 723 |
+
"h",
|
| 724 |
+
"q",
|
| 725 |
+
"è",
|
| 726 |
+
"à",
|
| 727 |
+
"k",
|
| 728 |
+
"y",
|
| 729 |
+
"ò",
|
| 730 |
+
],
|
| 731 |
+
"Polish": [
|
| 732 |
+
"a",
|
| 733 |
+
"i",
|
| 734 |
+
"o",
|
| 735 |
+
"e",
|
| 736 |
+
"n",
|
| 737 |
+
"r",
|
| 738 |
+
"z",
|
| 739 |
+
"w",
|
| 740 |
+
"s",
|
| 741 |
+
"c",
|
| 742 |
+
"t",
|
| 743 |
+
"k",
|
| 744 |
+
"y",
|
| 745 |
+
"d",
|
| 746 |
+
"p",
|
| 747 |
+
"m",
|
| 748 |
+
"u",
|
| 749 |
+
"l",
|
| 750 |
+
"j",
|
| 751 |
+
"ł",
|
| 752 |
+
"g",
|
| 753 |
+
"b",
|
| 754 |
+
"h",
|
| 755 |
+
"ą",
|
| 756 |
+
"ę",
|
| 757 |
+
"ó",
|
| 758 |
+
],
|
| 759 |
+
"Spanish": [
|
| 760 |
+
"e",
|
| 761 |
+
"a",
|
| 762 |
+
"o",
|
| 763 |
+
"n",
|
| 764 |
+
"s",
|
| 765 |
+
"r",
|
| 766 |
+
"i",
|
| 767 |
+
"l",
|
| 768 |
+
"d",
|
| 769 |
+
"t",
|
| 770 |
+
"c",
|
| 771 |
+
"u",
|
| 772 |
+
"m",
|
| 773 |
+
"p",
|
| 774 |
+
"b",
|
| 775 |
+
"g",
|
| 776 |
+
"v",
|
| 777 |
+
"f",
|
| 778 |
+
"y",
|
| 779 |
+
"ó",
|
| 780 |
+
"h",
|
| 781 |
+
"q",
|
| 782 |
+
"í",
|
| 783 |
+
"j",
|
| 784 |
+
"z",
|
| 785 |
+
"á",
|
| 786 |
+
],
|
| 787 |
+
"Russian": [
|
| 788 |
+
"о",
|
| 789 |
+
"а",
|
| 790 |
+
"е",
|
| 791 |
+
"и",
|
| 792 |
+
"н",
|
| 793 |
+
"с",
|
| 794 |
+
"т",
|
| 795 |
+
"р",
|
| 796 |
+
"в",
|
| 797 |
+
"л",
|
| 798 |
+
"к",
|
| 799 |
+
"м",
|
| 800 |
+
"д",
|
| 801 |
+
"п",
|
| 802 |
+
"у",
|
| 803 |
+
"г",
|
| 804 |
+
"я",
|
| 805 |
+
"ы",
|
| 806 |
+
"з",
|
| 807 |
+
"б",
|
| 808 |
+
"й",
|
| 809 |
+
"ь",
|
| 810 |
+
"ч",
|
| 811 |
+
"х",
|
| 812 |
+
"ж",
|
| 813 |
+
"ц",
|
| 814 |
+
],
|
| 815 |
+
# Jap-Kanji
|
| 816 |
+
"Japanese": [
|
| 817 |
+
"人",
|
| 818 |
+
"一",
|
| 819 |
+
"大",
|
| 820 |
+
"亅",
|
| 821 |
+
"丁",
|
| 822 |
+
"丨",
|
| 823 |
+
"竹",
|
| 824 |
+
"笑",
|
| 825 |
+
"口",
|
| 826 |
+
"日",
|
| 827 |
+
"今",
|
| 828 |
+
"二",
|
| 829 |
+
"彳",
|
| 830 |
+
"行",
|
| 831 |
+
"十",
|
| 832 |
+
"土",
|
| 833 |
+
"丶",
|
| 834 |
+
"寸",
|
| 835 |
+
"寺",
|
| 836 |
+
"時",
|
| 837 |
+
"乙",
|
| 838 |
+
"丿",
|
| 839 |
+
"乂",
|
| 840 |
+
"气",
|
| 841 |
+
"気",
|
| 842 |
+
"冂",
|
| 843 |
+
"巾",
|
| 844 |
+
"亠",
|
| 845 |
+
"市",
|
| 846 |
+
"目",
|
| 847 |
+
"儿",
|
| 848 |
+
"見",
|
| 849 |
+
"八",
|
| 850 |
+
"小",
|
| 851 |
+
"凵",
|
| 852 |
+
"県",
|
| 853 |
+
"月",
|
| 854 |
+
"彐",
|
| 855 |
+
"門",
|
| 856 |
+
"間",
|
| 857 |
+
"木",
|
| 858 |
+
"東",
|
| 859 |
+
"山",
|
| 860 |
+
"出",
|
| 861 |
+
"本",
|
| 862 |
+
"中",
|
| 863 |
+
"刀",
|
| 864 |
+
"分",
|
| 865 |
+
"耳",
|
| 866 |
+
"又",
|
| 867 |
+
"取",
|
| 868 |
+
"最",
|
| 869 |
+
"言",
|
| 870 |
+
"田",
|
| 871 |
+
"心",
|
| 872 |
+
"思",
|
| 873 |
+
"刂",
|
| 874 |
+
"前",
|
| 875 |
+
"京",
|
| 876 |
+
"尹",
|
| 877 |
+
"事",
|
| 878 |
+
"生",
|
| 879 |
+
"厶",
|
| 880 |
+
"云",
|
| 881 |
+
"会",
|
| 882 |
+
"未",
|
| 883 |
+
"来",
|
| 884 |
+
"白",
|
| 885 |
+
"冫",
|
| 886 |
+
"楽",
|
| 887 |
+
"灬",
|
| 888 |
+
"馬",
|
| 889 |
+
"尸",
|
| 890 |
+
"尺",
|
| 891 |
+
"駅",
|
| 892 |
+
"明",
|
| 893 |
+
"耂",
|
| 894 |
+
"者",
|
| 895 |
+
"了",
|
| 896 |
+
"阝",
|
| 897 |
+
"都",
|
| 898 |
+
"高",
|
| 899 |
+
"卜",
|
| 900 |
+
"占",
|
| 901 |
+
"厂",
|
| 902 |
+
"广",
|
| 903 |
+
"店",
|
| 904 |
+
"子",
|
| 905 |
+
"申",
|
| 906 |
+
"奄",
|
| 907 |
+
"亻",
|
| 908 |
+
"俺",
|
| 909 |
+
"上",
|
| 910 |
+
"方",
|
| 911 |
+
"冖",
|
| 912 |
+
"学",
|
| 913 |
+
"衣",
|
| 914 |
+
"艮",
|
| 915 |
+
"食",
|
| 916 |
+
"自",
|
| 917 |
+
],
|
| 918 |
+
# Jap-Katakana
|
| 919 |
+
"Japanese—": [
|
| 920 |
+
"ー",
|
| 921 |
+
"ン",
|
| 922 |
+
"ス",
|
| 923 |
+
"・",
|
| 924 |
+
"ル",
|
| 925 |
+
"ト",
|
| 926 |
+
"リ",
|
| 927 |
+
"イ",
|
| 928 |
+
"ア",
|
| 929 |
+
"ラ",
|
| 930 |
+
"ッ",
|
| 931 |
+
"ク",
|
| 932 |
+
"ド",
|
| 933 |
+
"シ",
|
| 934 |
+
"レ",
|
| 935 |
+
"ジ",
|
| 936 |
+
"タ",
|
| 937 |
+
"フ",
|
| 938 |
+
"ロ",
|
| 939 |
+
"カ",
|
| 940 |
+
"テ",
|
| 941 |
+
"マ",
|
| 942 |
+
"ィ",
|
| 943 |
+
"グ",
|
| 944 |
+
"バ",
|
| 945 |
+
"ム",
|
| 946 |
+
"プ",
|
| 947 |
+
"オ",
|
| 948 |
+
"コ",
|
| 949 |
+
"デ",
|
| 950 |
+
"ニ",
|
| 951 |
+
"ウ",
|
| 952 |
+
"メ",
|
| 953 |
+
"サ",
|
| 954 |
+
"ビ",
|
| 955 |
+
"ナ",
|
| 956 |
+
"ブ",
|
| 957 |
+
"ャ",
|
| 958 |
+
"エ",
|
| 959 |
+
"ュ",
|
| 960 |
+
"チ",
|
| 961 |
+
"キ",
|
| 962 |
+
"ズ",
|
| 963 |
+
"ダ",
|
| 964 |
+
"パ",
|
| 965 |
+
"ミ",
|
| 966 |
+
"ェ",
|
| 967 |
+
"ョ",
|
| 968 |
+
"ハ",
|
| 969 |
+
"セ",
|
| 970 |
+
"ベ",
|
| 971 |
+
"ガ",
|
| 972 |
+
"モ",
|
| 973 |
+
"ツ",
|
| 974 |
+
"ネ",
|
| 975 |
+
"ボ",
|
| 976 |
+
"ソ",
|
| 977 |
+
"ノ",
|
| 978 |
+
"ァ",
|
| 979 |
+
"ヴ",
|
| 980 |
+
"ワ",
|
| 981 |
+
"ポ",
|
| 982 |
+
"ペ",
|
| 983 |
+
"ピ",
|
| 984 |
+
"ケ",
|
| 985 |
+
"ゴ",
|
| 986 |
+
"ギ",
|
| 987 |
+
"ザ",
|
| 988 |
+
"ホ",
|
| 989 |
+
"ゲ",
|
| 990 |
+
"ォ",
|
| 991 |
+
"ヤ",
|
| 992 |
+
"ヒ",
|
| 993 |
+
"ユ",
|
| 994 |
+
"ヨ",
|
| 995 |
+
"ヘ",
|
| 996 |
+
"ゼ",
|
| 997 |
+
"ヌ",
|
| 998 |
+
"ゥ",
|
| 999 |
+
"ゾ",
|
| 1000 |
+
"ヶ",
|
| 1001 |
+
"ヂ",
|
| 1002 |
+
"ヲ",
|
| 1003 |
+
"ヅ",
|
| 1004 |
+
"ヵ",
|
| 1005 |
+
"ヱ",
|
| 1006 |
+
"ヰ",
|
| 1007 |
+
"ヮ",
|
| 1008 |
+
"ヽ",
|
| 1009 |
+
"゠",
|
| 1010 |
+
"ヾ",
|
| 1011 |
+
"ヷ",
|
| 1012 |
+
"ヿ",
|
| 1013 |
+
"ヸ",
|
| 1014 |
+
"ヹ",
|
| 1015 |
+
"ヺ",
|
| 1016 |
+
],
|
| 1017 |
+
# Jap-Hiragana
|
| 1018 |
+
"Japanese——": [
|
| 1019 |
+
"の",
|
| 1020 |
+
"に",
|
| 1021 |
+
"る",
|
| 1022 |
+
"た",
|
| 1023 |
+
"と",
|
| 1024 |
+
"は",
|
| 1025 |
+
"し",
|
| 1026 |
+
"い",
|
| 1027 |
+
"を",
|
| 1028 |
+
"で",
|
| 1029 |
+
"て",
|
| 1030 |
+
"が",
|
| 1031 |
+
"な",
|
| 1032 |
+
"れ",
|
| 1033 |
+
"か",
|
| 1034 |
+
"ら",
|
| 1035 |
+
"さ",
|
| 1036 |
+
"っ",
|
| 1037 |
+
"り",
|
| 1038 |
+
"す",
|
| 1039 |
+
"あ",
|
| 1040 |
+
"も",
|
| 1041 |
+
"こ",
|
| 1042 |
+
"ま",
|
| 1043 |
+
"う",
|
| 1044 |
+
"く",
|
| 1045 |
+
"よ",
|
| 1046 |
+
"き",
|
| 1047 |
+
"ん",
|
| 1048 |
+
"め",
|
| 1049 |
+
"お",
|
| 1050 |
+
"け",
|
| 1051 |
+
"そ",
|
| 1052 |
+
"つ",
|
| 1053 |
+
"だ",
|
| 1054 |
+
"や",
|
| 1055 |
+
"え",
|
| 1056 |
+
"ど",
|
| 1057 |
+
"わ",
|
| 1058 |
+
"ち",
|
| 1059 |
+
"み",
|
| 1060 |
+
"せ",
|
| 1061 |
+
"じ",
|
| 1062 |
+
"ば",
|
| 1063 |
+
"へ",
|
| 1064 |
+
"び",
|
| 1065 |
+
"ず",
|
| 1066 |
+
"ろ",
|
| 1067 |
+
"ほ",
|
| 1068 |
+
"げ",
|
| 1069 |
+
"む",
|
| 1070 |
+
"べ",
|
| 1071 |
+
"ひ",
|
| 1072 |
+
"ょ",
|
| 1073 |
+
"ゆ",
|
| 1074 |
+
"ぶ",
|
| 1075 |
+
"ご",
|
| 1076 |
+
"ゃ",
|
| 1077 |
+
"ね",
|
| 1078 |
+
"ふ",
|
| 1079 |
+
"ぐ",
|
| 1080 |
+
"ぎ",
|
| 1081 |
+
"ぼ",
|
| 1082 |
+
"ゅ",
|
| 1083 |
+
"づ",
|
| 1084 |
+
"ざ",
|
| 1085 |
+
"ぞ",
|
| 1086 |
+
"ぬ",
|
| 1087 |
+
"ぜ",
|
| 1088 |
+
"ぱ",
|
| 1089 |
+
"ぽ",
|
| 1090 |
+
"ぷ",
|
| 1091 |
+
"ぴ",
|
| 1092 |
+
"ぃ",
|
| 1093 |
+
"ぁ",
|
| 1094 |
+
"ぇ",
|
| 1095 |
+
"ぺ",
|
| 1096 |
+
"ゞ",
|
| 1097 |
+
"ぢ",
|
| 1098 |
+
"ぉ",
|
| 1099 |
+
"ぅ",
|
| 1100 |
+
"ゐ",
|
| 1101 |
+
"ゝ",
|
| 1102 |
+
"ゑ",
|
| 1103 |
+
"゛",
|
| 1104 |
+
"゜",
|
| 1105 |
+
"ゎ",
|
| 1106 |
+
"ゔ",
|
| 1107 |
+
"゚",
|
| 1108 |
+
"ゟ",
|
| 1109 |
+
"゙",
|
| 1110 |
+
"ゕ",
|
| 1111 |
+
"ゖ",
|
| 1112 |
+
],
|
| 1113 |
+
"Portuguese": [
|
| 1114 |
+
"a",
|
| 1115 |
+
"e",
|
| 1116 |
+
"o",
|
| 1117 |
+
"s",
|
| 1118 |
+
"i",
|
| 1119 |
+
"r",
|
| 1120 |
+
"d",
|
| 1121 |
+
"n",
|
| 1122 |
+
"t",
|
| 1123 |
+
"m",
|
| 1124 |
+
"u",
|
| 1125 |
+
"c",
|
| 1126 |
+
"l",
|
| 1127 |
+
"p",
|
| 1128 |
+
"g",
|
| 1129 |
+
"v",
|
| 1130 |
+
"b",
|
| 1131 |
+
"f",
|
| 1132 |
+
"h",
|
| 1133 |
+
"ã",
|
| 1134 |
+
"q",
|
| 1135 |
+
"é",
|
| 1136 |
+
"ç",
|
| 1137 |
+
"á",
|
| 1138 |
+
"z",
|
| 1139 |
+
"í",
|
| 1140 |
+
],
|
| 1141 |
+
"Swedish": [
|
| 1142 |
+
"e",
|
| 1143 |
+
"a",
|
| 1144 |
+
"n",
|
| 1145 |
+
"r",
|
| 1146 |
+
"t",
|
| 1147 |
+
"s",
|
| 1148 |
+
"i",
|
| 1149 |
+
"l",
|
| 1150 |
+
"d",
|
| 1151 |
+
"o",
|
| 1152 |
+
"m",
|
| 1153 |
+
"k",
|
| 1154 |
+
"g",
|
| 1155 |
+
"v",
|
| 1156 |
+
"h",
|
| 1157 |
+
"f",
|
| 1158 |
+
"u",
|
| 1159 |
+
"p",
|
| 1160 |
+
"ä",
|
| 1161 |
+
"c",
|
| 1162 |
+
"b",
|
| 1163 |
+
"ö",
|
| 1164 |
+
"å",
|
| 1165 |
+
"y",
|
| 1166 |
+
"j",
|
| 1167 |
+
"x",
|
| 1168 |
+
],
|
| 1169 |
+
"Chinese": [
|
| 1170 |
+
"的",
|
| 1171 |
+
"一",
|
| 1172 |
+
"是",
|
| 1173 |
+
"不",
|
| 1174 |
+
"了",
|
| 1175 |
+
"在",
|
| 1176 |
+
"人",
|
| 1177 |
+
"有",
|
| 1178 |
+
"我",
|
| 1179 |
+
"他",
|
| 1180 |
+
"这",
|
| 1181 |
+
"个",
|
| 1182 |
+
"们",
|
| 1183 |
+
"中",
|
| 1184 |
+
"来",
|
| 1185 |
+
"上",
|
| 1186 |
+
"大",
|
| 1187 |
+
"为",
|
| 1188 |
+
"和",
|
| 1189 |
+
"国",
|
| 1190 |
+
"地",
|
| 1191 |
+
"到",
|
| 1192 |
+
"以",
|
| 1193 |
+
"说",
|
| 1194 |
+
"时",
|
| 1195 |
+
"要",
|
| 1196 |
+
"就",
|
| 1197 |
+
"出",
|
| 1198 |
+
"会",
|
| 1199 |
+
"可",
|
| 1200 |
+
"也",
|
| 1201 |
+
"你",
|
| 1202 |
+
"对",
|
| 1203 |
+
"生",
|
| 1204 |
+
"能",
|
| 1205 |
+
"而",
|
| 1206 |
+
"子",
|
| 1207 |
+
"那",
|
| 1208 |
+
"得",
|
| 1209 |
+
"于",
|
| 1210 |
+
"着",
|
| 1211 |
+
"下",
|
| 1212 |
+
"自",
|
| 1213 |
+
"之",
|
| 1214 |
+
"年",
|
| 1215 |
+
"过",
|
| 1216 |
+
"发",
|
| 1217 |
+
"后",
|
| 1218 |
+
"作",
|
| 1219 |
+
"里",
|
| 1220 |
+
"用",
|
| 1221 |
+
"道",
|
| 1222 |
+
"行",
|
| 1223 |
+
"所",
|
| 1224 |
+
"然",
|
| 1225 |
+
"家",
|
| 1226 |
+
"种",
|
| 1227 |
+
"事",
|
| 1228 |
+
"成",
|
| 1229 |
+
"方",
|
| 1230 |
+
"多",
|
| 1231 |
+
"经",
|
| 1232 |
+
"么",
|
| 1233 |
+
"去",
|
| 1234 |
+
"法",
|
| 1235 |
+
"学",
|
| 1236 |
+
"如",
|
| 1237 |
+
"都",
|
| 1238 |
+
"同",
|
| 1239 |
+
"现",
|
| 1240 |
+
"当",
|
| 1241 |
+
"没",
|
| 1242 |
+
"动",
|
| 1243 |
+
"面",
|
| 1244 |
+
"起",
|
| 1245 |
+
"看",
|
| 1246 |
+
"定",
|
| 1247 |
+
"天",
|
| 1248 |
+
"分",
|
| 1249 |
+
"还",
|
| 1250 |
+
"进",
|
| 1251 |
+
"好",
|
| 1252 |
+
"小",
|
| 1253 |
+
"部",
|
| 1254 |
+
"其",
|
| 1255 |
+
"些",
|
| 1256 |
+
"主",
|
| 1257 |
+
"样",
|
| 1258 |
+
"理",
|
| 1259 |
+
"心",
|
| 1260 |
+
"她",
|
| 1261 |
+
"本",
|
| 1262 |
+
"前",
|
| 1263 |
+
"开",
|
| 1264 |
+
"但",
|
| 1265 |
+
"因",
|
| 1266 |
+
"只",
|
| 1267 |
+
"从",
|
| 1268 |
+
"想",
|
| 1269 |
+
"实",
|
| 1270 |
+
],
|
| 1271 |
+
"Ukrainian": [
|
| 1272 |
+
"о",
|
| 1273 |
+
"а",
|
| 1274 |
+
"н",
|
| 1275 |
+
"і",
|
| 1276 |
+
"и",
|
| 1277 |
+
"р",
|
| 1278 |
+
"в",
|
| 1279 |
+
"т",
|
| 1280 |
+
"е",
|
| 1281 |
+
"с",
|
| 1282 |
+
"к",
|
| 1283 |
+
"л",
|
| 1284 |
+
"у",
|
| 1285 |
+
"д",
|
| 1286 |
+
"м",
|
| 1287 |
+
"п",
|
| 1288 |
+
"з",
|
| 1289 |
+
"я",
|
| 1290 |
+
"ь",
|
| 1291 |
+
"б",
|
| 1292 |
+
"г",
|
| 1293 |
+
"й",
|
| 1294 |
+
"ч",
|
| 1295 |
+
"х",
|
| 1296 |
+
"ц",
|
| 1297 |
+
"ї",
|
| 1298 |
+
],
|
| 1299 |
+
"Norwegian": [
|
| 1300 |
+
"e",
|
| 1301 |
+
"r",
|
| 1302 |
+
"n",
|
| 1303 |
+
"t",
|
| 1304 |
+
"a",
|
| 1305 |
+
"s",
|
| 1306 |
+
"i",
|
| 1307 |
+
"o",
|
| 1308 |
+
"l",
|
| 1309 |
+
"d",
|
| 1310 |
+
"g",
|
| 1311 |
+
"k",
|
| 1312 |
+
"m",
|
| 1313 |
+
"v",
|
| 1314 |
+
"f",
|
| 1315 |
+
"p",
|
| 1316 |
+
"u",
|
| 1317 |
+
"b",
|
| 1318 |
+
"h",
|
| 1319 |
+
"å",
|
| 1320 |
+
"y",
|
| 1321 |
+
"j",
|
| 1322 |
+
"ø",
|
| 1323 |
+
"c",
|
| 1324 |
+
"æ",
|
| 1325 |
+
"w",
|
| 1326 |
+
],
|
| 1327 |
+
"Finnish": [
|
| 1328 |
+
"a",
|
| 1329 |
+
"i",
|
| 1330 |
+
"n",
|
| 1331 |
+
"t",
|
| 1332 |
+
"e",
|
| 1333 |
+
"s",
|
| 1334 |
+
"l",
|
| 1335 |
+
"o",
|
| 1336 |
+
"u",
|
| 1337 |
+
"k",
|
| 1338 |
+
"ä",
|
| 1339 |
+
"m",
|
| 1340 |
+
"r",
|
| 1341 |
+
"v",
|
| 1342 |
+
"j",
|
| 1343 |
+
"h",
|
| 1344 |
+
"p",
|
| 1345 |
+
"y",
|
| 1346 |
+
"d",
|
| 1347 |
+
"ö",
|
| 1348 |
+
"g",
|
| 1349 |
+
"c",
|
| 1350 |
+
"b",
|
| 1351 |
+
"f",
|
| 1352 |
+
"w",
|
| 1353 |
+
"z",
|
| 1354 |
+
],
|
| 1355 |
+
"Vietnamese": [
|
| 1356 |
+
"n",
|
| 1357 |
+
"h",
|
| 1358 |
+
"t",
|
| 1359 |
+
"i",
|
| 1360 |
+
"c",
|
| 1361 |
+
"g",
|
| 1362 |
+
"a",
|
| 1363 |
+
"o",
|
| 1364 |
+
"u",
|
| 1365 |
+
"m",
|
| 1366 |
+
"l",
|
| 1367 |
+
"r",
|
| 1368 |
+
"à",
|
| 1369 |
+
"đ",
|
| 1370 |
+
"s",
|
| 1371 |
+
"e",
|
| 1372 |
+
"v",
|
| 1373 |
+
"p",
|
| 1374 |
+
"b",
|
| 1375 |
+
"y",
|
| 1376 |
+
"ư",
|
| 1377 |
+
"d",
|
| 1378 |
+
"á",
|
| 1379 |
+
"k",
|
| 1380 |
+
"ộ",
|
| 1381 |
+
"ế",
|
| 1382 |
+
],
|
| 1383 |
+
"Czech": [
|
| 1384 |
+
"o",
|
| 1385 |
+
"e",
|
| 1386 |
+
"a",
|
| 1387 |
+
"n",
|
| 1388 |
+
"t",
|
| 1389 |
+
"s",
|
| 1390 |
+
"i",
|
| 1391 |
+
"l",
|
| 1392 |
+
"v",
|
| 1393 |
+
"r",
|
| 1394 |
+
"k",
|
| 1395 |
+
"d",
|
| 1396 |
+
"u",
|
| 1397 |
+
"m",
|
| 1398 |
+
"p",
|
| 1399 |
+
"í",
|
| 1400 |
+
"c",
|
| 1401 |
+
"h",
|
| 1402 |
+
"z",
|
| 1403 |
+
"á",
|
| 1404 |
+
"y",
|
| 1405 |
+
"j",
|
| 1406 |
+
"b",
|
| 1407 |
+
"ě",
|
| 1408 |
+
"é",
|
| 1409 |
+
"ř",
|
| 1410 |
+
],
|
| 1411 |
+
"Hungarian": [
|
| 1412 |
+
"e",
|
| 1413 |
+
"a",
|
| 1414 |
+
"t",
|
| 1415 |
+
"l",
|
| 1416 |
+
"s",
|
| 1417 |
+
"n",
|
| 1418 |
+
"k",
|
| 1419 |
+
"r",
|
| 1420 |
+
"i",
|
| 1421 |
+
"o",
|
| 1422 |
+
"z",
|
| 1423 |
+
"á",
|
| 1424 |
+
"é",
|
| 1425 |
+
"g",
|
| 1426 |
+
"m",
|
| 1427 |
+
"b",
|
| 1428 |
+
"y",
|
| 1429 |
+
"v",
|
| 1430 |
+
"d",
|
| 1431 |
+
"h",
|
| 1432 |
+
"u",
|
| 1433 |
+
"p",
|
| 1434 |
+
"j",
|
| 1435 |
+
"ö",
|
| 1436 |
+
"f",
|
| 1437 |
+
"c",
|
| 1438 |
+
],
|
| 1439 |
+
"Korean": [
|
| 1440 |
+
"이",
|
| 1441 |
+
"다",
|
| 1442 |
+
"에",
|
| 1443 |
+
"의",
|
| 1444 |
+
"는",
|
| 1445 |
+
"로",
|
| 1446 |
+
"하",
|
| 1447 |
+
"을",
|
| 1448 |
+
"가",
|
| 1449 |
+
"고",
|
| 1450 |
+
"지",
|
| 1451 |
+
"서",
|
| 1452 |
+
"한",
|
| 1453 |
+
"은",
|
| 1454 |
+
"기",
|
| 1455 |
+
"으",
|
| 1456 |
+
"년",
|
| 1457 |
+
"대",
|
| 1458 |
+
"사",
|
| 1459 |
+
"시",
|
| 1460 |
+
"를",
|
| 1461 |
+
"리",
|
| 1462 |
+
"도",
|
| 1463 |
+
"인",
|
| 1464 |
+
"스",
|
| 1465 |
+
"일",
|
| 1466 |
+
],
|
| 1467 |
+
"Indonesian": [
|
| 1468 |
+
"a",
|
| 1469 |
+
"n",
|
| 1470 |
+
"e",
|
| 1471 |
+
"i",
|
| 1472 |
+
"r",
|
| 1473 |
+
"t",
|
| 1474 |
+
"u",
|
| 1475 |
+
"s",
|
| 1476 |
+
"d",
|
| 1477 |
+
"k",
|
| 1478 |
+
"m",
|
| 1479 |
+
"l",
|
| 1480 |
+
"g",
|
| 1481 |
+
"p",
|
| 1482 |
+
"b",
|
| 1483 |
+
"o",
|
| 1484 |
+
"h",
|
| 1485 |
+
"y",
|
| 1486 |
+
"j",
|
| 1487 |
+
"c",
|
| 1488 |
+
"w",
|
| 1489 |
+
"f",
|
| 1490 |
+
"v",
|
| 1491 |
+
"z",
|
| 1492 |
+
"x",
|
| 1493 |
+
"q",
|
| 1494 |
+
],
|
| 1495 |
+
"Turkish": [
|
| 1496 |
+
"a",
|
| 1497 |
+
"e",
|
| 1498 |
+
"i",
|
| 1499 |
+
"n",
|
| 1500 |
+
"r",
|
| 1501 |
+
"l",
|
| 1502 |
+
"ı",
|
| 1503 |
+
"k",
|
| 1504 |
+
"d",
|
| 1505 |
+
"t",
|
| 1506 |
+
"s",
|
| 1507 |
+
"m",
|
| 1508 |
+
"y",
|
| 1509 |
+
"u",
|
| 1510 |
+
"o",
|
| 1511 |
+
"b",
|
| 1512 |
+
"ü",
|
| 1513 |
+
"ş",
|
| 1514 |
+
"v",
|
| 1515 |
+
"g",
|
| 1516 |
+
"z",
|
| 1517 |
+
"h",
|
| 1518 |
+
"c",
|
| 1519 |
+
"p",
|
| 1520 |
+
"ç",
|
| 1521 |
+
"ğ",
|
| 1522 |
+
],
|
| 1523 |
+
"Romanian": [
|
| 1524 |
+
"e",
|
| 1525 |
+
"i",
|
| 1526 |
+
"a",
|
| 1527 |
+
"r",
|
| 1528 |
+
"n",
|
| 1529 |
+
"t",
|
| 1530 |
+
"u",
|
| 1531 |
+
"l",
|
| 1532 |
+
"o",
|
| 1533 |
+
"c",
|
| 1534 |
+
"s",
|
| 1535 |
+
"d",
|
| 1536 |
+
"p",
|
| 1537 |
+
"m",
|
| 1538 |
+
"ă",
|
| 1539 |
+
"f",
|
| 1540 |
+
"v",
|
| 1541 |
+
"î",
|
| 1542 |
+
"g",
|
| 1543 |
+
"b",
|
| 1544 |
+
"ș",
|
| 1545 |
+
"ț",
|
| 1546 |
+
"z",
|
| 1547 |
+
"h",
|
| 1548 |
+
"â",
|
| 1549 |
+
"j",
|
| 1550 |
+
],
|
| 1551 |
+
"Farsi": [
|
| 1552 |
+
"ا",
|
| 1553 |
+
"ی",
|
| 1554 |
+
"ر",
|
| 1555 |
+
"د",
|
| 1556 |
+
"ن",
|
| 1557 |
+
"ه",
|
| 1558 |
+
"و",
|
| 1559 |
+
"م",
|
| 1560 |
+
"ت",
|
| 1561 |
+
"ب",
|
| 1562 |
+
"س",
|
| 1563 |
+
"ل",
|
| 1564 |
+
"ک",
|
| 1565 |
+
"ش",
|
| 1566 |
+
"ز",
|
| 1567 |
+
"ف",
|
| 1568 |
+
"گ",
|
| 1569 |
+
"ع",
|
| 1570 |
+
"خ",
|
| 1571 |
+
"ق",
|
| 1572 |
+
"ج",
|
| 1573 |
+
"آ",
|
| 1574 |
+
"پ",
|
| 1575 |
+
"ح",
|
| 1576 |
+
"ط",
|
| 1577 |
+
"ص",
|
| 1578 |
+
],
|
| 1579 |
+
"Arabic": [
|
| 1580 |
+
"ا",
|
| 1581 |
+
"ل",
|
| 1582 |
+
"ي",
|
| 1583 |
+
"م",
|
| 1584 |
+
"و",
|
| 1585 |
+
"ن",
|
| 1586 |
+
"ر",
|
| 1587 |
+
"ت",
|
| 1588 |
+
"ب",
|
| 1589 |
+
"ة",
|
| 1590 |
+
"ع",
|
| 1591 |
+
"د",
|
| 1592 |
+
"س",
|
| 1593 |
+
"ف",
|
| 1594 |
+
"ه",
|
| 1595 |
+
"ك",
|
| 1596 |
+
"ق",
|
| 1597 |
+
"أ",
|
| 1598 |
+
"ح",
|
| 1599 |
+
"ج",
|
| 1600 |
+
"ش",
|
| 1601 |
+
"ط",
|
| 1602 |
+
"ص",
|
| 1603 |
+
"ى",
|
| 1604 |
+
"خ",
|
| 1605 |
+
"إ",
|
| 1606 |
+
],
|
| 1607 |
+
"Danish": [
|
| 1608 |
+
"e",
|
| 1609 |
+
"r",
|
| 1610 |
+
"n",
|
| 1611 |
+
"t",
|
| 1612 |
+
"a",
|
| 1613 |
+
"i",
|
| 1614 |
+
"s",
|
| 1615 |
+
"d",
|
| 1616 |
+
"l",
|
| 1617 |
+
"o",
|
| 1618 |
+
"g",
|
| 1619 |
+
"m",
|
| 1620 |
+
"k",
|
| 1621 |
+
"f",
|
| 1622 |
+
"v",
|
| 1623 |
+
"u",
|
| 1624 |
+
"b",
|
| 1625 |
+
"h",
|
| 1626 |
+
"p",
|
| 1627 |
+
"å",
|
| 1628 |
+
"y",
|
| 1629 |
+
"ø",
|
| 1630 |
+
"æ",
|
| 1631 |
+
"c",
|
| 1632 |
+
"j",
|
| 1633 |
+
"w",
|
| 1634 |
+
],
|
| 1635 |
+
"Serbian": [
|
| 1636 |
+
"а",
|
| 1637 |
+
"и",
|
| 1638 |
+
"о",
|
| 1639 |
+
"е",
|
| 1640 |
+
"н",
|
| 1641 |
+
"р",
|
| 1642 |
+
"с",
|
| 1643 |
+
"у",
|
| 1644 |
+
"т",
|
| 1645 |
+
"к",
|
| 1646 |
+
"ј",
|
| 1647 |
+
"в",
|
| 1648 |
+
"д",
|
| 1649 |
+
"м",
|
| 1650 |
+
"п",
|
| 1651 |
+
"л",
|
| 1652 |
+
"г",
|
| 1653 |
+
"з",
|
| 1654 |
+
"б",
|
| 1655 |
+
"a",
|
| 1656 |
+
"i",
|
| 1657 |
+
"e",
|
| 1658 |
+
"o",
|
| 1659 |
+
"n",
|
| 1660 |
+
"ц",
|
| 1661 |
+
"ш",
|
| 1662 |
+
],
|
| 1663 |
+
"Lithuanian": [
|
| 1664 |
+
"i",
|
| 1665 |
+
"a",
|
| 1666 |
+
"s",
|
| 1667 |
+
"o",
|
| 1668 |
+
"r",
|
| 1669 |
+
"e",
|
| 1670 |
+
"t",
|
| 1671 |
+
"n",
|
| 1672 |
+
"u",
|
| 1673 |
+
"k",
|
| 1674 |
+
"m",
|
| 1675 |
+
"l",
|
| 1676 |
+
"p",
|
| 1677 |
+
"v",
|
| 1678 |
+
"d",
|
| 1679 |
+
"j",
|
| 1680 |
+
"g",
|
| 1681 |
+
"ė",
|
| 1682 |
+
"b",
|
| 1683 |
+
"y",
|
| 1684 |
+
"ų",
|
| 1685 |
+
"š",
|
| 1686 |
+
"ž",
|
| 1687 |
+
"c",
|
| 1688 |
+
"ą",
|
| 1689 |
+
"į",
|
| 1690 |
+
],
|
| 1691 |
+
"Slovene": [
|
| 1692 |
+
"e",
|
| 1693 |
+
"a",
|
| 1694 |
+
"i",
|
| 1695 |
+
"o",
|
| 1696 |
+
"n",
|
| 1697 |
+
"r",
|
| 1698 |
+
"s",
|
| 1699 |
+
"l",
|
| 1700 |
+
"t",
|
| 1701 |
+
"j",
|
| 1702 |
+
"v",
|
| 1703 |
+
"k",
|
| 1704 |
+
"d",
|
| 1705 |
+
"p",
|
| 1706 |
+
"m",
|
| 1707 |
+
"u",
|
| 1708 |
+
"z",
|
| 1709 |
+
"b",
|
| 1710 |
+
"g",
|
| 1711 |
+
"h",
|
| 1712 |
+
"č",
|
| 1713 |
+
"c",
|
| 1714 |
+
"š",
|
| 1715 |
+
"ž",
|
| 1716 |
+
"f",
|
| 1717 |
+
"y",
|
| 1718 |
+
],
|
| 1719 |
+
"Slovak": [
|
| 1720 |
+
"o",
|
| 1721 |
+
"a",
|
| 1722 |
+
"e",
|
| 1723 |
+
"n",
|
| 1724 |
+
"i",
|
| 1725 |
+
"r",
|
| 1726 |
+
"v",
|
| 1727 |
+
"t",
|
| 1728 |
+
"s",
|
| 1729 |
+
"l",
|
| 1730 |
+
"k",
|
| 1731 |
+
"d",
|
| 1732 |
+
"m",
|
| 1733 |
+
"p",
|
| 1734 |
+
"u",
|
| 1735 |
+
"c",
|
| 1736 |
+
"h",
|
| 1737 |
+
"j",
|
| 1738 |
+
"b",
|
| 1739 |
+
"z",
|
| 1740 |
+
"á",
|
| 1741 |
+
"y",
|
| 1742 |
+
"ý",
|
| 1743 |
+
"í",
|
| 1744 |
+
"č",
|
| 1745 |
+
"é",
|
| 1746 |
+
],
|
| 1747 |
+
"Hebrew": [
|
| 1748 |
+
"י",
|
| 1749 |
+
"ו",
|
| 1750 |
+
"ה",
|
| 1751 |
+
"ל",
|
| 1752 |
+
"ר",
|
| 1753 |
+
"ב",
|
| 1754 |
+
"ת",
|
| 1755 |
+
"מ",
|
| 1756 |
+
"א",
|
| 1757 |
+
"ש",
|
| 1758 |
+
"נ",
|
| 1759 |
+
"ע",
|
| 1760 |
+
"ם",
|
| 1761 |
+
"ד",
|
| 1762 |
+
"ק",
|
| 1763 |
+
"ח",
|
| 1764 |
+
"פ",
|
| 1765 |
+
"ס",
|
| 1766 |
+
"כ",
|
| 1767 |
+
"ג",
|
| 1768 |
+
"ט",
|
| 1769 |
+
"צ",
|
| 1770 |
+
"ן",
|
| 1771 |
+
"ז",
|
| 1772 |
+
"ך",
|
| 1773 |
+
],
|
| 1774 |
+
"Bulgarian": [
|
| 1775 |
+
"а",
|
| 1776 |
+
"и",
|
| 1777 |
+
"о",
|
| 1778 |
+
"е",
|
| 1779 |
+
"н",
|
| 1780 |
+
"т",
|
| 1781 |
+
"р",
|
| 1782 |
+
"с",
|
| 1783 |
+
"в",
|
| 1784 |
+
"л",
|
| 1785 |
+
"к",
|
| 1786 |
+
"д",
|
| 1787 |
+
"п",
|
| 1788 |
+
"м",
|
| 1789 |
+
"з",
|
| 1790 |
+
"г",
|
| 1791 |
+
"я",
|
| 1792 |
+
"ъ",
|
| 1793 |
+
"у",
|
| 1794 |
+
"б",
|
| 1795 |
+
"ч",
|
| 1796 |
+
"ц",
|
| 1797 |
+
"й",
|
| 1798 |
+
"ж",
|
| 1799 |
+
"щ",
|
| 1800 |
+
"х",
|
| 1801 |
+
],
|
| 1802 |
+
"Croatian": [
|
| 1803 |
+
"a",
|
| 1804 |
+
"i",
|
| 1805 |
+
"o",
|
| 1806 |
+
"e",
|
| 1807 |
+
"n",
|
| 1808 |
+
"r",
|
| 1809 |
+
"j",
|
| 1810 |
+
"s",
|
| 1811 |
+
"t",
|
| 1812 |
+
"u",
|
| 1813 |
+
"k",
|
| 1814 |
+
"l",
|
| 1815 |
+
"v",
|
| 1816 |
+
"d",
|
| 1817 |
+
"m",
|
| 1818 |
+
"p",
|
| 1819 |
+
"g",
|
| 1820 |
+
"z",
|
| 1821 |
+
"b",
|
| 1822 |
+
"c",
|
| 1823 |
+
"č",
|
| 1824 |
+
"h",
|
| 1825 |
+
"š",
|
| 1826 |
+
"ž",
|
| 1827 |
+
"ć",
|
| 1828 |
+
"f",
|
| 1829 |
+
],
|
| 1830 |
+
"Hindi": [
|
| 1831 |
+
"क",
|
| 1832 |
+
"र",
|
| 1833 |
+
"स",
|
| 1834 |
+
"न",
|
| 1835 |
+
"त",
|
| 1836 |
+
"म",
|
| 1837 |
+
"ह",
|
| 1838 |
+
"प",
|
| 1839 |
+
"य",
|
| 1840 |
+
"ल",
|
| 1841 |
+
"व",
|
| 1842 |
+
"ज",
|
| 1843 |
+
"द",
|
| 1844 |
+
"ग",
|
| 1845 |
+
"ब",
|
| 1846 |
+
"श",
|
| 1847 |
+
"ट",
|
| 1848 |
+
"अ",
|
| 1849 |
+
"ए",
|
| 1850 |
+
"थ",
|
| 1851 |
+
"भ",
|
| 1852 |
+
"ड",
|
| 1853 |
+
"च",
|
| 1854 |
+
"ध",
|
| 1855 |
+
"ष",
|
| 1856 |
+
"इ",
|
| 1857 |
+
],
|
| 1858 |
+
"Estonian": [
|
| 1859 |
+
"a",
|
| 1860 |
+
"i",
|
| 1861 |
+
"e",
|
| 1862 |
+
"s",
|
| 1863 |
+
"t",
|
| 1864 |
+
"l",
|
| 1865 |
+
"u",
|
| 1866 |
+
"n",
|
| 1867 |
+
"o",
|
| 1868 |
+
"k",
|
| 1869 |
+
"r",
|
| 1870 |
+
"d",
|
| 1871 |
+
"m",
|
| 1872 |
+
"v",
|
| 1873 |
+
"g",
|
| 1874 |
+
"p",
|
| 1875 |
+
"j",
|
| 1876 |
+
"h",
|
| 1877 |
+
"ä",
|
| 1878 |
+
"b",
|
| 1879 |
+
"õ",
|
| 1880 |
+
"ü",
|
| 1881 |
+
"f",
|
| 1882 |
+
"c",
|
| 1883 |
+
"ö",
|
| 1884 |
+
"y",
|
| 1885 |
+
],
|
| 1886 |
+
"Thai": [
|
| 1887 |
+
"า",
|
| 1888 |
+
"น",
|
| 1889 |
+
"ร",
|
| 1890 |
+
"อ",
|
| 1891 |
+
"ก",
|
| 1892 |
+
"เ",
|
| 1893 |
+
"ง",
|
| 1894 |
+
"ม",
|
| 1895 |
+
"ย",
|
| 1896 |
+
"ล",
|
| 1897 |
+
"ว",
|
| 1898 |
+
"ด",
|
| 1899 |
+
"ท",
|
| 1900 |
+
"ส",
|
| 1901 |
+
"ต",
|
| 1902 |
+
"ะ",
|
| 1903 |
+
"ป",
|
| 1904 |
+
"บ",
|
| 1905 |
+
"ค",
|
| 1906 |
+
"ห",
|
| 1907 |
+
"แ",
|
| 1908 |
+
"จ",
|
| 1909 |
+
"พ",
|
| 1910 |
+
"ช",
|
| 1911 |
+
"ข",
|
| 1912 |
+
"ใ",
|
| 1913 |
+
],
|
| 1914 |
+
"Greek": [
|
| 1915 |
+
"α",
|
| 1916 |
+
"τ",
|
| 1917 |
+
"ο",
|
| 1918 |
+
"ι",
|
| 1919 |
+
"ε",
|
| 1920 |
+
"ν",
|
| 1921 |
+
"ρ",
|
| 1922 |
+
"σ",
|
| 1923 |
+
"κ",
|
| 1924 |
+
"η",
|
| 1925 |
+
"π",
|
| 1926 |
+
"ς",
|
| 1927 |
+
"υ",
|
| 1928 |
+
"μ",
|
| 1929 |
+
"λ",
|
| 1930 |
+
"ί",
|
| 1931 |
+
"ό",
|
| 1932 |
+
"ά",
|
| 1933 |
+
"γ",
|
| 1934 |
+
"έ",
|
| 1935 |
+
"δ",
|
| 1936 |
+
"ή",
|
| 1937 |
+
"ω",
|
| 1938 |
+
"χ",
|
| 1939 |
+
"θ",
|
| 1940 |
+
"ύ",
|
| 1941 |
+
],
|
| 1942 |
+
"Tamil": [
|
| 1943 |
+
"க",
|
| 1944 |
+
"த",
|
| 1945 |
+
"ப",
|
| 1946 |
+
"ட",
|
| 1947 |
+
"ர",
|
| 1948 |
+
"ம",
|
| 1949 |
+
"ல",
|
| 1950 |
+
"ன",
|
| 1951 |
+
"வ",
|
| 1952 |
+
"ற",
|
| 1953 |
+
"ய",
|
| 1954 |
+
"ள",
|
| 1955 |
+
"ச",
|
| 1956 |
+
"ந",
|
| 1957 |
+
"இ",
|
| 1958 |
+
"ண",
|
| 1959 |
+
"அ",
|
| 1960 |
+
"ஆ",
|
| 1961 |
+
"ழ",
|
| 1962 |
+
"ங",
|
| 1963 |
+
"எ",
|
| 1964 |
+
"உ",
|
| 1965 |
+
"ஒ",
|
| 1966 |
+
"ஸ",
|
| 1967 |
+
],
|
| 1968 |
+
"Kazakh": [
|
| 1969 |
+
"а",
|
| 1970 |
+
"ы",
|
| 1971 |
+
"е",
|
| 1972 |
+
"н",
|
| 1973 |
+
"т",
|
| 1974 |
+
"р",
|
| 1975 |
+
"л",
|
| 1976 |
+
"і",
|
| 1977 |
+
"д",
|
| 1978 |
+
"с",
|
| 1979 |
+
"м",
|
| 1980 |
+
"қ",
|
| 1981 |
+
"к",
|
| 1982 |
+
"о",
|
| 1983 |
+
"б",
|
| 1984 |
+
"и",
|
| 1985 |
+
"у",
|
| 1986 |
+
"ғ",
|
| 1987 |
+
"ж",
|
| 1988 |
+
"ң",
|
| 1989 |
+
"з",
|
| 1990 |
+
"ш",
|
| 1991 |
+
"й",
|
| 1992 |
+
"п",
|
| 1993 |
+
"г",
|
| 1994 |
+
"ө",
|
| 1995 |
+
],
|
| 1996 |
+
}
|
| 1997 |
+
|
| 1998 |
+
LANGUAGE_SUPPORTED_COUNT: int = len(FREQUENCIES)
|
.venv/lib/python3.11/site-packages/charset_normalizer/legacy.py
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
|
| 3 |
+
from typing import TYPE_CHECKING, Any
|
| 4 |
+
from warnings import warn
|
| 5 |
+
|
| 6 |
+
from .api import from_bytes
|
| 7 |
+
from .constant import CHARDET_CORRESPONDENCE
|
| 8 |
+
|
| 9 |
+
# TODO: remove this check when dropping Python 3.7 support
|
| 10 |
+
if TYPE_CHECKING:
|
| 11 |
+
from typing_extensions import TypedDict
|
| 12 |
+
|
| 13 |
+
class ResultDict(TypedDict):
|
| 14 |
+
encoding: str | None
|
| 15 |
+
language: str
|
| 16 |
+
confidence: float | None
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
def detect(
|
| 20 |
+
byte_str: bytes, should_rename_legacy: bool = False, **kwargs: Any
|
| 21 |
+
) -> ResultDict:
|
| 22 |
+
"""
|
| 23 |
+
chardet legacy method
|
| 24 |
+
Detect the encoding of the given byte string. It should be mostly backward-compatible.
|
| 25 |
+
Encoding name will match Chardet own writing whenever possible. (Not on encoding name unsupported by it)
|
| 26 |
+
This function is deprecated and should be used to migrate your project easily, consult the documentation for
|
| 27 |
+
further information. Not planned for removal.
|
| 28 |
+
|
| 29 |
+
:param byte_str: The byte sequence to examine.
|
| 30 |
+
:param should_rename_legacy: Should we rename legacy encodings
|
| 31 |
+
to their more modern equivalents?
|
| 32 |
+
"""
|
| 33 |
+
if len(kwargs):
|
| 34 |
+
warn(
|
| 35 |
+
f"charset-normalizer disregard arguments '{','.join(list(kwargs.keys()))}' in legacy function detect()"
|
| 36 |
+
)
|
| 37 |
+
|
| 38 |
+
if not isinstance(byte_str, (bytearray, bytes)):
|
| 39 |
+
raise TypeError( # pragma: nocover
|
| 40 |
+
"Expected object of type bytes or bytearray, got: " "{}".format(
|
| 41 |
+
type(byte_str)
|
| 42 |
+
)
|
| 43 |
+
)
|
| 44 |
+
|
| 45 |
+
if isinstance(byte_str, bytearray):
|
| 46 |
+
byte_str = bytes(byte_str)
|
| 47 |
+
|
| 48 |
+
r = from_bytes(byte_str).best()
|
| 49 |
+
|
| 50 |
+
encoding = r.encoding if r is not None else None
|
| 51 |
+
language = r.language if r is not None and r.language != "Unknown" else ""
|
| 52 |
+
confidence = 1.0 - r.chaos if r is not None else None
|
| 53 |
+
|
| 54 |
+
# Note: CharsetNormalizer does not return 'UTF-8-SIG' as the sig get stripped in the detection/normalization process
|
| 55 |
+
# but chardet does return 'utf-8-sig' and it is a valid codec name.
|
| 56 |
+
if r is not None and encoding == "utf_8" and r.bom:
|
| 57 |
+
encoding += "_sig"
|
| 58 |
+
|
| 59 |
+
if should_rename_legacy is False and encoding in CHARDET_CORRESPONDENCE:
|
| 60 |
+
encoding = CHARDET_CORRESPONDENCE[encoding]
|
| 61 |
+
|
| 62 |
+
return {
|
| 63 |
+
"encoding": encoding,
|
| 64 |
+
"language": language,
|
| 65 |
+
"confidence": confidence,
|
| 66 |
+
}
|
.venv/lib/python3.11/site-packages/charset_normalizer/md.cpython-311-x86_64-linux-gnu.so
ADDED
|
Binary file (16.1 kB). View file
|
|
|
.venv/lib/python3.11/site-packages/charset_normalizer/md.py
ADDED
|
@@ -0,0 +1,630 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
|
| 3 |
+
from functools import lru_cache
|
| 4 |
+
from logging import getLogger
|
| 5 |
+
|
| 6 |
+
from .constant import (
|
| 7 |
+
COMMON_SAFE_ASCII_CHARACTERS,
|
| 8 |
+
TRACE,
|
| 9 |
+
UNICODE_SECONDARY_RANGE_KEYWORD,
|
| 10 |
+
)
|
| 11 |
+
from .utils import (
|
| 12 |
+
is_accentuated,
|
| 13 |
+
is_arabic,
|
| 14 |
+
is_arabic_isolated_form,
|
| 15 |
+
is_case_variable,
|
| 16 |
+
is_cjk,
|
| 17 |
+
is_emoticon,
|
| 18 |
+
is_hangul,
|
| 19 |
+
is_hiragana,
|
| 20 |
+
is_katakana,
|
| 21 |
+
is_latin,
|
| 22 |
+
is_punctuation,
|
| 23 |
+
is_separator,
|
| 24 |
+
is_symbol,
|
| 25 |
+
is_thai,
|
| 26 |
+
is_unprintable,
|
| 27 |
+
remove_accent,
|
| 28 |
+
unicode_range,
|
| 29 |
+
)
|
| 30 |
+
|
| 31 |
+
|
| 32 |
+
class MessDetectorPlugin:
|
| 33 |
+
"""
|
| 34 |
+
Base abstract class used for mess detection plugins.
|
| 35 |
+
All detectors MUST extend and implement given methods.
|
| 36 |
+
"""
|
| 37 |
+
|
| 38 |
+
def eligible(self, character: str) -> bool:
|
| 39 |
+
"""
|
| 40 |
+
Determine if given character should be fed in.
|
| 41 |
+
"""
|
| 42 |
+
raise NotImplementedError # pragma: nocover
|
| 43 |
+
|
| 44 |
+
def feed(self, character: str) -> None:
|
| 45 |
+
"""
|
| 46 |
+
The main routine to be executed upon character.
|
| 47 |
+
Insert the logic in witch the text would be considered chaotic.
|
| 48 |
+
"""
|
| 49 |
+
raise NotImplementedError # pragma: nocover
|
| 50 |
+
|
| 51 |
+
def reset(self) -> None: # pragma: no cover
|
| 52 |
+
"""
|
| 53 |
+
Permit to reset the plugin to the initial state.
|
| 54 |
+
"""
|
| 55 |
+
raise NotImplementedError
|
| 56 |
+
|
| 57 |
+
@property
|
| 58 |
+
def ratio(self) -> float:
|
| 59 |
+
"""
|
| 60 |
+
Compute the chaos ratio based on what your feed() has seen.
|
| 61 |
+
Must NOT be lower than 0.; No restriction gt 0.
|
| 62 |
+
"""
|
| 63 |
+
raise NotImplementedError # pragma: nocover
|
| 64 |
+
|
| 65 |
+
|
| 66 |
+
class TooManySymbolOrPunctuationPlugin(MessDetectorPlugin):
|
| 67 |
+
def __init__(self) -> None:
|
| 68 |
+
self._punctuation_count: int = 0
|
| 69 |
+
self._symbol_count: int = 0
|
| 70 |
+
self._character_count: int = 0
|
| 71 |
+
|
| 72 |
+
self._last_printable_char: str | None = None
|
| 73 |
+
self._frenzy_symbol_in_word: bool = False
|
| 74 |
+
|
| 75 |
+
def eligible(self, character: str) -> bool:
|
| 76 |
+
return character.isprintable()
|
| 77 |
+
|
| 78 |
+
def feed(self, character: str) -> None:
|
| 79 |
+
self._character_count += 1
|
| 80 |
+
|
| 81 |
+
if (
|
| 82 |
+
character != self._last_printable_char
|
| 83 |
+
and character not in COMMON_SAFE_ASCII_CHARACTERS
|
| 84 |
+
):
|
| 85 |
+
if is_punctuation(character):
|
| 86 |
+
self._punctuation_count += 1
|
| 87 |
+
elif (
|
| 88 |
+
character.isdigit() is False
|
| 89 |
+
and is_symbol(character)
|
| 90 |
+
and is_emoticon(character) is False
|
| 91 |
+
):
|
| 92 |
+
self._symbol_count += 2
|
| 93 |
+
|
| 94 |
+
self._last_printable_char = character
|
| 95 |
+
|
| 96 |
+
def reset(self) -> None: # Abstract
|
| 97 |
+
self._punctuation_count = 0
|
| 98 |
+
self._character_count = 0
|
| 99 |
+
self._symbol_count = 0
|
| 100 |
+
|
| 101 |
+
@property
|
| 102 |
+
def ratio(self) -> float:
|
| 103 |
+
if self._character_count == 0:
|
| 104 |
+
return 0.0
|
| 105 |
+
|
| 106 |
+
ratio_of_punctuation: float = (
|
| 107 |
+
self._punctuation_count + self._symbol_count
|
| 108 |
+
) / self._character_count
|
| 109 |
+
|
| 110 |
+
return ratio_of_punctuation if ratio_of_punctuation >= 0.3 else 0.0
|
| 111 |
+
|
| 112 |
+
|
| 113 |
+
class TooManyAccentuatedPlugin(MessDetectorPlugin):
|
| 114 |
+
def __init__(self) -> None:
|
| 115 |
+
self._character_count: int = 0
|
| 116 |
+
self._accentuated_count: int = 0
|
| 117 |
+
|
| 118 |
+
def eligible(self, character: str) -> bool:
|
| 119 |
+
return character.isalpha()
|
| 120 |
+
|
| 121 |
+
def feed(self, character: str) -> None:
|
| 122 |
+
self._character_count += 1
|
| 123 |
+
|
| 124 |
+
if is_accentuated(character):
|
| 125 |
+
self._accentuated_count += 1
|
| 126 |
+
|
| 127 |
+
def reset(self) -> None: # Abstract
|
| 128 |
+
self._character_count = 0
|
| 129 |
+
self._accentuated_count = 0
|
| 130 |
+
|
| 131 |
+
@property
|
| 132 |
+
def ratio(self) -> float:
|
| 133 |
+
if self._character_count < 8:
|
| 134 |
+
return 0.0
|
| 135 |
+
|
| 136 |
+
ratio_of_accentuation: float = self._accentuated_count / self._character_count
|
| 137 |
+
return ratio_of_accentuation if ratio_of_accentuation >= 0.35 else 0.0
|
| 138 |
+
|
| 139 |
+
|
| 140 |
+
class UnprintablePlugin(MessDetectorPlugin):
|
| 141 |
+
def __init__(self) -> None:
|
| 142 |
+
self._unprintable_count: int = 0
|
| 143 |
+
self._character_count: int = 0
|
| 144 |
+
|
| 145 |
+
def eligible(self, character: str) -> bool:
|
| 146 |
+
return True
|
| 147 |
+
|
| 148 |
+
def feed(self, character: str) -> None:
|
| 149 |
+
if is_unprintable(character):
|
| 150 |
+
self._unprintable_count += 1
|
| 151 |
+
self._character_count += 1
|
| 152 |
+
|
| 153 |
+
def reset(self) -> None: # Abstract
|
| 154 |
+
self._unprintable_count = 0
|
| 155 |
+
|
| 156 |
+
@property
|
| 157 |
+
def ratio(self) -> float:
|
| 158 |
+
if self._character_count == 0:
|
| 159 |
+
return 0.0
|
| 160 |
+
|
| 161 |
+
return (self._unprintable_count * 8) / self._character_count
|
| 162 |
+
|
| 163 |
+
|
| 164 |
+
class SuspiciousDuplicateAccentPlugin(MessDetectorPlugin):
|
| 165 |
+
def __init__(self) -> None:
|
| 166 |
+
self._successive_count: int = 0
|
| 167 |
+
self._character_count: int = 0
|
| 168 |
+
|
| 169 |
+
self._last_latin_character: str | None = None
|
| 170 |
+
|
| 171 |
+
def eligible(self, character: str) -> bool:
|
| 172 |
+
return character.isalpha() and is_latin(character)
|
| 173 |
+
|
| 174 |
+
def feed(self, character: str) -> None:
|
| 175 |
+
self._character_count += 1
|
| 176 |
+
if (
|
| 177 |
+
self._last_latin_character is not None
|
| 178 |
+
and is_accentuated(character)
|
| 179 |
+
and is_accentuated(self._last_latin_character)
|
| 180 |
+
):
|
| 181 |
+
if character.isupper() and self._last_latin_character.isupper():
|
| 182 |
+
self._successive_count += 1
|
| 183 |
+
# Worse if its the same char duplicated with different accent.
|
| 184 |
+
if remove_accent(character) == remove_accent(self._last_latin_character):
|
| 185 |
+
self._successive_count += 1
|
| 186 |
+
self._last_latin_character = character
|
| 187 |
+
|
| 188 |
+
def reset(self) -> None: # Abstract
|
| 189 |
+
self._successive_count = 0
|
| 190 |
+
self._character_count = 0
|
| 191 |
+
self._last_latin_character = None
|
| 192 |
+
|
| 193 |
+
@property
|
| 194 |
+
def ratio(self) -> float:
|
| 195 |
+
if self._character_count == 0:
|
| 196 |
+
return 0.0
|
| 197 |
+
|
| 198 |
+
return (self._successive_count * 2) / self._character_count
|
| 199 |
+
|
| 200 |
+
|
| 201 |
+
class SuspiciousRange(MessDetectorPlugin):
|
| 202 |
+
def __init__(self) -> None:
|
| 203 |
+
self._suspicious_successive_range_count: int = 0
|
| 204 |
+
self._character_count: int = 0
|
| 205 |
+
self._last_printable_seen: str | None = None
|
| 206 |
+
|
| 207 |
+
def eligible(self, character: str) -> bool:
|
| 208 |
+
return character.isprintable()
|
| 209 |
+
|
| 210 |
+
def feed(self, character: str) -> None:
|
| 211 |
+
self._character_count += 1
|
| 212 |
+
|
| 213 |
+
if (
|
| 214 |
+
character.isspace()
|
| 215 |
+
or is_punctuation(character)
|
| 216 |
+
or character in COMMON_SAFE_ASCII_CHARACTERS
|
| 217 |
+
):
|
| 218 |
+
self._last_printable_seen = None
|
| 219 |
+
return
|
| 220 |
+
|
| 221 |
+
if self._last_printable_seen is None:
|
| 222 |
+
self._last_printable_seen = character
|
| 223 |
+
return
|
| 224 |
+
|
| 225 |
+
unicode_range_a: str | None = unicode_range(self._last_printable_seen)
|
| 226 |
+
unicode_range_b: str | None = unicode_range(character)
|
| 227 |
+
|
| 228 |
+
if is_suspiciously_successive_range(unicode_range_a, unicode_range_b):
|
| 229 |
+
self._suspicious_successive_range_count += 1
|
| 230 |
+
|
| 231 |
+
self._last_printable_seen = character
|
| 232 |
+
|
| 233 |
+
def reset(self) -> None: # Abstract
|
| 234 |
+
self._character_count = 0
|
| 235 |
+
self._suspicious_successive_range_count = 0
|
| 236 |
+
self._last_printable_seen = None
|
| 237 |
+
|
| 238 |
+
@property
|
| 239 |
+
def ratio(self) -> float:
|
| 240 |
+
if self._character_count <= 13:
|
| 241 |
+
return 0.0
|
| 242 |
+
|
| 243 |
+
ratio_of_suspicious_range_usage: float = (
|
| 244 |
+
self._suspicious_successive_range_count * 2
|
| 245 |
+
) / self._character_count
|
| 246 |
+
|
| 247 |
+
return ratio_of_suspicious_range_usage
|
| 248 |
+
|
| 249 |
+
|
| 250 |
+
class SuperWeirdWordPlugin(MessDetectorPlugin):
|
| 251 |
+
def __init__(self) -> None:
|
| 252 |
+
self._word_count: int = 0
|
| 253 |
+
self._bad_word_count: int = 0
|
| 254 |
+
self._foreign_long_count: int = 0
|
| 255 |
+
|
| 256 |
+
self._is_current_word_bad: bool = False
|
| 257 |
+
self._foreign_long_watch: bool = False
|
| 258 |
+
|
| 259 |
+
self._character_count: int = 0
|
| 260 |
+
self._bad_character_count: int = 0
|
| 261 |
+
|
| 262 |
+
self._buffer: str = ""
|
| 263 |
+
self._buffer_accent_count: int = 0
|
| 264 |
+
self._buffer_glyph_count: int = 0
|
| 265 |
+
|
| 266 |
+
def eligible(self, character: str) -> bool:
|
| 267 |
+
return True
|
| 268 |
+
|
| 269 |
+
def feed(self, character: str) -> None:
|
| 270 |
+
if character.isalpha():
|
| 271 |
+
self._buffer += character
|
| 272 |
+
if is_accentuated(character):
|
| 273 |
+
self._buffer_accent_count += 1
|
| 274 |
+
if (
|
| 275 |
+
self._foreign_long_watch is False
|
| 276 |
+
and (is_latin(character) is False or is_accentuated(character))
|
| 277 |
+
and is_cjk(character) is False
|
| 278 |
+
and is_hangul(character) is False
|
| 279 |
+
and is_katakana(character) is False
|
| 280 |
+
and is_hiragana(character) is False
|
| 281 |
+
and is_thai(character) is False
|
| 282 |
+
):
|
| 283 |
+
self._foreign_long_watch = True
|
| 284 |
+
if (
|
| 285 |
+
is_cjk(character)
|
| 286 |
+
or is_hangul(character)
|
| 287 |
+
or is_katakana(character)
|
| 288 |
+
or is_hiragana(character)
|
| 289 |
+
or is_thai(character)
|
| 290 |
+
):
|
| 291 |
+
self._buffer_glyph_count += 1
|
| 292 |
+
return
|
| 293 |
+
if not self._buffer:
|
| 294 |
+
return
|
| 295 |
+
if (
|
| 296 |
+
character.isspace() or is_punctuation(character) or is_separator(character)
|
| 297 |
+
) and self._buffer:
|
| 298 |
+
self._word_count += 1
|
| 299 |
+
buffer_length: int = len(self._buffer)
|
| 300 |
+
|
| 301 |
+
self._character_count += buffer_length
|
| 302 |
+
|
| 303 |
+
if buffer_length >= 4:
|
| 304 |
+
if self._buffer_accent_count / buffer_length >= 0.5:
|
| 305 |
+
self._is_current_word_bad = True
|
| 306 |
+
# Word/Buffer ending with an upper case accentuated letter are so rare,
|
| 307 |
+
# that we will consider them all as suspicious. Same weight as foreign_long suspicious.
|
| 308 |
+
elif (
|
| 309 |
+
is_accentuated(self._buffer[-1])
|
| 310 |
+
and self._buffer[-1].isupper()
|
| 311 |
+
and all(_.isupper() for _ in self._buffer) is False
|
| 312 |
+
):
|
| 313 |
+
self._foreign_long_count += 1
|
| 314 |
+
self._is_current_word_bad = True
|
| 315 |
+
elif self._buffer_glyph_count == 1:
|
| 316 |
+
self._is_current_word_bad = True
|
| 317 |
+
self._foreign_long_count += 1
|
| 318 |
+
if buffer_length >= 24 and self._foreign_long_watch:
|
| 319 |
+
camel_case_dst = [
|
| 320 |
+
i
|
| 321 |
+
for c, i in zip(self._buffer, range(0, buffer_length))
|
| 322 |
+
if c.isupper()
|
| 323 |
+
]
|
| 324 |
+
probable_camel_cased: bool = False
|
| 325 |
+
|
| 326 |
+
if camel_case_dst and (len(camel_case_dst) / buffer_length <= 0.3):
|
| 327 |
+
probable_camel_cased = True
|
| 328 |
+
|
| 329 |
+
if not probable_camel_cased:
|
| 330 |
+
self._foreign_long_count += 1
|
| 331 |
+
self._is_current_word_bad = True
|
| 332 |
+
|
| 333 |
+
if self._is_current_word_bad:
|
| 334 |
+
self._bad_word_count += 1
|
| 335 |
+
self._bad_character_count += len(self._buffer)
|
| 336 |
+
self._is_current_word_bad = False
|
| 337 |
+
|
| 338 |
+
self._foreign_long_watch = False
|
| 339 |
+
self._buffer = ""
|
| 340 |
+
self._buffer_accent_count = 0
|
| 341 |
+
self._buffer_glyph_count = 0
|
| 342 |
+
elif (
|
| 343 |
+
character not in {"<", ">", "-", "=", "~", "|", "_"}
|
| 344 |
+
and character.isdigit() is False
|
| 345 |
+
and is_symbol(character)
|
| 346 |
+
):
|
| 347 |
+
self._is_current_word_bad = True
|
| 348 |
+
self._buffer += character
|
| 349 |
+
|
| 350 |
+
def reset(self) -> None: # Abstract
|
| 351 |
+
self._buffer = ""
|
| 352 |
+
self._is_current_word_bad = False
|
| 353 |
+
self._foreign_long_watch = False
|
| 354 |
+
self._bad_word_count = 0
|
| 355 |
+
self._word_count = 0
|
| 356 |
+
self._character_count = 0
|
| 357 |
+
self._bad_character_count = 0
|
| 358 |
+
self._foreign_long_count = 0
|
| 359 |
+
|
| 360 |
+
@property
|
| 361 |
+
def ratio(self) -> float:
|
| 362 |
+
if self._word_count <= 10 and self._foreign_long_count == 0:
|
| 363 |
+
return 0.0
|
| 364 |
+
|
| 365 |
+
return self._bad_character_count / self._character_count
|
| 366 |
+
|
| 367 |
+
|
| 368 |
+
class CjkInvalidStopPlugin(MessDetectorPlugin):
|
| 369 |
+
"""
|
| 370 |
+
GB(Chinese) based encoding often render the stop incorrectly when the content does not fit and
|
| 371 |
+
can be easily detected. Searching for the overuse of '丅' and '丄'.
|
| 372 |
+
"""
|
| 373 |
+
|
| 374 |
+
def __init__(self) -> None:
|
| 375 |
+
self._wrong_stop_count: int = 0
|
| 376 |
+
self._cjk_character_count: int = 0
|
| 377 |
+
|
| 378 |
+
def eligible(self, character: str) -> bool:
|
| 379 |
+
return True
|
| 380 |
+
|
| 381 |
+
def feed(self, character: str) -> None:
|
| 382 |
+
if character in {"丅", "丄"}:
|
| 383 |
+
self._wrong_stop_count += 1
|
| 384 |
+
return
|
| 385 |
+
if is_cjk(character):
|
| 386 |
+
self._cjk_character_count += 1
|
| 387 |
+
|
| 388 |
+
def reset(self) -> None: # Abstract
|
| 389 |
+
self._wrong_stop_count = 0
|
| 390 |
+
self._cjk_character_count = 0
|
| 391 |
+
|
| 392 |
+
@property
|
| 393 |
+
def ratio(self) -> float:
|
| 394 |
+
if self._cjk_character_count < 16:
|
| 395 |
+
return 0.0
|
| 396 |
+
return self._wrong_stop_count / self._cjk_character_count
|
| 397 |
+
|
| 398 |
+
|
| 399 |
+
class ArchaicUpperLowerPlugin(MessDetectorPlugin):
|
| 400 |
+
def __init__(self) -> None:
|
| 401 |
+
self._buf: bool = False
|
| 402 |
+
|
| 403 |
+
self._character_count_since_last_sep: int = 0
|
| 404 |
+
|
| 405 |
+
self._successive_upper_lower_count: int = 0
|
| 406 |
+
self._successive_upper_lower_count_final: int = 0
|
| 407 |
+
|
| 408 |
+
self._character_count: int = 0
|
| 409 |
+
|
| 410 |
+
self._last_alpha_seen: str | None = None
|
| 411 |
+
self._current_ascii_only: bool = True
|
| 412 |
+
|
| 413 |
+
def eligible(self, character: str) -> bool:
|
| 414 |
+
return True
|
| 415 |
+
|
| 416 |
+
def feed(self, character: str) -> None:
|
| 417 |
+
is_concerned = character.isalpha() and is_case_variable(character)
|
| 418 |
+
chunk_sep = is_concerned is False
|
| 419 |
+
|
| 420 |
+
if chunk_sep and self._character_count_since_last_sep > 0:
|
| 421 |
+
if (
|
| 422 |
+
self._character_count_since_last_sep <= 64
|
| 423 |
+
and character.isdigit() is False
|
| 424 |
+
and self._current_ascii_only is False
|
| 425 |
+
):
|
| 426 |
+
self._successive_upper_lower_count_final += (
|
| 427 |
+
self._successive_upper_lower_count
|
| 428 |
+
)
|
| 429 |
+
|
| 430 |
+
self._successive_upper_lower_count = 0
|
| 431 |
+
self._character_count_since_last_sep = 0
|
| 432 |
+
self._last_alpha_seen = None
|
| 433 |
+
self._buf = False
|
| 434 |
+
self._character_count += 1
|
| 435 |
+
self._current_ascii_only = True
|
| 436 |
+
|
| 437 |
+
return
|
| 438 |
+
|
| 439 |
+
if self._current_ascii_only is True and character.isascii() is False:
|
| 440 |
+
self._current_ascii_only = False
|
| 441 |
+
|
| 442 |
+
if self._last_alpha_seen is not None:
|
| 443 |
+
if (character.isupper() and self._last_alpha_seen.islower()) or (
|
| 444 |
+
character.islower() and self._last_alpha_seen.isupper()
|
| 445 |
+
):
|
| 446 |
+
if self._buf is True:
|
| 447 |
+
self._successive_upper_lower_count += 2
|
| 448 |
+
self._buf = False
|
| 449 |
+
else:
|
| 450 |
+
self._buf = True
|
| 451 |
+
else:
|
| 452 |
+
self._buf = False
|
| 453 |
+
|
| 454 |
+
self._character_count += 1
|
| 455 |
+
self._character_count_since_last_sep += 1
|
| 456 |
+
self._last_alpha_seen = character
|
| 457 |
+
|
| 458 |
+
def reset(self) -> None: # Abstract
|
| 459 |
+
self._character_count = 0
|
| 460 |
+
self._character_count_since_last_sep = 0
|
| 461 |
+
self._successive_upper_lower_count = 0
|
| 462 |
+
self._successive_upper_lower_count_final = 0
|
| 463 |
+
self._last_alpha_seen = None
|
| 464 |
+
self._buf = False
|
| 465 |
+
self._current_ascii_only = True
|
| 466 |
+
|
| 467 |
+
@property
|
| 468 |
+
def ratio(self) -> float:
|
| 469 |
+
if self._character_count == 0:
|
| 470 |
+
return 0.0
|
| 471 |
+
|
| 472 |
+
return self._successive_upper_lower_count_final / self._character_count
|
| 473 |
+
|
| 474 |
+
|
| 475 |
+
class ArabicIsolatedFormPlugin(MessDetectorPlugin):
|
| 476 |
+
def __init__(self) -> None:
|
| 477 |
+
self._character_count: int = 0
|
| 478 |
+
self._isolated_form_count: int = 0
|
| 479 |
+
|
| 480 |
+
def reset(self) -> None: # Abstract
|
| 481 |
+
self._character_count = 0
|
| 482 |
+
self._isolated_form_count = 0
|
| 483 |
+
|
| 484 |
+
def eligible(self, character: str) -> bool:
|
| 485 |
+
return is_arabic(character)
|
| 486 |
+
|
| 487 |
+
def feed(self, character: str) -> None:
|
| 488 |
+
self._character_count += 1
|
| 489 |
+
|
| 490 |
+
if is_arabic_isolated_form(character):
|
| 491 |
+
self._isolated_form_count += 1
|
| 492 |
+
|
| 493 |
+
@property
|
| 494 |
+
def ratio(self) -> float:
|
| 495 |
+
if self._character_count < 8:
|
| 496 |
+
return 0.0
|
| 497 |
+
|
| 498 |
+
isolated_form_usage: float = self._isolated_form_count / self._character_count
|
| 499 |
+
|
| 500 |
+
return isolated_form_usage
|
| 501 |
+
|
| 502 |
+
|
| 503 |
+
@lru_cache(maxsize=1024)
|
| 504 |
+
def is_suspiciously_successive_range(
|
| 505 |
+
unicode_range_a: str | None, unicode_range_b: str | None
|
| 506 |
+
) -> bool:
|
| 507 |
+
"""
|
| 508 |
+
Determine if two Unicode range seen next to each other can be considered as suspicious.
|
| 509 |
+
"""
|
| 510 |
+
if unicode_range_a is None or unicode_range_b is None:
|
| 511 |
+
return True
|
| 512 |
+
|
| 513 |
+
if unicode_range_a == unicode_range_b:
|
| 514 |
+
return False
|
| 515 |
+
|
| 516 |
+
if "Latin" in unicode_range_a and "Latin" in unicode_range_b:
|
| 517 |
+
return False
|
| 518 |
+
|
| 519 |
+
if "Emoticons" in unicode_range_a or "Emoticons" in unicode_range_b:
|
| 520 |
+
return False
|
| 521 |
+
|
| 522 |
+
# Latin characters can be accompanied with a combining diacritical mark
|
| 523 |
+
# eg. Vietnamese.
|
| 524 |
+
if ("Latin" in unicode_range_a or "Latin" in unicode_range_b) and (
|
| 525 |
+
"Combining" in unicode_range_a or "Combining" in unicode_range_b
|
| 526 |
+
):
|
| 527 |
+
return False
|
| 528 |
+
|
| 529 |
+
keywords_range_a, keywords_range_b = (
|
| 530 |
+
unicode_range_a.split(" "),
|
| 531 |
+
unicode_range_b.split(" "),
|
| 532 |
+
)
|
| 533 |
+
|
| 534 |
+
for el in keywords_range_a:
|
| 535 |
+
if el in UNICODE_SECONDARY_RANGE_KEYWORD:
|
| 536 |
+
continue
|
| 537 |
+
if el in keywords_range_b:
|
| 538 |
+
return False
|
| 539 |
+
|
| 540 |
+
# Japanese Exception
|
| 541 |
+
range_a_jp_chars, range_b_jp_chars = (
|
| 542 |
+
unicode_range_a
|
| 543 |
+
in (
|
| 544 |
+
"Hiragana",
|
| 545 |
+
"Katakana",
|
| 546 |
+
),
|
| 547 |
+
unicode_range_b in ("Hiragana", "Katakana"),
|
| 548 |
+
)
|
| 549 |
+
if (range_a_jp_chars or range_b_jp_chars) and (
|
| 550 |
+
"CJK" in unicode_range_a or "CJK" in unicode_range_b
|
| 551 |
+
):
|
| 552 |
+
return False
|
| 553 |
+
if range_a_jp_chars and range_b_jp_chars:
|
| 554 |
+
return False
|
| 555 |
+
|
| 556 |
+
if "Hangul" in unicode_range_a or "Hangul" in unicode_range_b:
|
| 557 |
+
if "CJK" in unicode_range_a or "CJK" in unicode_range_b:
|
| 558 |
+
return False
|
| 559 |
+
if unicode_range_a == "Basic Latin" or unicode_range_b == "Basic Latin":
|
| 560 |
+
return False
|
| 561 |
+
|
| 562 |
+
# Chinese/Japanese use dedicated range for punctuation and/or separators.
|
| 563 |
+
if ("CJK" in unicode_range_a or "CJK" in unicode_range_b) or (
|
| 564 |
+
unicode_range_a in ["Katakana", "Hiragana"]
|
| 565 |
+
and unicode_range_b in ["Katakana", "Hiragana"]
|
| 566 |
+
):
|
| 567 |
+
if "Punctuation" in unicode_range_a or "Punctuation" in unicode_range_b:
|
| 568 |
+
return False
|
| 569 |
+
if "Forms" in unicode_range_a or "Forms" in unicode_range_b:
|
| 570 |
+
return False
|
| 571 |
+
if unicode_range_a == "Basic Latin" or unicode_range_b == "Basic Latin":
|
| 572 |
+
return False
|
| 573 |
+
|
| 574 |
+
return True
|
| 575 |
+
|
| 576 |
+
|
| 577 |
+
@lru_cache(maxsize=2048)
|
| 578 |
+
def mess_ratio(
|
| 579 |
+
decoded_sequence: str, maximum_threshold: float = 0.2, debug: bool = False
|
| 580 |
+
) -> float:
|
| 581 |
+
"""
|
| 582 |
+
Compute a mess ratio given a decoded bytes sequence. The maximum threshold does stop the computation earlier.
|
| 583 |
+
"""
|
| 584 |
+
|
| 585 |
+
detectors: list[MessDetectorPlugin] = [
|
| 586 |
+
md_class() for md_class in MessDetectorPlugin.__subclasses__()
|
| 587 |
+
]
|
| 588 |
+
|
| 589 |
+
length: int = len(decoded_sequence) + 1
|
| 590 |
+
|
| 591 |
+
mean_mess_ratio: float = 0.0
|
| 592 |
+
|
| 593 |
+
if length < 512:
|
| 594 |
+
intermediary_mean_mess_ratio_calc: int = 32
|
| 595 |
+
elif length <= 1024:
|
| 596 |
+
intermediary_mean_mess_ratio_calc = 64
|
| 597 |
+
else:
|
| 598 |
+
intermediary_mean_mess_ratio_calc = 128
|
| 599 |
+
|
| 600 |
+
for character, index in zip(decoded_sequence + "\n", range(length)):
|
| 601 |
+
for detector in detectors:
|
| 602 |
+
if detector.eligible(character):
|
| 603 |
+
detector.feed(character)
|
| 604 |
+
|
| 605 |
+
if (
|
| 606 |
+
index > 0 and index % intermediary_mean_mess_ratio_calc == 0
|
| 607 |
+
) or index == length - 1:
|
| 608 |
+
mean_mess_ratio = sum(dt.ratio for dt in detectors)
|
| 609 |
+
|
| 610 |
+
if mean_mess_ratio >= maximum_threshold:
|
| 611 |
+
break
|
| 612 |
+
|
| 613 |
+
if debug:
|
| 614 |
+
logger = getLogger("charset_normalizer")
|
| 615 |
+
|
| 616 |
+
logger.log(
|
| 617 |
+
TRACE,
|
| 618 |
+
"Mess-detector extended-analysis start. "
|
| 619 |
+
f"intermediary_mean_mess_ratio_calc={intermediary_mean_mess_ratio_calc} mean_mess_ratio={mean_mess_ratio} "
|
| 620 |
+
f"maximum_threshold={maximum_threshold}",
|
| 621 |
+
)
|
| 622 |
+
|
| 623 |
+
if len(decoded_sequence) > 16:
|
| 624 |
+
logger.log(TRACE, f"Starting with: {decoded_sequence[:16]}")
|
| 625 |
+
logger.log(TRACE, f"Ending with: {decoded_sequence[-16::]}")
|
| 626 |
+
|
| 627 |
+
for dt in detectors:
|
| 628 |
+
logger.log(TRACE, f"{dt.__class__}: {dt.ratio}")
|
| 629 |
+
|
| 630 |
+
return round(mean_mess_ratio, 3)
|
.venv/lib/python3.11/site-packages/charset_normalizer/models.py
ADDED
|
@@ -0,0 +1,360 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
|
| 3 |
+
from encodings.aliases import aliases
|
| 4 |
+
from hashlib import sha256
|
| 5 |
+
from json import dumps
|
| 6 |
+
from re import sub
|
| 7 |
+
from typing import Any, Iterator, List, Tuple
|
| 8 |
+
|
| 9 |
+
from .constant import RE_POSSIBLE_ENCODING_INDICATION, TOO_BIG_SEQUENCE
|
| 10 |
+
from .utils import iana_name, is_multi_byte_encoding, unicode_range
|
| 11 |
+
|
| 12 |
+
|
| 13 |
+
class CharsetMatch:
|
| 14 |
+
def __init__(
|
| 15 |
+
self,
|
| 16 |
+
payload: bytes,
|
| 17 |
+
guessed_encoding: str,
|
| 18 |
+
mean_mess_ratio: float,
|
| 19 |
+
has_sig_or_bom: bool,
|
| 20 |
+
languages: CoherenceMatches,
|
| 21 |
+
decoded_payload: str | None = None,
|
| 22 |
+
preemptive_declaration: str | None = None,
|
| 23 |
+
):
|
| 24 |
+
self._payload: bytes = payload
|
| 25 |
+
|
| 26 |
+
self._encoding: str = guessed_encoding
|
| 27 |
+
self._mean_mess_ratio: float = mean_mess_ratio
|
| 28 |
+
self._languages: CoherenceMatches = languages
|
| 29 |
+
self._has_sig_or_bom: bool = has_sig_or_bom
|
| 30 |
+
self._unicode_ranges: list[str] | None = None
|
| 31 |
+
|
| 32 |
+
self._leaves: list[CharsetMatch] = []
|
| 33 |
+
self._mean_coherence_ratio: float = 0.0
|
| 34 |
+
|
| 35 |
+
self._output_payload: bytes | None = None
|
| 36 |
+
self._output_encoding: str | None = None
|
| 37 |
+
|
| 38 |
+
self._string: str | None = decoded_payload
|
| 39 |
+
|
| 40 |
+
self._preemptive_declaration: str | None = preemptive_declaration
|
| 41 |
+
|
| 42 |
+
def __eq__(self, other: object) -> bool:
|
| 43 |
+
if not isinstance(other, CharsetMatch):
|
| 44 |
+
if isinstance(other, str):
|
| 45 |
+
return iana_name(other) == self.encoding
|
| 46 |
+
return False
|
| 47 |
+
return self.encoding == other.encoding and self.fingerprint == other.fingerprint
|
| 48 |
+
|
| 49 |
+
def __lt__(self, other: object) -> bool:
|
| 50 |
+
"""
|
| 51 |
+
Implemented to make sorted available upon CharsetMatches items.
|
| 52 |
+
"""
|
| 53 |
+
if not isinstance(other, CharsetMatch):
|
| 54 |
+
raise ValueError
|
| 55 |
+
|
| 56 |
+
chaos_difference: float = abs(self.chaos - other.chaos)
|
| 57 |
+
coherence_difference: float = abs(self.coherence - other.coherence)
|
| 58 |
+
|
| 59 |
+
# Below 1% difference --> Use Coherence
|
| 60 |
+
if chaos_difference < 0.01 and coherence_difference > 0.02:
|
| 61 |
+
return self.coherence > other.coherence
|
| 62 |
+
elif chaos_difference < 0.01 and coherence_difference <= 0.02:
|
| 63 |
+
# When having a difficult decision, use the result that decoded as many multi-byte as possible.
|
| 64 |
+
# preserve RAM usage!
|
| 65 |
+
if len(self._payload) >= TOO_BIG_SEQUENCE:
|
| 66 |
+
return self.chaos < other.chaos
|
| 67 |
+
return self.multi_byte_usage > other.multi_byte_usage
|
| 68 |
+
|
| 69 |
+
return self.chaos < other.chaos
|
| 70 |
+
|
| 71 |
+
@property
|
| 72 |
+
def multi_byte_usage(self) -> float:
|
| 73 |
+
return 1.0 - (len(str(self)) / len(self.raw))
|
| 74 |
+
|
| 75 |
+
def __str__(self) -> str:
|
| 76 |
+
# Lazy Str Loading
|
| 77 |
+
if self._string is None:
|
| 78 |
+
self._string = str(self._payload, self._encoding, "strict")
|
| 79 |
+
return self._string
|
| 80 |
+
|
| 81 |
+
def __repr__(self) -> str:
|
| 82 |
+
return f"<CharsetMatch '{self.encoding}' bytes({self.fingerprint})>"
|
| 83 |
+
|
| 84 |
+
def add_submatch(self, other: CharsetMatch) -> None:
|
| 85 |
+
if not isinstance(other, CharsetMatch) or other == self:
|
| 86 |
+
raise ValueError(
|
| 87 |
+
"Unable to add instance <{}> as a submatch of a CharsetMatch".format(
|
| 88 |
+
other.__class__
|
| 89 |
+
)
|
| 90 |
+
)
|
| 91 |
+
|
| 92 |
+
other._string = None # Unload RAM usage; dirty trick.
|
| 93 |
+
self._leaves.append(other)
|
| 94 |
+
|
| 95 |
+
@property
|
| 96 |
+
def encoding(self) -> str:
|
| 97 |
+
return self._encoding
|
| 98 |
+
|
| 99 |
+
@property
|
| 100 |
+
def encoding_aliases(self) -> list[str]:
|
| 101 |
+
"""
|
| 102 |
+
Encoding name are known by many name, using this could help when searching for IBM855 when it's listed as CP855.
|
| 103 |
+
"""
|
| 104 |
+
also_known_as: list[str] = []
|
| 105 |
+
for u, p in aliases.items():
|
| 106 |
+
if self.encoding == u:
|
| 107 |
+
also_known_as.append(p)
|
| 108 |
+
elif self.encoding == p:
|
| 109 |
+
also_known_as.append(u)
|
| 110 |
+
return also_known_as
|
| 111 |
+
|
| 112 |
+
@property
|
| 113 |
+
def bom(self) -> bool:
|
| 114 |
+
return self._has_sig_or_bom
|
| 115 |
+
|
| 116 |
+
@property
|
| 117 |
+
def byte_order_mark(self) -> bool:
|
| 118 |
+
return self._has_sig_or_bom
|
| 119 |
+
|
| 120 |
+
@property
|
| 121 |
+
def languages(self) -> list[str]:
|
| 122 |
+
"""
|
| 123 |
+
Return the complete list of possible languages found in decoded sequence.
|
| 124 |
+
Usually not really useful. Returned list may be empty even if 'language' property return something != 'Unknown'.
|
| 125 |
+
"""
|
| 126 |
+
return [e[0] for e in self._languages]
|
| 127 |
+
|
| 128 |
+
@property
|
| 129 |
+
def language(self) -> str:
|
| 130 |
+
"""
|
| 131 |
+
Most probable language found in decoded sequence. If none were detected or inferred, the property will return
|
| 132 |
+
"Unknown".
|
| 133 |
+
"""
|
| 134 |
+
if not self._languages:
|
| 135 |
+
# Trying to infer the language based on the given encoding
|
| 136 |
+
# Its either English or we should not pronounce ourselves in certain cases.
|
| 137 |
+
if "ascii" in self.could_be_from_charset:
|
| 138 |
+
return "English"
|
| 139 |
+
|
| 140 |
+
# doing it there to avoid circular import
|
| 141 |
+
from charset_normalizer.cd import encoding_languages, mb_encoding_languages
|
| 142 |
+
|
| 143 |
+
languages = (
|
| 144 |
+
mb_encoding_languages(self.encoding)
|
| 145 |
+
if is_multi_byte_encoding(self.encoding)
|
| 146 |
+
else encoding_languages(self.encoding)
|
| 147 |
+
)
|
| 148 |
+
|
| 149 |
+
if len(languages) == 0 or "Latin Based" in languages:
|
| 150 |
+
return "Unknown"
|
| 151 |
+
|
| 152 |
+
return languages[0]
|
| 153 |
+
|
| 154 |
+
return self._languages[0][0]
|
| 155 |
+
|
| 156 |
+
@property
|
| 157 |
+
def chaos(self) -> float:
|
| 158 |
+
return self._mean_mess_ratio
|
| 159 |
+
|
| 160 |
+
@property
|
| 161 |
+
def coherence(self) -> float:
|
| 162 |
+
if not self._languages:
|
| 163 |
+
return 0.0
|
| 164 |
+
return self._languages[0][1]
|
| 165 |
+
|
| 166 |
+
@property
|
| 167 |
+
def percent_chaos(self) -> float:
|
| 168 |
+
return round(self.chaos * 100, ndigits=3)
|
| 169 |
+
|
| 170 |
+
@property
|
| 171 |
+
def percent_coherence(self) -> float:
|
| 172 |
+
return round(self.coherence * 100, ndigits=3)
|
| 173 |
+
|
| 174 |
+
@property
|
| 175 |
+
def raw(self) -> bytes:
|
| 176 |
+
"""
|
| 177 |
+
Original untouched bytes.
|
| 178 |
+
"""
|
| 179 |
+
return self._payload
|
| 180 |
+
|
| 181 |
+
@property
|
| 182 |
+
def submatch(self) -> list[CharsetMatch]:
|
| 183 |
+
return self._leaves
|
| 184 |
+
|
| 185 |
+
@property
|
| 186 |
+
def has_submatch(self) -> bool:
|
| 187 |
+
return len(self._leaves) > 0
|
| 188 |
+
|
| 189 |
+
@property
|
| 190 |
+
def alphabets(self) -> list[str]:
|
| 191 |
+
if self._unicode_ranges is not None:
|
| 192 |
+
return self._unicode_ranges
|
| 193 |
+
# list detected ranges
|
| 194 |
+
detected_ranges: list[str | None] = [unicode_range(char) for char in str(self)]
|
| 195 |
+
# filter and sort
|
| 196 |
+
self._unicode_ranges = sorted(list({r for r in detected_ranges if r}))
|
| 197 |
+
return self._unicode_ranges
|
| 198 |
+
|
| 199 |
+
@property
|
| 200 |
+
def could_be_from_charset(self) -> list[str]:
|
| 201 |
+
"""
|
| 202 |
+
The complete list of encoding that output the exact SAME str result and therefore could be the originating
|
| 203 |
+
encoding.
|
| 204 |
+
This list does include the encoding available in property 'encoding'.
|
| 205 |
+
"""
|
| 206 |
+
return [self._encoding] + [m.encoding for m in self._leaves]
|
| 207 |
+
|
| 208 |
+
def output(self, encoding: str = "utf_8") -> bytes:
|
| 209 |
+
"""
|
| 210 |
+
Method to get re-encoded bytes payload using given target encoding. Default to UTF-8.
|
| 211 |
+
Any errors will be simply ignored by the encoder NOT replaced.
|
| 212 |
+
"""
|
| 213 |
+
if self._output_encoding is None or self._output_encoding != encoding:
|
| 214 |
+
self._output_encoding = encoding
|
| 215 |
+
decoded_string = str(self)
|
| 216 |
+
if (
|
| 217 |
+
self._preemptive_declaration is not None
|
| 218 |
+
and self._preemptive_declaration.lower()
|
| 219 |
+
not in ["utf-8", "utf8", "utf_8"]
|
| 220 |
+
):
|
| 221 |
+
patched_header = sub(
|
| 222 |
+
RE_POSSIBLE_ENCODING_INDICATION,
|
| 223 |
+
lambda m: m.string[m.span()[0] : m.span()[1]].replace(
|
| 224 |
+
m.groups()[0],
|
| 225 |
+
iana_name(self._output_encoding).replace("_", "-"), # type: ignore[arg-type]
|
| 226 |
+
),
|
| 227 |
+
decoded_string[:8192],
|
| 228 |
+
count=1,
|
| 229 |
+
)
|
| 230 |
+
|
| 231 |
+
decoded_string = patched_header + decoded_string[8192:]
|
| 232 |
+
|
| 233 |
+
self._output_payload = decoded_string.encode(encoding, "replace")
|
| 234 |
+
|
| 235 |
+
return self._output_payload # type: ignore
|
| 236 |
+
|
| 237 |
+
@property
|
| 238 |
+
def fingerprint(self) -> str:
|
| 239 |
+
"""
|
| 240 |
+
Retrieve the unique SHA256 computed using the transformed (re-encoded) payload. Not the original one.
|
| 241 |
+
"""
|
| 242 |
+
return sha256(self.output()).hexdigest()
|
| 243 |
+
|
| 244 |
+
|
| 245 |
+
class CharsetMatches:
|
| 246 |
+
"""
|
| 247 |
+
Container with every CharsetMatch items ordered by default from most probable to the less one.
|
| 248 |
+
Act like a list(iterable) but does not implements all related methods.
|
| 249 |
+
"""
|
| 250 |
+
|
| 251 |
+
def __init__(self, results: list[CharsetMatch] | None = None):
|
| 252 |
+
self._results: list[CharsetMatch] = sorted(results) if results else []
|
| 253 |
+
|
| 254 |
+
def __iter__(self) -> Iterator[CharsetMatch]:
|
| 255 |
+
yield from self._results
|
| 256 |
+
|
| 257 |
+
def __getitem__(self, item: int | str) -> CharsetMatch:
|
| 258 |
+
"""
|
| 259 |
+
Retrieve a single item either by its position or encoding name (alias may be used here).
|
| 260 |
+
Raise KeyError upon invalid index or encoding not present in results.
|
| 261 |
+
"""
|
| 262 |
+
if isinstance(item, int):
|
| 263 |
+
return self._results[item]
|
| 264 |
+
if isinstance(item, str):
|
| 265 |
+
item = iana_name(item, False)
|
| 266 |
+
for result in self._results:
|
| 267 |
+
if item in result.could_be_from_charset:
|
| 268 |
+
return result
|
| 269 |
+
raise KeyError
|
| 270 |
+
|
| 271 |
+
def __len__(self) -> int:
|
| 272 |
+
return len(self._results)
|
| 273 |
+
|
| 274 |
+
def __bool__(self) -> bool:
|
| 275 |
+
return len(self._results) > 0
|
| 276 |
+
|
| 277 |
+
def append(self, item: CharsetMatch) -> None:
|
| 278 |
+
"""
|
| 279 |
+
Insert a single match. Will be inserted accordingly to preserve sort.
|
| 280 |
+
Can be inserted as a submatch.
|
| 281 |
+
"""
|
| 282 |
+
if not isinstance(item, CharsetMatch):
|
| 283 |
+
raise ValueError(
|
| 284 |
+
"Cannot append instance '{}' to CharsetMatches".format(
|
| 285 |
+
str(item.__class__)
|
| 286 |
+
)
|
| 287 |
+
)
|
| 288 |
+
# We should disable the submatch factoring when the input file is too heavy (conserve RAM usage)
|
| 289 |
+
if len(item.raw) < TOO_BIG_SEQUENCE:
|
| 290 |
+
for match in self._results:
|
| 291 |
+
if match.fingerprint == item.fingerprint and match.chaos == item.chaos:
|
| 292 |
+
match.add_submatch(item)
|
| 293 |
+
return
|
| 294 |
+
self._results.append(item)
|
| 295 |
+
self._results = sorted(self._results)
|
| 296 |
+
|
| 297 |
+
def best(self) -> CharsetMatch | None:
|
| 298 |
+
"""
|
| 299 |
+
Simply return the first match. Strict equivalent to matches[0].
|
| 300 |
+
"""
|
| 301 |
+
if not self._results:
|
| 302 |
+
return None
|
| 303 |
+
return self._results[0]
|
| 304 |
+
|
| 305 |
+
def first(self) -> CharsetMatch | None:
|
| 306 |
+
"""
|
| 307 |
+
Redundant method, call the method best(). Kept for BC reasons.
|
| 308 |
+
"""
|
| 309 |
+
return self.best()
|
| 310 |
+
|
| 311 |
+
|
| 312 |
+
CoherenceMatch = Tuple[str, float]
|
| 313 |
+
CoherenceMatches = List[CoherenceMatch]
|
| 314 |
+
|
| 315 |
+
|
| 316 |
+
class CliDetectionResult:
|
| 317 |
+
def __init__(
|
| 318 |
+
self,
|
| 319 |
+
path: str,
|
| 320 |
+
encoding: str | None,
|
| 321 |
+
encoding_aliases: list[str],
|
| 322 |
+
alternative_encodings: list[str],
|
| 323 |
+
language: str,
|
| 324 |
+
alphabets: list[str],
|
| 325 |
+
has_sig_or_bom: bool,
|
| 326 |
+
chaos: float,
|
| 327 |
+
coherence: float,
|
| 328 |
+
unicode_path: str | None,
|
| 329 |
+
is_preferred: bool,
|
| 330 |
+
):
|
| 331 |
+
self.path: str = path
|
| 332 |
+
self.unicode_path: str | None = unicode_path
|
| 333 |
+
self.encoding: str | None = encoding
|
| 334 |
+
self.encoding_aliases: list[str] = encoding_aliases
|
| 335 |
+
self.alternative_encodings: list[str] = alternative_encodings
|
| 336 |
+
self.language: str = language
|
| 337 |
+
self.alphabets: list[str] = alphabets
|
| 338 |
+
self.has_sig_or_bom: bool = has_sig_or_bom
|
| 339 |
+
self.chaos: float = chaos
|
| 340 |
+
self.coherence: float = coherence
|
| 341 |
+
self.is_preferred: bool = is_preferred
|
| 342 |
+
|
| 343 |
+
@property
|
| 344 |
+
def __dict__(self) -> dict[str, Any]: # type: ignore
|
| 345 |
+
return {
|
| 346 |
+
"path": self.path,
|
| 347 |
+
"encoding": self.encoding,
|
| 348 |
+
"encoding_aliases": self.encoding_aliases,
|
| 349 |
+
"alternative_encodings": self.alternative_encodings,
|
| 350 |
+
"language": self.language,
|
| 351 |
+
"alphabets": self.alphabets,
|
| 352 |
+
"has_sig_or_bom": self.has_sig_or_bom,
|
| 353 |
+
"chaos": self.chaos,
|
| 354 |
+
"coherence": self.coherence,
|
| 355 |
+
"unicode_path": self.unicode_path,
|
| 356 |
+
"is_preferred": self.is_preferred,
|
| 357 |
+
}
|
| 358 |
+
|
| 359 |
+
def to_json(self) -> str:
|
| 360 |
+
return dumps(self.__dict__, ensure_ascii=True, indent=4)
|
.venv/lib/python3.11/site-packages/charset_normalizer/py.typed
ADDED
|
File without changes
|
.venv/lib/python3.11/site-packages/charset_normalizer/utils.py
ADDED
|
@@ -0,0 +1,408 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
|
| 3 |
+
import importlib
|
| 4 |
+
import logging
|
| 5 |
+
import unicodedata
|
| 6 |
+
from codecs import IncrementalDecoder
|
| 7 |
+
from encodings.aliases import aliases
|
| 8 |
+
from functools import lru_cache
|
| 9 |
+
from re import findall
|
| 10 |
+
from typing import Generator
|
| 11 |
+
|
| 12 |
+
from _multibytecodec import ( # type: ignore[import-not-found,import]
|
| 13 |
+
MultibyteIncrementalDecoder,
|
| 14 |
+
)
|
| 15 |
+
|
| 16 |
+
from .constant import (
|
| 17 |
+
ENCODING_MARKS,
|
| 18 |
+
IANA_SUPPORTED_SIMILAR,
|
| 19 |
+
RE_POSSIBLE_ENCODING_INDICATION,
|
| 20 |
+
UNICODE_RANGES_COMBINED,
|
| 21 |
+
UNICODE_SECONDARY_RANGE_KEYWORD,
|
| 22 |
+
UTF8_MAXIMAL_ALLOCATION,
|
| 23 |
+
)
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
|
| 27 |
+
def is_accentuated(character: str) -> bool:
|
| 28 |
+
try:
|
| 29 |
+
description: str = unicodedata.name(character)
|
| 30 |
+
except ValueError: # Defensive: unicode database outdated?
|
| 31 |
+
return False
|
| 32 |
+
return (
|
| 33 |
+
"WITH GRAVE" in description
|
| 34 |
+
or "WITH ACUTE" in description
|
| 35 |
+
or "WITH CEDILLA" in description
|
| 36 |
+
or "WITH DIAERESIS" in description
|
| 37 |
+
or "WITH CIRCUMFLEX" in description
|
| 38 |
+
or "WITH TILDE" in description
|
| 39 |
+
or "WITH MACRON" in description
|
| 40 |
+
or "WITH RING ABOVE" in description
|
| 41 |
+
)
|
| 42 |
+
|
| 43 |
+
|
| 44 |
+
@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
|
| 45 |
+
def remove_accent(character: str) -> str:
|
| 46 |
+
decomposed: str = unicodedata.decomposition(character)
|
| 47 |
+
if not decomposed:
|
| 48 |
+
return character
|
| 49 |
+
|
| 50 |
+
codes: list[str] = decomposed.split(" ")
|
| 51 |
+
|
| 52 |
+
return chr(int(codes[0], 16))
|
| 53 |
+
|
| 54 |
+
|
| 55 |
+
@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
|
| 56 |
+
def unicode_range(character: str) -> str | None:
|
| 57 |
+
"""
|
| 58 |
+
Retrieve the Unicode range official name from a single character.
|
| 59 |
+
"""
|
| 60 |
+
character_ord: int = ord(character)
|
| 61 |
+
|
| 62 |
+
for range_name, ord_range in UNICODE_RANGES_COMBINED.items():
|
| 63 |
+
if character_ord in ord_range:
|
| 64 |
+
return range_name
|
| 65 |
+
|
| 66 |
+
return None
|
| 67 |
+
|
| 68 |
+
|
| 69 |
+
@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
|
| 70 |
+
def is_latin(character: str) -> bool:
|
| 71 |
+
try:
|
| 72 |
+
description: str = unicodedata.name(character)
|
| 73 |
+
except ValueError: # Defensive: unicode database outdated?
|
| 74 |
+
return False
|
| 75 |
+
return "LATIN" in description
|
| 76 |
+
|
| 77 |
+
|
| 78 |
+
@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
|
| 79 |
+
def is_punctuation(character: str) -> bool:
|
| 80 |
+
character_category: str = unicodedata.category(character)
|
| 81 |
+
|
| 82 |
+
if "P" in character_category:
|
| 83 |
+
return True
|
| 84 |
+
|
| 85 |
+
character_range: str | None = unicode_range(character)
|
| 86 |
+
|
| 87 |
+
if character_range is None:
|
| 88 |
+
return False
|
| 89 |
+
|
| 90 |
+
return "Punctuation" in character_range
|
| 91 |
+
|
| 92 |
+
|
| 93 |
+
@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
|
| 94 |
+
def is_symbol(character: str) -> bool:
|
| 95 |
+
character_category: str = unicodedata.category(character)
|
| 96 |
+
|
| 97 |
+
if "S" in character_category or "N" in character_category:
|
| 98 |
+
return True
|
| 99 |
+
|
| 100 |
+
character_range: str | None = unicode_range(character)
|
| 101 |
+
|
| 102 |
+
if character_range is None:
|
| 103 |
+
return False
|
| 104 |
+
|
| 105 |
+
return "Forms" in character_range and character_category != "Lo"
|
| 106 |
+
|
| 107 |
+
|
| 108 |
+
@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
|
| 109 |
+
def is_emoticon(character: str) -> bool:
|
| 110 |
+
character_range: str | None = unicode_range(character)
|
| 111 |
+
|
| 112 |
+
if character_range is None:
|
| 113 |
+
return False
|
| 114 |
+
|
| 115 |
+
return "Emoticons" in character_range or "Pictographs" in character_range
|
| 116 |
+
|
| 117 |
+
|
| 118 |
+
@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
|
| 119 |
+
def is_separator(character: str) -> bool:
|
| 120 |
+
if character.isspace() or character in {"|", "+", "<", ">"}:
|
| 121 |
+
return True
|
| 122 |
+
|
| 123 |
+
character_category: str = unicodedata.category(character)
|
| 124 |
+
|
| 125 |
+
return "Z" in character_category or character_category in {"Po", "Pd", "Pc"}
|
| 126 |
+
|
| 127 |
+
|
| 128 |
+
@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
|
| 129 |
+
def is_case_variable(character: str) -> bool:
|
| 130 |
+
return character.islower() != character.isupper()
|
| 131 |
+
|
| 132 |
+
|
| 133 |
+
@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
|
| 134 |
+
def is_cjk(character: str) -> bool:
|
| 135 |
+
try:
|
| 136 |
+
character_name = unicodedata.name(character)
|
| 137 |
+
except ValueError: # Defensive: unicode database outdated?
|
| 138 |
+
return False
|
| 139 |
+
|
| 140 |
+
return "CJK" in character_name
|
| 141 |
+
|
| 142 |
+
|
| 143 |
+
@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
|
| 144 |
+
def is_hiragana(character: str) -> bool:
|
| 145 |
+
try:
|
| 146 |
+
character_name = unicodedata.name(character)
|
| 147 |
+
except ValueError: # Defensive: unicode database outdated?
|
| 148 |
+
return False
|
| 149 |
+
|
| 150 |
+
return "HIRAGANA" in character_name
|
| 151 |
+
|
| 152 |
+
|
| 153 |
+
@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
|
| 154 |
+
def is_katakana(character: str) -> bool:
|
| 155 |
+
try:
|
| 156 |
+
character_name = unicodedata.name(character)
|
| 157 |
+
except ValueError: # Defensive: unicode database outdated?
|
| 158 |
+
return False
|
| 159 |
+
|
| 160 |
+
return "KATAKANA" in character_name
|
| 161 |
+
|
| 162 |
+
|
| 163 |
+
@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
|
| 164 |
+
def is_hangul(character: str) -> bool:
|
| 165 |
+
try:
|
| 166 |
+
character_name = unicodedata.name(character)
|
| 167 |
+
except ValueError: # Defensive: unicode database outdated?
|
| 168 |
+
return False
|
| 169 |
+
|
| 170 |
+
return "HANGUL" in character_name
|
| 171 |
+
|
| 172 |
+
|
| 173 |
+
@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
|
| 174 |
+
def is_thai(character: str) -> bool:
|
| 175 |
+
try:
|
| 176 |
+
character_name = unicodedata.name(character)
|
| 177 |
+
except ValueError: # Defensive: unicode database outdated?
|
| 178 |
+
return False
|
| 179 |
+
|
| 180 |
+
return "THAI" in character_name
|
| 181 |
+
|
| 182 |
+
|
| 183 |
+
@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
|
| 184 |
+
def is_arabic(character: str) -> bool:
|
| 185 |
+
try:
|
| 186 |
+
character_name = unicodedata.name(character)
|
| 187 |
+
except ValueError: # Defensive: unicode database outdated?
|
| 188 |
+
return False
|
| 189 |
+
|
| 190 |
+
return "ARABIC" in character_name
|
| 191 |
+
|
| 192 |
+
|
| 193 |
+
@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
|
| 194 |
+
def is_arabic_isolated_form(character: str) -> bool:
|
| 195 |
+
try:
|
| 196 |
+
character_name = unicodedata.name(character)
|
| 197 |
+
except ValueError: # Defensive: unicode database outdated?
|
| 198 |
+
return False
|
| 199 |
+
|
| 200 |
+
return "ARABIC" in character_name and "ISOLATED FORM" in character_name
|
| 201 |
+
|
| 202 |
+
|
| 203 |
+
@lru_cache(maxsize=len(UNICODE_RANGES_COMBINED))
|
| 204 |
+
def is_unicode_range_secondary(range_name: str) -> bool:
|
| 205 |
+
return any(keyword in range_name for keyword in UNICODE_SECONDARY_RANGE_KEYWORD)
|
| 206 |
+
|
| 207 |
+
|
| 208 |
+
@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION)
|
| 209 |
+
def is_unprintable(character: str) -> bool:
|
| 210 |
+
return (
|
| 211 |
+
character.isspace() is False # includes \n \t \r \v
|
| 212 |
+
and character.isprintable() is False
|
| 213 |
+
and character != "\x1a" # Why? Its the ASCII substitute character.
|
| 214 |
+
and character != "\ufeff" # bug discovered in Python,
|
| 215 |
+
# Zero Width No-Break Space located in Arabic Presentation Forms-B, Unicode 1.1 not acknowledged as space.
|
| 216 |
+
)
|
| 217 |
+
|
| 218 |
+
|
| 219 |
+
def any_specified_encoding(sequence: bytes, search_zone: int = 8192) -> str | None:
|
| 220 |
+
"""
|
| 221 |
+
Extract using ASCII-only decoder any specified encoding in the first n-bytes.
|
| 222 |
+
"""
|
| 223 |
+
if not isinstance(sequence, bytes):
|
| 224 |
+
raise TypeError
|
| 225 |
+
|
| 226 |
+
seq_len: int = len(sequence)
|
| 227 |
+
|
| 228 |
+
results: list[str] = findall(
|
| 229 |
+
RE_POSSIBLE_ENCODING_INDICATION,
|
| 230 |
+
sequence[: min(seq_len, search_zone)].decode("ascii", errors="ignore"),
|
| 231 |
+
)
|
| 232 |
+
|
| 233 |
+
if len(results) == 0:
|
| 234 |
+
return None
|
| 235 |
+
|
| 236 |
+
for specified_encoding in results:
|
| 237 |
+
specified_encoding = specified_encoding.lower().replace("-", "_")
|
| 238 |
+
|
| 239 |
+
encoding_alias: str
|
| 240 |
+
encoding_iana: str
|
| 241 |
+
|
| 242 |
+
for encoding_alias, encoding_iana in aliases.items():
|
| 243 |
+
if encoding_alias == specified_encoding:
|
| 244 |
+
return encoding_iana
|
| 245 |
+
if encoding_iana == specified_encoding:
|
| 246 |
+
return encoding_iana
|
| 247 |
+
|
| 248 |
+
return None
|
| 249 |
+
|
| 250 |
+
|
| 251 |
+
@lru_cache(maxsize=128)
|
| 252 |
+
def is_multi_byte_encoding(name: str) -> bool:
|
| 253 |
+
"""
|
| 254 |
+
Verify is a specific encoding is a multi byte one based on it IANA name
|
| 255 |
+
"""
|
| 256 |
+
return name in {
|
| 257 |
+
"utf_8",
|
| 258 |
+
"utf_8_sig",
|
| 259 |
+
"utf_16",
|
| 260 |
+
"utf_16_be",
|
| 261 |
+
"utf_16_le",
|
| 262 |
+
"utf_32",
|
| 263 |
+
"utf_32_le",
|
| 264 |
+
"utf_32_be",
|
| 265 |
+
"utf_7",
|
| 266 |
+
} or issubclass(
|
| 267 |
+
importlib.import_module(f"encodings.{name}").IncrementalDecoder,
|
| 268 |
+
MultibyteIncrementalDecoder,
|
| 269 |
+
)
|
| 270 |
+
|
| 271 |
+
|
| 272 |
+
def identify_sig_or_bom(sequence: bytes) -> tuple[str | None, bytes]:
|
| 273 |
+
"""
|
| 274 |
+
Identify and extract SIG/BOM in given sequence.
|
| 275 |
+
"""
|
| 276 |
+
|
| 277 |
+
for iana_encoding in ENCODING_MARKS:
|
| 278 |
+
marks: bytes | list[bytes] = ENCODING_MARKS[iana_encoding]
|
| 279 |
+
|
| 280 |
+
if isinstance(marks, bytes):
|
| 281 |
+
marks = [marks]
|
| 282 |
+
|
| 283 |
+
for mark in marks:
|
| 284 |
+
if sequence.startswith(mark):
|
| 285 |
+
return iana_encoding, mark
|
| 286 |
+
|
| 287 |
+
return None, b""
|
| 288 |
+
|
| 289 |
+
|
| 290 |
+
def should_strip_sig_or_bom(iana_encoding: str) -> bool:
|
| 291 |
+
return iana_encoding not in {"utf_16", "utf_32"}
|
| 292 |
+
|
| 293 |
+
|
| 294 |
+
def iana_name(cp_name: str, strict: bool = True) -> str:
|
| 295 |
+
"""Returns the Python normalized encoding name (Not the IANA official name)."""
|
| 296 |
+
cp_name = cp_name.lower().replace("-", "_")
|
| 297 |
+
|
| 298 |
+
encoding_alias: str
|
| 299 |
+
encoding_iana: str
|
| 300 |
+
|
| 301 |
+
for encoding_alias, encoding_iana in aliases.items():
|
| 302 |
+
if cp_name in [encoding_alias, encoding_iana]:
|
| 303 |
+
return encoding_iana
|
| 304 |
+
|
| 305 |
+
if strict:
|
| 306 |
+
raise ValueError(f"Unable to retrieve IANA for '{cp_name}'")
|
| 307 |
+
|
| 308 |
+
return cp_name
|
| 309 |
+
|
| 310 |
+
|
| 311 |
+
def cp_similarity(iana_name_a: str, iana_name_b: str) -> float:
|
| 312 |
+
if is_multi_byte_encoding(iana_name_a) or is_multi_byte_encoding(iana_name_b):
|
| 313 |
+
return 0.0
|
| 314 |
+
|
| 315 |
+
decoder_a = importlib.import_module(f"encodings.{iana_name_a}").IncrementalDecoder
|
| 316 |
+
decoder_b = importlib.import_module(f"encodings.{iana_name_b}").IncrementalDecoder
|
| 317 |
+
|
| 318 |
+
id_a: IncrementalDecoder = decoder_a(errors="ignore")
|
| 319 |
+
id_b: IncrementalDecoder = decoder_b(errors="ignore")
|
| 320 |
+
|
| 321 |
+
character_match_count: int = 0
|
| 322 |
+
|
| 323 |
+
for i in range(255):
|
| 324 |
+
to_be_decoded: bytes = bytes([i])
|
| 325 |
+
if id_a.decode(to_be_decoded) == id_b.decode(to_be_decoded):
|
| 326 |
+
character_match_count += 1
|
| 327 |
+
|
| 328 |
+
return character_match_count / 254
|
| 329 |
+
|
| 330 |
+
|
| 331 |
+
def is_cp_similar(iana_name_a: str, iana_name_b: str) -> bool:
|
| 332 |
+
"""
|
| 333 |
+
Determine if two code page are at least 80% similar. IANA_SUPPORTED_SIMILAR dict was generated using
|
| 334 |
+
the function cp_similarity.
|
| 335 |
+
"""
|
| 336 |
+
return (
|
| 337 |
+
iana_name_a in IANA_SUPPORTED_SIMILAR
|
| 338 |
+
and iana_name_b in IANA_SUPPORTED_SIMILAR[iana_name_a]
|
| 339 |
+
)
|
| 340 |
+
|
| 341 |
+
|
| 342 |
+
def set_logging_handler(
|
| 343 |
+
name: str = "charset_normalizer",
|
| 344 |
+
level: int = logging.INFO,
|
| 345 |
+
format_string: str = "%(asctime)s | %(levelname)s | %(message)s",
|
| 346 |
+
) -> None:
|
| 347 |
+
logger = logging.getLogger(name)
|
| 348 |
+
logger.setLevel(level)
|
| 349 |
+
|
| 350 |
+
handler = logging.StreamHandler()
|
| 351 |
+
handler.setFormatter(logging.Formatter(format_string))
|
| 352 |
+
logger.addHandler(handler)
|
| 353 |
+
|
| 354 |
+
|
| 355 |
+
def cut_sequence_chunks(
|
| 356 |
+
sequences: bytes,
|
| 357 |
+
encoding_iana: str,
|
| 358 |
+
offsets: range,
|
| 359 |
+
chunk_size: int,
|
| 360 |
+
bom_or_sig_available: bool,
|
| 361 |
+
strip_sig_or_bom: bool,
|
| 362 |
+
sig_payload: bytes,
|
| 363 |
+
is_multi_byte_decoder: bool,
|
| 364 |
+
decoded_payload: str | None = None,
|
| 365 |
+
) -> Generator[str, None, None]:
|
| 366 |
+
if decoded_payload and is_multi_byte_decoder is False:
|
| 367 |
+
for i in offsets:
|
| 368 |
+
chunk = decoded_payload[i : i + chunk_size]
|
| 369 |
+
if not chunk:
|
| 370 |
+
break
|
| 371 |
+
yield chunk
|
| 372 |
+
else:
|
| 373 |
+
for i in offsets:
|
| 374 |
+
chunk_end = i + chunk_size
|
| 375 |
+
if chunk_end > len(sequences) + 8:
|
| 376 |
+
continue
|
| 377 |
+
|
| 378 |
+
cut_sequence = sequences[i : i + chunk_size]
|
| 379 |
+
|
| 380 |
+
if bom_or_sig_available and strip_sig_or_bom is False:
|
| 381 |
+
cut_sequence = sig_payload + cut_sequence
|
| 382 |
+
|
| 383 |
+
chunk = cut_sequence.decode(
|
| 384 |
+
encoding_iana,
|
| 385 |
+
errors="ignore" if is_multi_byte_decoder else "strict",
|
| 386 |
+
)
|
| 387 |
+
|
| 388 |
+
# multi-byte bad cutting detector and adjustment
|
| 389 |
+
# not the cleanest way to perform that fix but clever enough for now.
|
| 390 |
+
if is_multi_byte_decoder and i > 0:
|
| 391 |
+
chunk_partial_size_chk: int = min(chunk_size, 16)
|
| 392 |
+
|
| 393 |
+
if (
|
| 394 |
+
decoded_payload
|
| 395 |
+
and chunk[:chunk_partial_size_chk] not in decoded_payload
|
| 396 |
+
):
|
| 397 |
+
for j in range(i, i - 4, -1):
|
| 398 |
+
cut_sequence = sequences[j:chunk_end]
|
| 399 |
+
|
| 400 |
+
if bom_or_sig_available and strip_sig_or_bom is False:
|
| 401 |
+
cut_sequence = sig_payload + cut_sequence
|
| 402 |
+
|
| 403 |
+
chunk = cut_sequence.decode(encoding_iana, errors="ignore")
|
| 404 |
+
|
| 405 |
+
if chunk[:chunk_partial_size_chk] in decoded_payload:
|
| 406 |
+
break
|
| 407 |
+
|
| 408 |
+
yield chunk
|
.venv/lib/python3.11/site-packages/charset_normalizer/version.py
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Expose version
|
| 3 |
+
"""
|
| 4 |
+
|
| 5 |
+
from __future__ import annotations
|
| 6 |
+
|
| 7 |
+
__version__ = "3.4.1"
|
| 8 |
+
VERSION = __version__.split(".")
|
.venv/lib/python3.11/site-packages/cv2/cv2.abi3.so
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:68fee49d266a95e730c1cb17d913a39a93ab5c50bee1581600f453026f9c7b8d
|
| 3 |
+
size 66106617
|
.venv/lib/python3.11/site-packages/huggingface_hub/inference/_generated/types/audio_classification.py
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Inference code generated from the JSON schema spec in @huggingface/tasks.
|
| 2 |
+
#
|
| 3 |
+
# See:
|
| 4 |
+
# - script: https://github.com/huggingface/huggingface.js/blob/main/packages/tasks/scripts/inference-codegen.ts
|
| 5 |
+
# - specs: https://github.com/huggingface/huggingface.js/tree/main/packages/tasks/src/tasks.
|
| 6 |
+
from dataclasses import dataclass
|
| 7 |
+
from typing import Literal, Optional
|
| 8 |
+
|
| 9 |
+
from .base import BaseInferenceType
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
AudioClassificationOutputTransform = Literal["sigmoid", "softmax", "none"]
|
| 13 |
+
|
| 14 |
+
|
| 15 |
+
@dataclass
|
| 16 |
+
class AudioClassificationParameters(BaseInferenceType):
|
| 17 |
+
"""Additional inference parameters for Audio Classification"""
|
| 18 |
+
|
| 19 |
+
function_to_apply: Optional["AudioClassificationOutputTransform"] = None
|
| 20 |
+
"""The function to apply to the model outputs in order to retrieve the scores."""
|
| 21 |
+
top_k: Optional[int] = None
|
| 22 |
+
"""When specified, limits the output to the top K most probable classes."""
|
| 23 |
+
|
| 24 |
+
|
| 25 |
+
@dataclass
|
| 26 |
+
class AudioClassificationInput(BaseInferenceType):
|
| 27 |
+
"""Inputs for Audio Classification inference"""
|
| 28 |
+
|
| 29 |
+
inputs: str
|
| 30 |
+
"""The input audio data as a base64-encoded string. If no `parameters` are provided, you can
|
| 31 |
+
also provide the audio data as a raw bytes payload.
|
| 32 |
+
"""
|
| 33 |
+
parameters: Optional[AudioClassificationParameters] = None
|
| 34 |
+
"""Additional inference parameters for Audio Classification"""
|
| 35 |
+
|
| 36 |
+
|
| 37 |
+
@dataclass
|
| 38 |
+
class AudioClassificationOutputElement(BaseInferenceType):
|
| 39 |
+
"""Outputs for Audio Classification inference"""
|
| 40 |
+
|
| 41 |
+
label: str
|
| 42 |
+
"""The predicted class label."""
|
| 43 |
+
score: float
|
| 44 |
+
"""The corresponding probability."""
|
.venv/lib/python3.11/site-packages/huggingface_hub/inference/_generated/types/document_question_answering.py
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Inference code generated from the JSON schema spec in @huggingface/tasks.
|
| 2 |
+
#
|
| 3 |
+
# See:
|
| 4 |
+
# - script: https://github.com/huggingface/huggingface.js/blob/main/packages/tasks/scripts/inference-codegen.ts
|
| 5 |
+
# - specs: https://github.com/huggingface/huggingface.js/tree/main/packages/tasks/src/tasks.
|
| 6 |
+
from dataclasses import dataclass
|
| 7 |
+
from typing import Any, List, Optional, Union
|
| 8 |
+
|
| 9 |
+
from .base import BaseInferenceType
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
@dataclass
|
| 13 |
+
class DocumentQuestionAnsweringInputData(BaseInferenceType):
|
| 14 |
+
"""One (document, question) pair to answer"""
|
| 15 |
+
|
| 16 |
+
image: Any
|
| 17 |
+
"""The image on which the question is asked"""
|
| 18 |
+
question: str
|
| 19 |
+
"""A question to ask of the document"""
|
| 20 |
+
|
| 21 |
+
|
| 22 |
+
@dataclass
|
| 23 |
+
class DocumentQuestionAnsweringParameters(BaseInferenceType):
|
| 24 |
+
"""Additional inference parameters for Document Question Answering"""
|
| 25 |
+
|
| 26 |
+
doc_stride: Optional[int] = None
|
| 27 |
+
"""If the words in the document are too long to fit with the question for the model, it will
|
| 28 |
+
be split in several chunks with some overlap. This argument controls the size of that
|
| 29 |
+
overlap.
|
| 30 |
+
"""
|
| 31 |
+
handle_impossible_answer: Optional[bool] = None
|
| 32 |
+
"""Whether to accept impossible as an answer"""
|
| 33 |
+
lang: Optional[str] = None
|
| 34 |
+
"""Language to use while running OCR. Defaults to english."""
|
| 35 |
+
max_answer_len: Optional[int] = None
|
| 36 |
+
"""The maximum length of predicted answers (e.g., only answers with a shorter length are
|
| 37 |
+
considered).
|
| 38 |
+
"""
|
| 39 |
+
max_question_len: Optional[int] = None
|
| 40 |
+
"""The maximum length of the question after tokenization. It will be truncated if needed."""
|
| 41 |
+
max_seq_len: Optional[int] = None
|
| 42 |
+
"""The maximum length of the total sentence (context + question) in tokens of each chunk
|
| 43 |
+
passed to the model. The context will be split in several chunks (using doc_stride as
|
| 44 |
+
overlap) if needed.
|
| 45 |
+
"""
|
| 46 |
+
top_k: Optional[int] = None
|
| 47 |
+
"""The number of answers to return (will be chosen by order of likelihood). Can return less
|
| 48 |
+
than top_k answers if there are not enough options available within the context.
|
| 49 |
+
"""
|
| 50 |
+
word_boxes: Optional[List[Union[List[float], str]]] = None
|
| 51 |
+
"""A list of words and bounding boxes (normalized 0->1000). If provided, the inference will
|
| 52 |
+
skip the OCR step and use the provided bounding boxes instead.
|
| 53 |
+
"""
|
| 54 |
+
|
| 55 |
+
|
| 56 |
+
@dataclass
|
| 57 |
+
class DocumentQuestionAnsweringInput(BaseInferenceType):
|
| 58 |
+
"""Inputs for Document Question Answering inference"""
|
| 59 |
+
|
| 60 |
+
inputs: DocumentQuestionAnsweringInputData
|
| 61 |
+
"""One (document, question) pair to answer"""
|
| 62 |
+
parameters: Optional[DocumentQuestionAnsweringParameters] = None
|
| 63 |
+
"""Additional inference parameters for Document Question Answering"""
|
| 64 |
+
|
| 65 |
+
|
| 66 |
+
@dataclass
|
| 67 |
+
class DocumentQuestionAnsweringOutputElement(BaseInferenceType):
|
| 68 |
+
"""Outputs of inference for the Document Question Answering task"""
|
| 69 |
+
|
| 70 |
+
answer: str
|
| 71 |
+
"""The answer to the question."""
|
| 72 |
+
end: int
|
| 73 |
+
"""The end word index of the answer (in the OCR’d version of the input or provided word
|
| 74 |
+
boxes).
|
| 75 |
+
"""
|
| 76 |
+
score: float
|
| 77 |
+
"""The probability associated to the answer."""
|
| 78 |
+
start: int
|
| 79 |
+
"""The start word index of the answer (in the OCR’d version of the input or provided word
|
| 80 |
+
boxes).
|
| 81 |
+
"""
|
.venv/lib/python3.11/site-packages/huggingface_hub/inference/_generated/types/feature_extraction.py
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Inference code generated from the JSON schema spec in @huggingface/tasks.
|
| 2 |
+
#
|
| 3 |
+
# See:
|
| 4 |
+
# - script: https://github.com/huggingface/huggingface.js/blob/main/packages/tasks/scripts/inference-codegen.ts
|
| 5 |
+
# - specs: https://github.com/huggingface/huggingface.js/tree/main/packages/tasks/src/tasks.
|
| 6 |
+
from dataclasses import dataclass
|
| 7 |
+
from typing import Literal, Optional
|
| 8 |
+
|
| 9 |
+
from .base import BaseInferenceType
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
FeatureExtractionInputTruncationDirection = Literal["Left", "Right"]
|
| 13 |
+
|
| 14 |
+
|
| 15 |
+
@dataclass
|
| 16 |
+
class FeatureExtractionInput(BaseInferenceType):
|
| 17 |
+
"""Feature Extraction Input.
|
| 18 |
+
Auto-generated from TEI specs.
|
| 19 |
+
For more details, check out
|
| 20 |
+
https://github.com/huggingface/huggingface.js/blob/main/packages/tasks/scripts/inference-tei-import.ts.
|
| 21 |
+
"""
|
| 22 |
+
|
| 23 |
+
inputs: str
|
| 24 |
+
"""The text to embed."""
|
| 25 |
+
normalize: Optional[bool] = None
|
| 26 |
+
prompt_name: Optional[str] = None
|
| 27 |
+
"""The name of the prompt that should be used by for encoding. If not set, no prompt
|
| 28 |
+
will be applied.
|
| 29 |
+
Must be a key in the `sentence-transformers` configuration `prompts` dictionary.
|
| 30 |
+
For example if ``prompt_name`` is "query" and the ``prompts`` is {"query": "query: ",
|
| 31 |
+
...},
|
| 32 |
+
then the sentence "What is the capital of France?" will be encoded as
|
| 33 |
+
"query: What is the capital of France?" because the prompt text will be prepended before
|
| 34 |
+
any text to encode.
|
| 35 |
+
"""
|
| 36 |
+
truncate: Optional[bool] = None
|
| 37 |
+
truncation_direction: Optional["FeatureExtractionInputTruncationDirection"] = None
|
.venv/lib/python3.11/site-packages/huggingface_hub/inference/_generated/types/image_classification.py
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Inference code generated from the JSON schema spec in @huggingface/tasks.
|
| 2 |
+
#
|
| 3 |
+
# See:
|
| 4 |
+
# - script: https://github.com/huggingface/huggingface.js/blob/main/packages/tasks/scripts/inference-codegen.ts
|
| 5 |
+
# - specs: https://github.com/huggingface/huggingface.js/tree/main/packages/tasks/src/tasks.
|
| 6 |
+
from dataclasses import dataclass
|
| 7 |
+
from typing import Literal, Optional
|
| 8 |
+
|
| 9 |
+
from .base import BaseInferenceType
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
ImageClassificationOutputTransform = Literal["sigmoid", "softmax", "none"]
|
| 13 |
+
|
| 14 |
+
|
| 15 |
+
@dataclass
|
| 16 |
+
class ImageClassificationParameters(BaseInferenceType):
|
| 17 |
+
"""Additional inference parameters for Image Classification"""
|
| 18 |
+
|
| 19 |
+
function_to_apply: Optional["ImageClassificationOutputTransform"] = None
|
| 20 |
+
"""The function to apply to the model outputs in order to retrieve the scores."""
|
| 21 |
+
top_k: Optional[int] = None
|
| 22 |
+
"""When specified, limits the output to the top K most probable classes."""
|
| 23 |
+
|
| 24 |
+
|
| 25 |
+
@dataclass
|
| 26 |
+
class ImageClassificationInput(BaseInferenceType):
|
| 27 |
+
"""Inputs for Image Classification inference"""
|
| 28 |
+
|
| 29 |
+
inputs: str
|
| 30 |
+
"""The input image data as a base64-encoded string. If no `parameters` are provided, you can
|
| 31 |
+
also provide the image data as a raw bytes payload.
|
| 32 |
+
"""
|
| 33 |
+
parameters: Optional[ImageClassificationParameters] = None
|
| 34 |
+
"""Additional inference parameters for Image Classification"""
|
| 35 |
+
|
| 36 |
+
|
| 37 |
+
@dataclass
|
| 38 |
+
class ImageClassificationOutputElement(BaseInferenceType):
|
| 39 |
+
"""Outputs of inference for the Image Classification task"""
|
| 40 |
+
|
| 41 |
+
label: str
|
| 42 |
+
"""The predicted class label."""
|
| 43 |
+
score: float
|
| 44 |
+
"""The corresponding probability."""
|
.venv/lib/python3.11/site-packages/huggingface_hub/inference/_generated/types/sentence_similarity.py
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Inference code generated from the JSON schema spec in @huggingface/tasks.
|
| 2 |
+
#
|
| 3 |
+
# See:
|
| 4 |
+
# - script: https://github.com/huggingface/huggingface.js/blob/main/packages/tasks/scripts/inference-codegen.ts
|
| 5 |
+
# - specs: https://github.com/huggingface/huggingface.js/tree/main/packages/tasks/src/tasks.
|
| 6 |
+
from dataclasses import dataclass
|
| 7 |
+
from typing import Any, Dict, List, Optional
|
| 8 |
+
|
| 9 |
+
from .base import BaseInferenceType
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
@dataclass
|
| 13 |
+
class SentenceSimilarityInputData(BaseInferenceType):
|
| 14 |
+
sentences: List[str]
|
| 15 |
+
"""A list of strings which will be compared against the source_sentence."""
|
| 16 |
+
source_sentence: str
|
| 17 |
+
"""The string that you wish to compare the other strings with. This can be a phrase,
|
| 18 |
+
sentence, or longer passage, depending on the model being used.
|
| 19 |
+
"""
|
| 20 |
+
|
| 21 |
+
|
| 22 |
+
@dataclass
|
| 23 |
+
class SentenceSimilarityInput(BaseInferenceType):
|
| 24 |
+
"""Inputs for Sentence similarity inference"""
|
| 25 |
+
|
| 26 |
+
inputs: SentenceSimilarityInputData
|
| 27 |
+
parameters: Optional[Dict[str, Any]] = None
|
| 28 |
+
"""Additional inference parameters for Sentence Similarity"""
|
.venv/lib/python3.11/site-packages/huggingface_hub/inference/_generated/types/text_to_video.py
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Inference code generated from the JSON schema spec in @huggingface/tasks.
|
| 2 |
+
#
|
| 3 |
+
# See:
|
| 4 |
+
# - script: https://github.com/huggingface/huggingface.js/blob/main/packages/tasks/scripts/inference-codegen.ts
|
| 5 |
+
# - specs: https://github.com/huggingface/huggingface.js/tree/main/packages/tasks/src/tasks.
|
| 6 |
+
from dataclasses import dataclass
|
| 7 |
+
from typing import Any, List, Optional
|
| 8 |
+
|
| 9 |
+
from .base import BaseInferenceType
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
@dataclass
|
| 13 |
+
class TextToVideoParameters(BaseInferenceType):
|
| 14 |
+
"""Additional inference parameters for Text To Video"""
|
| 15 |
+
|
| 16 |
+
guidance_scale: Optional[float] = None
|
| 17 |
+
"""A higher guidance scale value encourages the model to generate videos closely linked to
|
| 18 |
+
the text prompt, but values too high may cause saturation and other artifacts.
|
| 19 |
+
"""
|
| 20 |
+
negative_prompt: Optional[List[str]] = None
|
| 21 |
+
"""One or several prompt to guide what NOT to include in video generation."""
|
| 22 |
+
num_frames: Optional[float] = None
|
| 23 |
+
"""The num_frames parameter determines how many video frames are generated."""
|
| 24 |
+
num_inference_steps: Optional[int] = None
|
| 25 |
+
"""The number of denoising steps. More denoising steps usually lead to a higher quality
|
| 26 |
+
video at the expense of slower inference.
|
| 27 |
+
"""
|
| 28 |
+
seed: Optional[int] = None
|
| 29 |
+
"""Seed for the random number generator."""
|
| 30 |
+
|
| 31 |
+
|
| 32 |
+
@dataclass
|
| 33 |
+
class TextToVideoInput(BaseInferenceType):
|
| 34 |
+
"""Inputs for Text To Video inference"""
|
| 35 |
+
|
| 36 |
+
inputs: str
|
| 37 |
+
"""The input text data (sometimes called "prompt")"""
|
| 38 |
+
parameters: Optional[TextToVideoParameters] = None
|
| 39 |
+
"""Additional inference parameters for Text To Video"""
|
| 40 |
+
|
| 41 |
+
|
| 42 |
+
@dataclass
|
| 43 |
+
class TextToVideoOutput(BaseInferenceType):
|
| 44 |
+
"""Outputs of inference for the Text To Video task"""
|
| 45 |
+
|
| 46 |
+
video: Any
|
| 47 |
+
"""The generated video returned as raw bytes in the payload."""
|
.venv/lib/python3.11/site-packages/huggingface_hub/inference/_generated/types/translation.py
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Inference code generated from the JSON schema spec in @huggingface/tasks.
|
| 2 |
+
#
|
| 3 |
+
# See:
|
| 4 |
+
# - script: https://github.com/huggingface/huggingface.js/blob/main/packages/tasks/scripts/inference-codegen.ts
|
| 5 |
+
# - specs: https://github.com/huggingface/huggingface.js/tree/main/packages/tasks/src/tasks.
|
| 6 |
+
from dataclasses import dataclass
|
| 7 |
+
from typing import Any, Dict, Literal, Optional
|
| 8 |
+
|
| 9 |
+
from .base import BaseInferenceType
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
TranslationTruncationStrategy = Literal["do_not_truncate", "longest_first", "only_first", "only_second"]
|
| 13 |
+
|
| 14 |
+
|
| 15 |
+
@dataclass
|
| 16 |
+
class TranslationParameters(BaseInferenceType):
|
| 17 |
+
"""Additional inference parameters for Translation"""
|
| 18 |
+
|
| 19 |
+
clean_up_tokenization_spaces: Optional[bool] = None
|
| 20 |
+
"""Whether to clean up the potential extra spaces in the text output."""
|
| 21 |
+
generate_parameters: Optional[Dict[str, Any]] = None
|
| 22 |
+
"""Additional parametrization of the text generation algorithm."""
|
| 23 |
+
src_lang: Optional[str] = None
|
| 24 |
+
"""The source language of the text. Required for models that can translate from multiple
|
| 25 |
+
languages.
|
| 26 |
+
"""
|
| 27 |
+
tgt_lang: Optional[str] = None
|
| 28 |
+
"""Target language to translate to. Required for models that can translate to multiple
|
| 29 |
+
languages.
|
| 30 |
+
"""
|
| 31 |
+
truncation: Optional["TranslationTruncationStrategy"] = None
|
| 32 |
+
"""The truncation strategy to use."""
|
| 33 |
+
|
| 34 |
+
|
| 35 |
+
@dataclass
|
| 36 |
+
class TranslationInput(BaseInferenceType):
|
| 37 |
+
"""Inputs for Translation inference"""
|
| 38 |
+
|
| 39 |
+
inputs: str
|
| 40 |
+
"""The text to translate."""
|
| 41 |
+
parameters: Optional[TranslationParameters] = None
|
| 42 |
+
"""Additional inference parameters for Translation"""
|
| 43 |
+
|
| 44 |
+
|
| 45 |
+
@dataclass
|
| 46 |
+
class TranslationOutput(BaseInferenceType):
|
| 47 |
+
"""Outputs of inference for the Translation task"""
|
| 48 |
+
|
| 49 |
+
translation_text: str
|
| 50 |
+
"""The translated text."""
|
.venv/lib/python3.11/site-packages/huggingface_hub/inference/_generated/types/video_classification.py
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Inference code generated from the JSON schema spec in @huggingface/tasks.
|
| 2 |
+
#
|
| 3 |
+
# See:
|
| 4 |
+
# - script: https://github.com/huggingface/huggingface.js/blob/main/packages/tasks/scripts/inference-codegen.ts
|
| 5 |
+
# - specs: https://github.com/huggingface/huggingface.js/tree/main/packages/tasks/src/tasks.
|
| 6 |
+
from dataclasses import dataclass
|
| 7 |
+
from typing import Any, Literal, Optional
|
| 8 |
+
|
| 9 |
+
from .base import BaseInferenceType
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
VideoClassificationOutputTransform = Literal["sigmoid", "softmax", "none"]
|
| 13 |
+
|
| 14 |
+
|
| 15 |
+
@dataclass
|
| 16 |
+
class VideoClassificationParameters(BaseInferenceType):
|
| 17 |
+
"""Additional inference parameters for Video Classification"""
|
| 18 |
+
|
| 19 |
+
frame_sampling_rate: Optional[int] = None
|
| 20 |
+
"""The sampling rate used to select frames from the video."""
|
| 21 |
+
function_to_apply: Optional["VideoClassificationOutputTransform"] = None
|
| 22 |
+
"""The function to apply to the model outputs in order to retrieve the scores."""
|
| 23 |
+
num_frames: Optional[int] = None
|
| 24 |
+
"""The number of sampled frames to consider for classification."""
|
| 25 |
+
top_k: Optional[int] = None
|
| 26 |
+
"""When specified, limits the output to the top K most probable classes."""
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
@dataclass
|
| 30 |
+
class VideoClassificationInput(BaseInferenceType):
|
| 31 |
+
"""Inputs for Video Classification inference"""
|
| 32 |
+
|
| 33 |
+
inputs: Any
|
| 34 |
+
"""The input video data"""
|
| 35 |
+
parameters: Optional[VideoClassificationParameters] = None
|
| 36 |
+
"""Additional inference parameters for Video Classification"""
|
| 37 |
+
|
| 38 |
+
|
| 39 |
+
@dataclass
|
| 40 |
+
class VideoClassificationOutputElement(BaseInferenceType):
|
| 41 |
+
"""Outputs of inference for the Video Classification task"""
|
| 42 |
+
|
| 43 |
+
label: str
|
| 44 |
+
"""The predicted class label."""
|
| 45 |
+
score: float
|
| 46 |
+
"""The corresponding probability."""
|
.venv/lib/python3.11/site-packages/huggingface_hub/inference/_generated/types/visual_question_answering.py
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Inference code generated from the JSON schema spec in @huggingface/tasks.
|
| 2 |
+
#
|
| 3 |
+
# See:
|
| 4 |
+
# - script: https://github.com/huggingface/huggingface.js/blob/main/packages/tasks/scripts/inference-codegen.ts
|
| 5 |
+
# - specs: https://github.com/huggingface/huggingface.js/tree/main/packages/tasks/src/tasks.
|
| 6 |
+
from dataclasses import dataclass
|
| 7 |
+
from typing import Any, Optional
|
| 8 |
+
|
| 9 |
+
from .base import BaseInferenceType
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
@dataclass
|
| 13 |
+
class VisualQuestionAnsweringInputData(BaseInferenceType):
|
| 14 |
+
"""One (image, question) pair to answer"""
|
| 15 |
+
|
| 16 |
+
image: Any
|
| 17 |
+
"""The image."""
|
| 18 |
+
question: str
|
| 19 |
+
"""The question to answer based on the image."""
|
| 20 |
+
|
| 21 |
+
|
| 22 |
+
@dataclass
|
| 23 |
+
class VisualQuestionAnsweringParameters(BaseInferenceType):
|
| 24 |
+
"""Additional inference parameters for Visual Question Answering"""
|
| 25 |
+
|
| 26 |
+
top_k: Optional[int] = None
|
| 27 |
+
"""The number of answers to return (will be chosen by order of likelihood). Note that we
|
| 28 |
+
return less than topk answers if there are not enough options available within the
|
| 29 |
+
context.
|
| 30 |
+
"""
|
| 31 |
+
|
| 32 |
+
|
| 33 |
+
@dataclass
|
| 34 |
+
class VisualQuestionAnsweringInput(BaseInferenceType):
|
| 35 |
+
"""Inputs for Visual Question Answering inference"""
|
| 36 |
+
|
| 37 |
+
inputs: VisualQuestionAnsweringInputData
|
| 38 |
+
"""One (image, question) pair to answer"""
|
| 39 |
+
parameters: Optional[VisualQuestionAnsweringParameters] = None
|
| 40 |
+
"""Additional inference parameters for Visual Question Answering"""
|
| 41 |
+
|
| 42 |
+
|
| 43 |
+
@dataclass
|
| 44 |
+
class VisualQuestionAnsweringOutputElement(BaseInferenceType):
|
| 45 |
+
"""Outputs of inference for the Visual Question Answering task"""
|
| 46 |
+
|
| 47 |
+
score: float
|
| 48 |
+
"""The associated score / probability"""
|
| 49 |
+
answer: Optional[str] = None
|
| 50 |
+
"""The answer to the question"""
|
.venv/lib/python3.11/site-packages/huggingface_hub/inference/_generated/types/zero_shot_image_classification.py
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Inference code generated from the JSON schema spec in @huggingface/tasks.
|
| 2 |
+
#
|
| 3 |
+
# See:
|
| 4 |
+
# - script: https://github.com/huggingface/huggingface.js/blob/main/packages/tasks/scripts/inference-codegen.ts
|
| 5 |
+
# - specs: https://github.com/huggingface/huggingface.js/tree/main/packages/tasks/src/tasks.
|
| 6 |
+
from dataclasses import dataclass
|
| 7 |
+
from typing import List, Optional
|
| 8 |
+
|
| 9 |
+
from .base import BaseInferenceType
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
@dataclass
|
| 13 |
+
class ZeroShotImageClassificationParameters(BaseInferenceType):
|
| 14 |
+
"""Additional inference parameters for Zero Shot Image Classification"""
|
| 15 |
+
|
| 16 |
+
candidate_labels: List[str]
|
| 17 |
+
"""The candidate labels for this image"""
|
| 18 |
+
hypothesis_template: Optional[str] = None
|
| 19 |
+
"""The sentence used in conjunction with `candidate_labels` to attempt the image
|
| 20 |
+
classification by replacing the placeholder with the candidate labels.
|
| 21 |
+
"""
|
| 22 |
+
|
| 23 |
+
|
| 24 |
+
@dataclass
|
| 25 |
+
class ZeroShotImageClassificationInput(BaseInferenceType):
|
| 26 |
+
"""Inputs for Zero Shot Image Classification inference"""
|
| 27 |
+
|
| 28 |
+
inputs: str
|
| 29 |
+
"""The input image data to classify as a base64-encoded string."""
|
| 30 |
+
parameters: ZeroShotImageClassificationParameters
|
| 31 |
+
"""Additional inference parameters for Zero Shot Image Classification"""
|
| 32 |
+
|
| 33 |
+
|
| 34 |
+
@dataclass
|
| 35 |
+
class ZeroShotImageClassificationOutputElement(BaseInferenceType):
|
| 36 |
+
"""Outputs of inference for the Zero Shot Image Classification task"""
|
| 37 |
+
|
| 38 |
+
label: str
|
| 39 |
+
"""The predicted class label."""
|
| 40 |
+
score: float
|
| 41 |
+
"""The corresponding probability."""
|
.venv/lib/python3.11/site-packages/nvidia/cuda_cupti/__init__.py
ADDED
|
File without changes
|
.venv/lib/python3.11/site-packages/nvidia/cuda_cupti/__pycache__/__init__.cpython-311.pyc
ADDED
|
Binary file (190 Bytes). View file
|
|
|
.venv/lib/python3.11/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 |
+
|
.venv/lib/python3.11/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_*/
|
.venv/lib/python3.11/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__ */
|
.venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/__init__.py
ADDED
|
File without changes
|
.venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/__pycache__/__init__.cpython-311.pyc
ADDED
|
Binary file (198 Bytes). View file
|
|
|
.venv/lib/python3.11/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
|
.venv/lib/python3.11/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 |
+
|
.venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/cupti_activity.h
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
.venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/cupti_activity_deprecated.h
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
.venv/lib/python3.11/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 |
+
|
.venv/lib/python3.11/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 |
+
}}}
|
.venv/lib/python3.11/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 |
+
|
.venv/lib/python3.11/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 |
+
|
.venv/lib/python3.11/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 |
+
|
.venv/lib/python3.11/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 |
+
|
.venv/lib/python3.11/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
|
.venv/lib/python3.11/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_*/
|
.venv/lib/python3.11/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
|
.venv/lib/python3.11/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_*/
|
.venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/cupti_result.h
ADDED
|
@@ -0,0 +1,346 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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_RESULT_H_)
|
| 51 |
+
#define _CUPTI_RESULT_H_
|
| 52 |
+
|
| 53 |
+
#ifndef CUPTIAPI
|
| 54 |
+
#ifdef _WIN32
|
| 55 |
+
#define CUPTIAPI __stdcall
|
| 56 |
+
#else
|
| 57 |
+
#define CUPTIAPI
|
| 58 |
+
#endif
|
| 59 |
+
#endif
|
| 60 |
+
|
| 61 |
+
#if defined(__cplusplus)
|
| 62 |
+
extern "C" {
|
| 63 |
+
#endif
|
| 64 |
+
|
| 65 |
+
#if defined(__GNUC__) && defined(CUPTI_LIB)
|
| 66 |
+
#pragma GCC visibility push(default)
|
| 67 |
+
#endif
|
| 68 |
+
|
| 69 |
+
/**
|
| 70 |
+
* \defgroup CUPTI_RESULT_API CUPTI Result Codes
|
| 71 |
+
* Error and result codes returned by CUPTI functions.
|
| 72 |
+
* @{
|
| 73 |
+
*/
|
| 74 |
+
|
| 75 |
+
/**
|
| 76 |
+
* \brief CUPTI result codes.
|
| 77 |
+
*
|
| 78 |
+
* Error and result codes returned by CUPTI functions.
|
| 79 |
+
*/
|
| 80 |
+
typedef enum {
|
| 81 |
+
/**
|
| 82 |
+
* No error.
|
| 83 |
+
*/
|
| 84 |
+
CUPTI_SUCCESS = 0,
|
| 85 |
+
/**
|
| 86 |
+
* One or more of the parameters is invalid.
|
| 87 |
+
*/
|
| 88 |
+
CUPTI_ERROR_INVALID_PARAMETER = 1,
|
| 89 |
+
/**
|
| 90 |
+
* The device does not correspond to a valid CUDA device.
|
| 91 |
+
*/
|
| 92 |
+
CUPTI_ERROR_INVALID_DEVICE = 2,
|
| 93 |
+
/**
|
| 94 |
+
* The context is NULL or not valid.
|
| 95 |
+
*/
|
| 96 |
+
CUPTI_ERROR_INVALID_CONTEXT = 3,
|
| 97 |
+
/**
|
| 98 |
+
* The event domain id is invalid.
|
| 99 |
+
*/
|
| 100 |
+
CUPTI_ERROR_INVALID_EVENT_DOMAIN_ID = 4,
|
| 101 |
+
/**
|
| 102 |
+
* The event id is invalid.
|
| 103 |
+
*/
|
| 104 |
+
CUPTI_ERROR_INVALID_EVENT_ID = 5,
|
| 105 |
+
/**
|
| 106 |
+
* The event name is invalid.
|
| 107 |
+
*/
|
| 108 |
+
CUPTI_ERROR_INVALID_EVENT_NAME = 6,
|
| 109 |
+
/**
|
| 110 |
+
* The current operation cannot be performed due to dependency on
|
| 111 |
+
* other factors.
|
| 112 |
+
*/
|
| 113 |
+
CUPTI_ERROR_INVALID_OPERATION = 7,
|
| 114 |
+
/**
|
| 115 |
+
* Unable to allocate enough memory to perform the requested
|
| 116 |
+
* operation.
|
| 117 |
+
*/
|
| 118 |
+
CUPTI_ERROR_OUT_OF_MEMORY = 8,
|
| 119 |
+
/**
|
| 120 |
+
* An error occurred on the performance monitoring hardware.
|
| 121 |
+
*/
|
| 122 |
+
CUPTI_ERROR_HARDWARE = 9,
|
| 123 |
+
/**
|
| 124 |
+
* The output buffer size is not sufficient to return all
|
| 125 |
+
* requested data.
|
| 126 |
+
*/
|
| 127 |
+
CUPTI_ERROR_PARAMETER_SIZE_NOT_SUFFICIENT = 10,
|
| 128 |
+
/**
|
| 129 |
+
* API is not implemented.
|
| 130 |
+
*/
|
| 131 |
+
CUPTI_ERROR_API_NOT_IMPLEMENTED = 11,
|
| 132 |
+
/**
|
| 133 |
+
* The maximum limit is reached.
|
| 134 |
+
*/
|
| 135 |
+
CUPTI_ERROR_MAX_LIMIT_REACHED = 12,
|
| 136 |
+
/**
|
| 137 |
+
* The object is not yet ready to perform the requested operation.
|
| 138 |
+
*/
|
| 139 |
+
CUPTI_ERROR_NOT_READY = 13,
|
| 140 |
+
/**
|
| 141 |
+
* The current operation is not compatible with the current state
|
| 142 |
+
* of the object
|
| 143 |
+
*/
|
| 144 |
+
CUPTI_ERROR_NOT_COMPATIBLE = 14,
|
| 145 |
+
/**
|
| 146 |
+
* CUPTI is unable to initialize its connection to the CUDA
|
| 147 |
+
* driver.
|
| 148 |
+
*/
|
| 149 |
+
CUPTI_ERROR_NOT_INITIALIZED = 15,
|
| 150 |
+
/**
|
| 151 |
+
* The metric id is invalid.
|
| 152 |
+
*/
|
| 153 |
+
CUPTI_ERROR_INVALID_METRIC_ID = 16,
|
| 154 |
+
/**
|
| 155 |
+
* The metric name is invalid.
|
| 156 |
+
*/
|
| 157 |
+
CUPTI_ERROR_INVALID_METRIC_NAME = 17,
|
| 158 |
+
/**
|
| 159 |
+
* The queue is empty.
|
| 160 |
+
*/
|
| 161 |
+
CUPTI_ERROR_QUEUE_EMPTY = 18,
|
| 162 |
+
/**
|
| 163 |
+
* Invalid handle (internal?).
|
| 164 |
+
*/
|
| 165 |
+
CUPTI_ERROR_INVALID_HANDLE = 19,
|
| 166 |
+
/**
|
| 167 |
+
* Invalid stream.
|
| 168 |
+
*/
|
| 169 |
+
CUPTI_ERROR_INVALID_STREAM = 20,
|
| 170 |
+
/**
|
| 171 |
+
* Invalid kind.
|
| 172 |
+
*/
|
| 173 |
+
CUPTI_ERROR_INVALID_KIND = 21,
|
| 174 |
+
/**
|
| 175 |
+
* Invalid event value.
|
| 176 |
+
*/
|
| 177 |
+
CUPTI_ERROR_INVALID_EVENT_VALUE = 22,
|
| 178 |
+
/**
|
| 179 |
+
* CUPTI is disabled due to conflicts with other enabled profilers
|
| 180 |
+
*/
|
| 181 |
+
CUPTI_ERROR_DISABLED = 23,
|
| 182 |
+
/**
|
| 183 |
+
* Invalid module.
|
| 184 |
+
*/
|
| 185 |
+
CUPTI_ERROR_INVALID_MODULE = 24,
|
| 186 |
+
/**
|
| 187 |
+
* Invalid metric value.
|
| 188 |
+
*/
|
| 189 |
+
CUPTI_ERROR_INVALID_METRIC_VALUE = 25,
|
| 190 |
+
/**
|
| 191 |
+
* The performance monitoring hardware is in use by other client.
|
| 192 |
+
*/
|
| 193 |
+
CUPTI_ERROR_HARDWARE_BUSY = 26,
|
| 194 |
+
/**
|
| 195 |
+
* The attempted operation is not supported on the current
|
| 196 |
+
* system or device.
|
| 197 |
+
*/
|
| 198 |
+
CUPTI_ERROR_NOT_SUPPORTED = 27,
|
| 199 |
+
/**
|
| 200 |
+
* Unified memory profiling is not supported on the system.
|
| 201 |
+
* Potential reason could be unsupported OS or architecture.
|
| 202 |
+
*/
|
| 203 |
+
CUPTI_ERROR_UM_PROFILING_NOT_SUPPORTED = 28,
|
| 204 |
+
/**
|
| 205 |
+
* Unified memory profiling is not supported on the device
|
| 206 |
+
*/
|
| 207 |
+
CUPTI_ERROR_UM_PROFILING_NOT_SUPPORTED_ON_DEVICE = 29,
|
| 208 |
+
/**
|
| 209 |
+
* Unified memory profiling is not supported on a multi-GPU
|
| 210 |
+
* configuration without P2P support between any pair of devices
|
| 211 |
+
*/
|
| 212 |
+
CUPTI_ERROR_UM_PROFILING_NOT_SUPPORTED_ON_NON_P2P_DEVICES = 30,
|
| 213 |
+
/**
|
| 214 |
+
* Unified memory profiling is not supported under the
|
| 215 |
+
* Multi-Process Service (MPS) environment. CUDA 7.5 removes this
|
| 216 |
+
* restriction.
|
| 217 |
+
*/
|
| 218 |
+
CUPTI_ERROR_UM_PROFILING_NOT_SUPPORTED_WITH_MPS = 31,
|
| 219 |
+
/**
|
| 220 |
+
* In CUDA 9.0, devices with compute capability 7.0 don't
|
| 221 |
+
* support CDP tracing
|
| 222 |
+
*/
|
| 223 |
+
CUPTI_ERROR_CDP_TRACING_NOT_SUPPORTED = 32,
|
| 224 |
+
/**
|
| 225 |
+
* Profiling on virtualized GPU is not supported.
|
| 226 |
+
*/
|
| 227 |
+
CUPTI_ERROR_VIRTUALIZED_DEVICE_NOT_SUPPORTED = 33,
|
| 228 |
+
/**
|
| 229 |
+
* Profiling results might be incorrect for CUDA applications
|
| 230 |
+
* compiled with nvcc version older than 9.0 for devices with
|
| 231 |
+
* compute capability 6.0 and 6.1.
|
| 232 |
+
* Profiling session will continue and CUPTI will notify it using this error code.
|
| 233 |
+
* User is advised to recompile the application code with nvcc version 9.0 or later.
|
| 234 |
+
* Ignore this warning if code is already compiled with the recommended nvcc version.
|
| 235 |
+
*/
|
| 236 |
+
CUPTI_ERROR_CUDA_COMPILER_NOT_COMPATIBLE = 34,
|
| 237 |
+
/**
|
| 238 |
+
* User doesn't have sufficient privileges which are required to
|
| 239 |
+
* start the profiling session.
|
| 240 |
+
* One possible reason for this may be that the NVIDIA driver or your system
|
| 241 |
+
* administrator may have restricted access to the NVIDIA GPU performance counters.
|
| 242 |
+
* To learn how to resolve this issue and find more information, please visit
|
| 243 |
+
* https://developer.nvidia.com/CUPTI_ERROR_INSUFFICIENT_PRIVILEGES
|
| 244 |
+
*/
|
| 245 |
+
CUPTI_ERROR_INSUFFICIENT_PRIVILEGES = 35,
|
| 246 |
+
/**
|
| 247 |
+
* Legacy CUPTI Profiling API i.e. event API from the header cupti_events.h and
|
| 248 |
+
* metric API from the header cupti_metrics.h are not compatible with the
|
| 249 |
+
* Profiling API in the header cupti_profiler_target.h and Perfworks metrics API
|
| 250 |
+
* in the headers nvperf_host.h and nvperf_target.h.
|
| 251 |
+
*/
|
| 252 |
+
CUPTI_ERROR_OLD_PROFILER_API_INITIALIZED = 36,
|
| 253 |
+
/**
|
| 254 |
+
* Missing definition of the OpenACC API routine in the linked OpenACC library.
|
| 255 |
+
*
|
| 256 |
+
* One possible reason is that OpenACC library is linked statically in the
|
| 257 |
+
* user application, which might not have the definition of all the OpenACC
|
| 258 |
+
* API routines needed for the OpenACC profiling, as compiler might ignore
|
| 259 |
+
* definitions for the functions not used in the application. This issue
|
| 260 |
+
* can be mitigated by linking the OpenACC library dynamically.
|
| 261 |
+
*/
|
| 262 |
+
CUPTI_ERROR_OPENACC_UNDEFINED_ROUTINE = 37,
|
| 263 |
+
/**
|
| 264 |
+
* Legacy CUPTI Profiling API i.e. event API from the header cupti_events.h and
|
| 265 |
+
* metric API from the header cupti_metrics.h are not supported on devices with
|
| 266 |
+
* compute capability 7.5 and higher (i.e. Turing and later GPU architectures).
|
| 267 |
+
* These API will be deprecated in a future CUDA release. These are replaced by
|
| 268 |
+
* Profiling API in the header cupti_profiler_target.h and Perfworks metrics API
|
| 269 |
+
* in the headers nvperf_host.h and nvperf_target.h.
|
| 270 |
+
*/
|
| 271 |
+
CUPTI_ERROR_LEGACY_PROFILER_NOT_SUPPORTED = 38,
|
| 272 |
+
/**
|
| 273 |
+
* CUPTI doesn't allow multiple callback subscribers. Only a single subscriber
|
| 274 |
+
* can be registered at a time.
|
| 275 |
+
* Same error code is used when application is launched using NVIDIA tools
|
| 276 |
+
* like nvprof, Visual Profiler, Nsight Systems, Nsight Compute, cuda-gdb and
|
| 277 |
+
* cuda-memcheck.
|
| 278 |
+
*/
|
| 279 |
+
CUPTI_ERROR_MULTIPLE_SUBSCRIBERS_NOT_SUPPORTED = 39,
|
| 280 |
+
/**
|
| 281 |
+
* Profiling on virtualized GPU is not allowed by hypervisor.
|
| 282 |
+
*/
|
| 283 |
+
CUPTI_ERROR_VIRTUALIZED_DEVICE_INSUFFICIENT_PRIVILEGES = 40,
|
| 284 |
+
/**
|
| 285 |
+
* Profiling and tracing are not allowed when confidential computing mode
|
| 286 |
+
* is enabled.
|
| 287 |
+
*/
|
| 288 |
+
CUPTI_ERROR_CONFIDENTIAL_COMPUTING_NOT_SUPPORTED = 41,
|
| 289 |
+
/**
|
| 290 |
+
* CUPTI does not support NVIDIA Crypto Mining Processors (CMP).
|
| 291 |
+
* For more information, please visit https://developer.nvidia.com/ERR_NVCMPGPU
|
| 292 |
+
*/
|
| 293 |
+
CUPTI_ERROR_CMP_DEVICE_NOT_SUPPORTED = 42,
|
| 294 |
+
/**
|
| 295 |
+
* An unknown internal error has occurred.
|
| 296 |
+
*/
|
| 297 |
+
CUPTI_ERROR_UNKNOWN = 999,
|
| 298 |
+
CUPTI_ERROR_FORCE_INT = 0x7fffffff
|
| 299 |
+
} CUptiResult;
|
| 300 |
+
|
| 301 |
+
/**
|
| 302 |
+
* \brief Get the descriptive string for a CUptiResult.
|
| 303 |
+
*
|
| 304 |
+
* Return the descriptive string for a CUptiResult in \p *str.
|
| 305 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 306 |
+
*
|
| 307 |
+
* \param result The result to get the string for
|
| 308 |
+
* \param str Returns the string
|
| 309 |
+
*
|
| 310 |
+
* \retval CUPTI_SUCCESS on success
|
| 311 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p str is NULL or \p
|
| 312 |
+
* result is not a valid CUptiResult
|
| 313 |
+
*/
|
| 314 |
+
CUptiResult CUPTIAPI cuptiGetResultString(CUptiResult result, const char **str);
|
| 315 |
+
|
| 316 |
+
/**
|
| 317 |
+
* @brief Get the descriptive message corresponding to error codes returned
|
| 318 |
+
* by CUPTI.
|
| 319 |
+
*
|
| 320 |
+
* Return the descriptive error message for a CUptiResult in \p *str.
|
| 321 |
+
* \note \b Thread-safety: this function is thread safe.
|
| 322 |
+
*
|
| 323 |
+
* \param result The result to get the descriptive error message for
|
| 324 |
+
* \param str Returns the error message string
|
| 325 |
+
*
|
| 326 |
+
* \retval CUPTI_SUCCESS on success
|
| 327 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p str is NULL or \p
|
| 328 |
+
* result is not a valid CUptiResult
|
| 329 |
+
*
|
| 330 |
+
*/
|
| 331 |
+
|
| 332 |
+
CUptiResult CUPTIAPI cuptiGetErrorMessage(CUptiResult result, const char **str);
|
| 333 |
+
|
| 334 |
+
/** @} */ /* END CUPTI_RESULT_API */
|
| 335 |
+
|
| 336 |
+
#if defined(__GNUC__) && defined(CUPTI_LIB)
|
| 337 |
+
#pragma GCC visibility pop
|
| 338 |
+
#endif
|
| 339 |
+
|
| 340 |
+
#if defined(__cplusplus)
|
| 341 |
+
}
|
| 342 |
+
#endif
|
| 343 |
+
|
| 344 |
+
#endif /*_CUPTI_RESULT_H_*/
|
| 345 |
+
|
| 346 |
+
|
.venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/cupti_runtime_cbid.h
ADDED
|
@@ -0,0 +1,481 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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_runtime_api_trace_cbid_enum {
|
| 10 |
+
CUPTI_RUNTIME_TRACE_CBID_INVALID = 0,
|
| 11 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDriverGetVersion_v3020 = 1,
|
| 12 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaRuntimeGetVersion_v3020 = 2,
|
| 13 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGetDeviceCount_v3020 = 3,
|
| 14 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGetDeviceProperties_v3020 = 4,
|
| 15 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaChooseDevice_v3020 = 5,
|
| 16 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGetChannelDesc_v3020 = 6,
|
| 17 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaCreateChannelDesc_v3020 = 7,
|
| 18 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaConfigureCall_v3020 = 8,
|
| 19 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaSetupArgument_v3020 = 9,
|
| 20 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGetLastError_v3020 = 10,
|
| 21 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaPeekAtLastError_v3020 = 11,
|
| 22 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGetErrorString_v3020 = 12,
|
| 23 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaLaunch_v3020 = 13,
|
| 24 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaFuncSetCacheConfig_v3020 = 14,
|
| 25 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaFuncGetAttributes_v3020 = 15,
|
| 26 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaSetDevice_v3020 = 16,
|
| 27 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGetDevice_v3020 = 17,
|
| 28 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaSetValidDevices_v3020 = 18,
|
| 29 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaSetDeviceFlags_v3020 = 19,
|
| 30 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMalloc_v3020 = 20,
|
| 31 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMallocPitch_v3020 = 21,
|
| 32 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaFree_v3020 = 22,
|
| 33 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMallocArray_v3020 = 23,
|
| 34 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaFreeArray_v3020 = 24,
|
| 35 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMallocHost_v3020 = 25,
|
| 36 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaFreeHost_v3020 = 26,
|
| 37 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaHostAlloc_v3020 = 27,
|
| 38 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaHostGetDevicePointer_v3020 = 28,
|
| 39 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaHostGetFlags_v3020 = 29,
|
| 40 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemGetInfo_v3020 = 30,
|
| 41 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpy_v3020 = 31,
|
| 42 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpy2D_v3020 = 32,
|
| 43 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpyToArray_v3020 = 33,
|
| 44 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpy2DToArray_v3020 = 34,
|
| 45 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpyFromArray_v3020 = 35,
|
| 46 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpy2DFromArray_v3020 = 36,
|
| 47 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpyArrayToArray_v3020 = 37,
|
| 48 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpy2DArrayToArray_v3020 = 38,
|
| 49 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpyToSymbol_v3020 = 39,
|
| 50 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpyFromSymbol_v3020 = 40,
|
| 51 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpyAsync_v3020 = 41,
|
| 52 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpyToArrayAsync_v3020 = 42,
|
| 53 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpyFromArrayAsync_v3020 = 43,
|
| 54 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpy2DAsync_v3020 = 44,
|
| 55 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpy2DToArrayAsync_v3020 = 45,
|
| 56 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpy2DFromArrayAsync_v3020 = 46,
|
| 57 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpyToSymbolAsync_v3020 = 47,
|
| 58 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpyFromSymbolAsync_v3020 = 48,
|
| 59 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemset_v3020 = 49,
|
| 60 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemset2D_v3020 = 50,
|
| 61 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemsetAsync_v3020 = 51,
|
| 62 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemset2DAsync_v3020 = 52,
|
| 63 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGetSymbolAddress_v3020 = 53,
|
| 64 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGetSymbolSize_v3020 = 54,
|
| 65 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaBindTexture_v3020 = 55,
|
| 66 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaBindTexture2D_v3020 = 56,
|
| 67 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaBindTextureToArray_v3020 = 57,
|
| 68 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaUnbindTexture_v3020 = 58,
|
| 69 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGetTextureAlignmentOffset_v3020 = 59,
|
| 70 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGetTextureReference_v3020 = 60,
|
| 71 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaBindSurfaceToArray_v3020 = 61,
|
| 72 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGetSurfaceReference_v3020 = 62,
|
| 73 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGLSetGLDevice_v3020 = 63,
|
| 74 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGLRegisterBufferObject_v3020 = 64,
|
| 75 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGLMapBufferObject_v3020 = 65,
|
| 76 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGLUnmapBufferObject_v3020 = 66,
|
| 77 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGLUnregisterBufferObject_v3020 = 67,
|
| 78 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGLSetBufferObjectMapFlags_v3020 = 68,
|
| 79 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGLMapBufferObjectAsync_v3020 = 69,
|
| 80 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGLUnmapBufferObjectAsync_v3020 = 70,
|
| 81 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaWGLGetDevice_v3020 = 71,
|
| 82 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphicsGLRegisterImage_v3020 = 72,
|
| 83 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphicsGLRegisterBuffer_v3020 = 73,
|
| 84 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphicsUnregisterResource_v3020 = 74,
|
| 85 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphicsResourceSetMapFlags_v3020 = 75,
|
| 86 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphicsMapResources_v3020 = 76,
|
| 87 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphicsUnmapResources_v3020 = 77,
|
| 88 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphicsResourceGetMappedPointer_v3020 = 78,
|
| 89 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphicsSubResourceGetMappedArray_v3020 = 79,
|
| 90 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaVDPAUGetDevice_v3020 = 80,
|
| 91 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaVDPAUSetVDPAUDevice_v3020 = 81,
|
| 92 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphicsVDPAURegisterVideoSurface_v3020 = 82,
|
| 93 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphicsVDPAURegisterOutputSurface_v3020 = 83,
|
| 94 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D11GetDevice_v3020 = 84,
|
| 95 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D11GetDevices_v3020 = 85,
|
| 96 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D11SetDirect3DDevice_v3020 = 86,
|
| 97 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphicsD3D11RegisterResource_v3020 = 87,
|
| 98 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D10GetDevice_v3020 = 88,
|
| 99 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D10GetDevices_v3020 = 89,
|
| 100 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D10SetDirect3DDevice_v3020 = 90,
|
| 101 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphicsD3D10RegisterResource_v3020 = 91,
|
| 102 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D10RegisterResource_v3020 = 92,
|
| 103 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D10UnregisterResource_v3020 = 93,
|
| 104 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D10MapResources_v3020 = 94,
|
| 105 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D10UnmapResources_v3020 = 95,
|
| 106 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D10ResourceSetMapFlags_v3020 = 96,
|
| 107 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D10ResourceGetSurfaceDimensions_v3020 = 97,
|
| 108 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D10ResourceGetMappedArray_v3020 = 98,
|
| 109 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D10ResourceGetMappedPointer_v3020 = 99,
|
| 110 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D10ResourceGetMappedSize_v3020 = 100,
|
| 111 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D10ResourceGetMappedPitch_v3020 = 101,
|
| 112 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D9GetDevice_v3020 = 102,
|
| 113 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D9GetDevices_v3020 = 103,
|
| 114 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D9SetDirect3DDevice_v3020 = 104,
|
| 115 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D9GetDirect3DDevice_v3020 = 105,
|
| 116 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphicsD3D9RegisterResource_v3020 = 106,
|
| 117 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D9RegisterResource_v3020 = 107,
|
| 118 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D9UnregisterResource_v3020 = 108,
|
| 119 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D9MapResources_v3020 = 109,
|
| 120 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D9UnmapResources_v3020 = 110,
|
| 121 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D9ResourceSetMapFlags_v3020 = 111,
|
| 122 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D9ResourceGetSurfaceDimensions_v3020 = 112,
|
| 123 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D9ResourceGetMappedArray_v3020 = 113,
|
| 124 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D9ResourceGetMappedPointer_v3020 = 114,
|
| 125 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D9ResourceGetMappedSize_v3020 = 115,
|
| 126 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D9ResourceGetMappedPitch_v3020 = 116,
|
| 127 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D9Begin_v3020 = 117,
|
| 128 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D9End_v3020 = 118,
|
| 129 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D9RegisterVertexBuffer_v3020 = 119,
|
| 130 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D9UnregisterVertexBuffer_v3020 = 120,
|
| 131 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D9MapVertexBuffer_v3020 = 121,
|
| 132 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D9UnmapVertexBuffer_v3020 = 122,
|
| 133 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaThreadExit_v3020 = 123,
|
| 134 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaSetDoubleForDevice_v3020 = 124,
|
| 135 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaSetDoubleForHost_v3020 = 125,
|
| 136 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaThreadSynchronize_v3020 = 126,
|
| 137 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaThreadGetLimit_v3020 = 127,
|
| 138 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaThreadSetLimit_v3020 = 128,
|
| 139 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamCreate_v3020 = 129,
|
| 140 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamDestroy_v3020 = 130,
|
| 141 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamSynchronize_v3020 = 131,
|
| 142 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamQuery_v3020 = 132,
|
| 143 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaEventCreate_v3020 = 133,
|
| 144 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaEventCreateWithFlags_v3020 = 134,
|
| 145 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaEventRecord_v3020 = 135,
|
| 146 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaEventDestroy_v3020 = 136,
|
| 147 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaEventSynchronize_v3020 = 137,
|
| 148 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaEventQuery_v3020 = 138,
|
| 149 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaEventElapsedTime_v3020 = 139,
|
| 150 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMalloc3D_v3020 = 140,
|
| 151 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMalloc3DArray_v3020 = 141,
|
| 152 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemset3D_v3020 = 142,
|
| 153 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemset3DAsync_v3020 = 143,
|
| 154 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpy3D_v3020 = 144,
|
| 155 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpy3DAsync_v3020 = 145,
|
| 156 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaThreadSetCacheConfig_v3020 = 146,
|
| 157 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamWaitEvent_v3020 = 147,
|
| 158 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D11GetDirect3DDevice_v3020 = 148,
|
| 159 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaD3D10GetDirect3DDevice_v3020 = 149,
|
| 160 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaThreadGetCacheConfig_v3020 = 150,
|
| 161 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaPointerGetAttributes_v4000 = 151,
|
| 162 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaHostRegister_v4000 = 152,
|
| 163 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaHostUnregister_v4000 = 153,
|
| 164 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDeviceCanAccessPeer_v4000 = 154,
|
| 165 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDeviceEnablePeerAccess_v4000 = 155,
|
| 166 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDeviceDisablePeerAccess_v4000 = 156,
|
| 167 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaPeerRegister_v4000 = 157,
|
| 168 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaPeerUnregister_v4000 = 158,
|
| 169 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaPeerGetDevicePointer_v4000 = 159,
|
| 170 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpyPeer_v4000 = 160,
|
| 171 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpyPeerAsync_v4000 = 161,
|
| 172 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpy3DPeer_v4000 = 162,
|
| 173 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpy3DPeerAsync_v4000 = 163,
|
| 174 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDeviceReset_v3020 = 164,
|
| 175 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDeviceSynchronize_v3020 = 165,
|
| 176 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDeviceGetLimit_v3020 = 166,
|
| 177 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDeviceSetLimit_v3020 = 167,
|
| 178 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDeviceGetCacheConfig_v3020 = 168,
|
| 179 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDeviceSetCacheConfig_v3020 = 169,
|
| 180 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaProfilerInitialize_v4000 = 170,
|
| 181 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaProfilerStart_v4000 = 171,
|
| 182 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaProfilerStop_v4000 = 172,
|
| 183 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDeviceGetByPCIBusId_v4010 = 173,
|
| 184 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDeviceGetPCIBusId_v4010 = 174,
|
| 185 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGLGetDevices_v4010 = 175,
|
| 186 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaIpcGetEventHandle_v4010 = 176,
|
| 187 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaIpcOpenEventHandle_v4010 = 177,
|
| 188 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaIpcGetMemHandle_v4010 = 178,
|
| 189 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaIpcOpenMemHandle_v4010 = 179,
|
| 190 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaIpcCloseMemHandle_v4010 = 180,
|
| 191 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaArrayGetInfo_v4010 = 181,
|
| 192 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaFuncSetSharedMemConfig_v4020 = 182,
|
| 193 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDeviceGetSharedMemConfig_v4020 = 183,
|
| 194 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDeviceSetSharedMemConfig_v4020 = 184,
|
| 195 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaCreateTextureObject_v5000 = 185,
|
| 196 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDestroyTextureObject_v5000 = 186,
|
| 197 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGetTextureObjectResourceDesc_v5000 = 187,
|
| 198 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGetTextureObjectTextureDesc_v5000 = 188,
|
| 199 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaCreateSurfaceObject_v5000 = 189,
|
| 200 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDestroySurfaceObject_v5000 = 190,
|
| 201 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGetSurfaceObjectResourceDesc_v5000 = 191,
|
| 202 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMallocMipmappedArray_v5000 = 192,
|
| 203 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGetMipmappedArrayLevel_v5000 = 193,
|
| 204 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaFreeMipmappedArray_v5000 = 194,
|
| 205 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaBindTextureToMipmappedArray_v5000 = 195,
|
| 206 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphicsResourceGetMappedMipmappedArray_v5000 = 196,
|
| 207 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamAddCallback_v5000 = 197,
|
| 208 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamCreateWithFlags_v5000 = 198,
|
| 209 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGetTextureObjectResourceViewDesc_v5000 = 199,
|
| 210 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDeviceGetAttribute_v5000 = 200,
|
| 211 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamDestroy_v5050 = 201,
|
| 212 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamCreateWithPriority_v5050 = 202,
|
| 213 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamGetPriority_v5050 = 203,
|
| 214 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamGetFlags_v5050 = 204,
|
| 215 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDeviceGetStreamPriorityRange_v5050 = 205,
|
| 216 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMallocManaged_v6000 = 206,
|
| 217 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaOccupancyMaxActiveBlocksPerMultiprocessor_v6000 = 207,
|
| 218 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamAttachMemAsync_v6000 = 208,
|
| 219 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGetErrorName_v6050 = 209,
|
| 220 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaOccupancyMaxActiveBlocksPerMultiprocessor_v6050 = 210,
|
| 221 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaLaunchKernel_v7000 = 211,
|
| 222 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGetDeviceFlags_v7000 = 212,
|
| 223 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaLaunch_ptsz_v7000 = 213,
|
| 224 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaLaunchKernel_ptsz_v7000 = 214,
|
| 225 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpy_ptds_v7000 = 215,
|
| 226 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpy2D_ptds_v7000 = 216,
|
| 227 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpyToArray_ptds_v7000 = 217,
|
| 228 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpy2DToArray_ptds_v7000 = 218,
|
| 229 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpyFromArray_ptds_v7000 = 219,
|
| 230 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpy2DFromArray_ptds_v7000 = 220,
|
| 231 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpyArrayToArray_ptds_v7000 = 221,
|
| 232 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpy2DArrayToArray_ptds_v7000 = 222,
|
| 233 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpyToSymbol_ptds_v7000 = 223,
|
| 234 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpyFromSymbol_ptds_v7000 = 224,
|
| 235 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpyAsync_ptsz_v7000 = 225,
|
| 236 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpyToArrayAsync_ptsz_v7000 = 226,
|
| 237 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpyFromArrayAsync_ptsz_v7000 = 227,
|
| 238 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpy2DAsync_ptsz_v7000 = 228,
|
| 239 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpy2DToArrayAsync_ptsz_v7000 = 229,
|
| 240 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpy2DFromArrayAsync_ptsz_v7000 = 230,
|
| 241 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpyToSymbolAsync_ptsz_v7000 = 231,
|
| 242 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpyFromSymbolAsync_ptsz_v7000 = 232,
|
| 243 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemset_ptds_v7000 = 233,
|
| 244 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemset2D_ptds_v7000 = 234,
|
| 245 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemsetAsync_ptsz_v7000 = 235,
|
| 246 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemset2DAsync_ptsz_v7000 = 236,
|
| 247 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamGetPriority_ptsz_v7000 = 237,
|
| 248 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamGetFlags_ptsz_v7000 = 238,
|
| 249 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamSynchronize_ptsz_v7000 = 239,
|
| 250 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamQuery_ptsz_v7000 = 240,
|
| 251 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamAttachMemAsync_ptsz_v7000 = 241,
|
| 252 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaEventRecord_ptsz_v7000 = 242,
|
| 253 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemset3D_ptds_v7000 = 243,
|
| 254 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemset3DAsync_ptsz_v7000 = 244,
|
| 255 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpy3D_ptds_v7000 = 245,
|
| 256 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpy3DAsync_ptsz_v7000 = 246,
|
| 257 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamWaitEvent_ptsz_v7000 = 247,
|
| 258 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamAddCallback_ptsz_v7000 = 248,
|
| 259 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpy3DPeer_ptds_v7000 = 249,
|
| 260 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemcpy3DPeerAsync_ptsz_v7000 = 250,
|
| 261 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags_v7000 = 251,
|
| 262 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemPrefetchAsync_v8000 = 252,
|
| 263 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemPrefetchAsync_ptsz_v8000 = 253,
|
| 264 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemAdvise_v8000 = 254,
|
| 265 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDeviceGetP2PAttribute_v8000 = 255,
|
| 266 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphicsEGLRegisterImage_v7000 = 256,
|
| 267 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaEGLStreamConsumerConnect_v7000 = 257,
|
| 268 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaEGLStreamConsumerDisconnect_v7000 = 258,
|
| 269 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaEGLStreamConsumerAcquireFrame_v7000 = 259,
|
| 270 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaEGLStreamConsumerReleaseFrame_v7000 = 260,
|
| 271 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaEGLStreamProducerConnect_v7000 = 261,
|
| 272 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaEGLStreamProducerDisconnect_v7000 = 262,
|
| 273 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaEGLStreamProducerPresentFrame_v7000 = 263,
|
| 274 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaEGLStreamProducerReturnFrame_v7000 = 264,
|
| 275 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphicsResourceGetMappedEglFrame_v7000 = 265,
|
| 276 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemRangeGetAttribute_v8000 = 266,
|
| 277 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemRangeGetAttributes_v8000 = 267,
|
| 278 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaEGLStreamConsumerConnectWithFlags_v7000 = 268,
|
| 279 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaLaunchCooperativeKernel_v9000 = 269,
|
| 280 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaLaunchCooperativeKernel_ptsz_v9000 = 270,
|
| 281 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaEventCreateFromEGLSync_v9000 = 271,
|
| 282 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaLaunchCooperativeKernelMultiDevice_v9000 = 272,
|
| 283 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaFuncSetAttribute_v9000 = 273,
|
| 284 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaImportExternalMemory_v10000 = 274,
|
| 285 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaExternalMemoryGetMappedBuffer_v10000 = 275,
|
| 286 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaExternalMemoryGetMappedMipmappedArray_v10000 = 276,
|
| 287 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDestroyExternalMemory_v10000 = 277,
|
| 288 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaImportExternalSemaphore_v10000 = 278,
|
| 289 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaSignalExternalSemaphoresAsync_v10000 = 279,
|
| 290 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaSignalExternalSemaphoresAsync_ptsz_v10000 = 280,
|
| 291 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaWaitExternalSemaphoresAsync_v10000 = 281,
|
| 292 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaWaitExternalSemaphoresAsync_ptsz_v10000 = 282,
|
| 293 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDestroyExternalSemaphore_v10000 = 283,
|
| 294 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaLaunchHostFunc_v10000 = 284,
|
| 295 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaLaunchHostFunc_ptsz_v10000 = 285,
|
| 296 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphCreate_v10000 = 286,
|
| 297 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphKernelNodeGetParams_v10000 = 287,
|
| 298 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphKernelNodeSetParams_v10000 = 288,
|
| 299 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphAddKernelNode_v10000 = 289,
|
| 300 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphAddMemcpyNode_v10000 = 290,
|
| 301 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphMemcpyNodeGetParams_v10000 = 291,
|
| 302 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphMemcpyNodeSetParams_v10000 = 292,
|
| 303 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphAddMemsetNode_v10000 = 293,
|
| 304 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphMemsetNodeGetParams_v10000 = 294,
|
| 305 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphMemsetNodeSetParams_v10000 = 295,
|
| 306 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphAddHostNode_v10000 = 296,
|
| 307 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphHostNodeGetParams_v10000 = 297,
|
| 308 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphAddChildGraphNode_v10000 = 298,
|
| 309 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphChildGraphNodeGetGraph_v10000 = 299,
|
| 310 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphAddEmptyNode_v10000 = 300,
|
| 311 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphClone_v10000 = 301,
|
| 312 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphNodeFindInClone_v10000 = 302,
|
| 313 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphNodeGetType_v10000 = 303,
|
| 314 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphGetRootNodes_v10000 = 304,
|
| 315 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphNodeGetDependencies_v10000 = 305,
|
| 316 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphNodeGetDependentNodes_v10000 = 306,
|
| 317 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphAddDependencies_v10000 = 307,
|
| 318 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphRemoveDependencies_v10000 = 308,
|
| 319 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphDestroyNode_v10000 = 309,
|
| 320 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphInstantiate_v10000 = 310,
|
| 321 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphLaunch_v10000 = 311,
|
| 322 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphLaunch_ptsz_v10000 = 312,
|
| 323 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphExecDestroy_v10000 = 313,
|
| 324 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphDestroy_v10000 = 314,
|
| 325 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamBeginCapture_v10000 = 315,
|
| 326 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamBeginCapture_ptsz_v10000 = 316,
|
| 327 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamIsCapturing_v10000 = 317,
|
| 328 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamIsCapturing_ptsz_v10000 = 318,
|
| 329 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamEndCapture_v10000 = 319,
|
| 330 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamEndCapture_ptsz_v10000 = 320,
|
| 331 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphHostNodeSetParams_v10000 = 321,
|
| 332 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphGetNodes_v10000 = 322,
|
| 333 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphGetEdges_v10000 = 323,
|
| 334 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamGetCaptureInfo_v10010 = 324,
|
| 335 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamGetCaptureInfo_ptsz_v10010 = 325,
|
| 336 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphExecKernelNodeSetParams_v10010 = 326,
|
| 337 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaThreadExchangeStreamCaptureMode_v10010 = 327,
|
| 338 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDeviceGetNvSciSyncAttributes_v10020 = 328,
|
| 339 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaOccupancyAvailableDynamicSMemPerBlock_v10200 = 329,
|
| 340 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamSetFlags_v10200 = 330,
|
| 341 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamSetFlags_ptsz_v10200 = 331,
|
| 342 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphExecMemcpyNodeSetParams_v10020 = 332,
|
| 343 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphExecMemsetNodeSetParams_v10020 = 333,
|
| 344 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphExecHostNodeSetParams_v10020 = 334,
|
| 345 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphExecUpdate_v10020 = 335,
|
| 346 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGetFuncBySymbol_v11000 = 336,
|
| 347 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaCtxResetPersistingL2Cache_v11000 = 337,
|
| 348 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphKernelNodeCopyAttributes_v11000 = 338,
|
| 349 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphKernelNodeGetAttribute_v11000 = 339,
|
| 350 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphKernelNodeSetAttribute_v11000 = 340,
|
| 351 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamCopyAttributes_v11000 = 341,
|
| 352 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamCopyAttributes_ptsz_v11000 = 342,
|
| 353 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamGetAttribute_v11000 = 343,
|
| 354 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamGetAttribute_ptsz_v11000 = 344,
|
| 355 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamSetAttribute_v11000 = 345,
|
| 356 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamSetAttribute_ptsz_v11000 = 346,
|
| 357 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDeviceGetTexture1DLinearMaxWidth_v11010 = 347,
|
| 358 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphUpload_v10000 = 348,
|
| 359 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphUpload_ptsz_v10000 = 349,
|
| 360 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphAddMemcpyNodeToSymbol_v11010 = 350,
|
| 361 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphAddMemcpyNodeFromSymbol_v11010 = 351,
|
| 362 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphAddMemcpyNode1D_v11010 = 352,
|
| 363 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphMemcpyNodeSetParamsToSymbol_v11010 = 353,
|
| 364 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphMemcpyNodeSetParamsFromSymbol_v11010 = 354,
|
| 365 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphMemcpyNodeSetParams1D_v11010 = 355,
|
| 366 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphExecMemcpyNodeSetParamsToSymbol_v11010 = 356,
|
| 367 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphExecMemcpyNodeSetParamsFromSymbol_v11010 = 357,
|
| 368 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphExecMemcpyNodeSetParams1D_v11010 = 358,
|
| 369 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaArrayGetSparseProperties_v11010 = 359,
|
| 370 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMipmappedArrayGetSparseProperties_v11010 = 360,
|
| 371 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphExecChildGraphNodeSetParams_v11010 = 361,
|
| 372 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphAddEventRecordNode_v11010 = 362,
|
| 373 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphEventRecordNodeGetEvent_v11010 = 363,
|
| 374 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphEventRecordNodeSetEvent_v11010 = 364,
|
| 375 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphAddEventWaitNode_v11010 = 365,
|
| 376 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphEventWaitNodeGetEvent_v11010 = 366,
|
| 377 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphEventWaitNodeSetEvent_v11010 = 367,
|
| 378 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphExecEventRecordNodeSetEvent_v11010 = 368,
|
| 379 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphExecEventWaitNodeSetEvent_v11010 = 369,
|
| 380 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaEventRecordWithFlags_v11010 = 370,
|
| 381 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaEventRecordWithFlags_ptsz_v11010 = 371,
|
| 382 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDeviceGetDefaultMemPool_v11020 = 372,
|
| 383 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMallocAsync_v11020 = 373,
|
| 384 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMallocAsync_ptsz_v11020 = 374,
|
| 385 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaFreeAsync_v11020 = 375,
|
| 386 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaFreeAsync_ptsz_v11020 = 376,
|
| 387 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemPoolTrimTo_v11020 = 377,
|
| 388 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemPoolSetAttribute_v11020 = 378,
|
| 389 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemPoolGetAttribute_v11020 = 379,
|
| 390 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemPoolSetAccess_v11020 = 380,
|
| 391 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaArrayGetPlane_v11020 = 381,
|
| 392 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemPoolGetAccess_v11020 = 382,
|
| 393 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemPoolCreate_v11020 = 383,
|
| 394 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemPoolDestroy_v11020 = 384,
|
| 395 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDeviceSetMemPool_v11020 = 385,
|
| 396 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDeviceGetMemPool_v11020 = 386,
|
| 397 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemPoolExportToShareableHandle_v11020 = 387,
|
| 398 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemPoolImportFromShareableHandle_v11020 = 388,
|
| 399 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemPoolExportPointer_v11020 = 389,
|
| 400 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemPoolImportPointer_v11020 = 390,
|
| 401 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMallocFromPoolAsync_v11020 = 391,
|
| 402 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMallocFromPoolAsync_ptsz_v11020 = 392,
|
| 403 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaSignalExternalSemaphoresAsync_v2_v11020 = 393,
|
| 404 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaSignalExternalSemaphoresAsync_v2_ptsz_v11020 = 394,
|
| 405 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaWaitExternalSemaphoresAsync_v2_v11020 = 395,
|
| 406 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaWaitExternalSemaphoresAsync_v2_ptsz_v11020 = 396,
|
| 407 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphAddExternalSemaphoresSignalNode_v11020 = 397,
|
| 408 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphExternalSemaphoresSignalNodeGetParams_v11020 = 398,
|
| 409 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphExternalSemaphoresSignalNodeSetParams_v11020 = 399,
|
| 410 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphAddExternalSemaphoresWaitNode_v11020 = 400,
|
| 411 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphExternalSemaphoresWaitNodeGetParams_v11020 = 401,
|
| 412 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphExternalSemaphoresWaitNodeSetParams_v11020 = 402,
|
| 413 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphExecExternalSemaphoresSignalNodeSetParams_v11020 = 403,
|
| 414 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphExecExternalSemaphoresWaitNodeSetParams_v11020 = 404,
|
| 415 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDeviceFlushGPUDirectRDMAWrites_v11030 = 405,
|
| 416 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGetDriverEntryPoint_v11030 = 406,
|
| 417 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGetDriverEntryPoint_ptsz_v11030 = 407,
|
| 418 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphDebugDotPrint_v11030 = 408,
|
| 419 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamGetCaptureInfo_v2_v11030 = 409,
|
| 420 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamGetCaptureInfo_v2_ptsz_v11030 = 410,
|
| 421 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamUpdateCaptureDependencies_v11030 = 411,
|
| 422 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamUpdateCaptureDependencies_ptsz_v11030 = 412,
|
| 423 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaUserObjectCreate_v11030 = 413,
|
| 424 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaUserObjectRetain_v11030 = 414,
|
| 425 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaUserObjectRelease_v11030 = 415,
|
| 426 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphRetainUserObject_v11030 = 416,
|
| 427 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphReleaseUserObject_v11030 = 417,
|
| 428 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphInstantiateWithFlags_v11040 = 418,
|
| 429 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphAddMemAllocNode_v11040 = 419,
|
| 430 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphMemAllocNodeGetParams_v11040 = 420,
|
| 431 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphAddMemFreeNode_v11040 = 421,
|
| 432 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphMemFreeNodeGetParams_v11040 = 422,
|
| 433 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDeviceGraphMemTrim_v11040 = 423,
|
| 434 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDeviceGetGraphMemAttribute_v11040 = 424,
|
| 435 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaDeviceSetGraphMemAttribute_v11040 = 425,
|
| 436 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphNodeSetEnabled_v11060 = 426,
|
| 437 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphNodeGetEnabled_v11060 = 427,
|
| 438 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaArrayGetMemoryRequirements_v11060 = 428,
|
| 439 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMipmappedArrayGetMemoryRequirements_v11060 = 429,
|
| 440 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaLaunchKernelExC_v11060 = 430,
|
| 441 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaLaunchKernelExC_ptsz_v11060 = 431,
|
| 442 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaOccupancyMaxPotentialClusterSize_v11070 = 432,
|
| 443 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaOccupancyMaxActiveClusters_v11070 = 433,
|
| 444 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaCreateTextureObject_v2_v11080 = 434,
|
| 445 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGetTextureObjectTextureDesc_v2_v11080 = 435,
|
| 446 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphInstantiateWithParams_v12000 = 436,
|
| 447 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphInstantiateWithParams_ptsz_v12000 = 437,
|
| 448 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphExecGetFlags_v12000 = 438,
|
| 449 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGetKernel_v12000 = 439,
|
| 450 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGetDeviceProperties_v2_v12000 = 440,
|
| 451 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamGetId_v12000 = 441,
|
| 452 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamGetId_ptsz_v12000 = 442,
|
| 453 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphInstantiate_v12000 = 443,
|
| 454 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaInitDevice_v12000 = 444,
|
| 455 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphAddNode_v12020 = 445,
|
| 456 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphNodeSetParams_v12020 = 446,
|
| 457 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphExecNodeSetParams_v12020 = 447,
|
| 458 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemAdvise_v2_v12020 = 448,
|
| 459 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemPrefetchAsync_v2_v12020 = 449,
|
| 460 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaMemPrefetchAsync_v2_ptsz_v12020 = 450,
|
| 461 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaFuncGetName_v12030 = 451,
|
| 462 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamBeginCaptureToGraph_v12030 = 452,
|
| 463 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamBeginCaptureToGraph_ptsz_v12030 = 453,
|
| 464 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphConditionalHandleCreate_v12030 = 454,
|
| 465 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphGetEdges_v2_v12030 = 455,
|
| 466 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphNodeGetDependencies_v2_v12030 = 456,
|
| 467 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphNodeGetDependentNodes_v2_v12030 = 457,
|
| 468 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphAddDependencies_v2_v12030 = 458,
|
| 469 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphRemoveDependencies_v2_v12030 = 459,
|
| 470 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaGraphAddNode_v2_v12030 = 460,
|
| 471 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamGetCaptureInfo_v3_v12030 = 461,
|
| 472 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamGetCaptureInfo_v3_ptsz_v12030 = 462,
|
| 473 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamUpdateCaptureDependencies_v2_v12030 = 463,
|
| 474 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaStreamUpdateCaptureDependencies_v2_ptsz_v12030 = 464,
|
| 475 |
+
CUPTI_RUNTIME_TRACE_CBID_cuda465_v12040 = 465,
|
| 476 |
+
CUPTI_RUNTIME_TRACE_CBID_cuda466_v12040 = 466,
|
| 477 |
+
CUPTI_RUNTIME_TRACE_CBID_cudaFuncGetParamInfo_v12040 = 467,
|
| 478 |
+
CUPTI_RUNTIME_TRACE_CBID_SIZE = 468,
|
| 479 |
+
CUPTI_RUNTIME_TRACE_CBID_FORCE_INT = 0x7fffffff
|
| 480 |
+
} CUpti_runtime_api_trace_cbid;
|
| 481 |
+
|
.venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/cupti_sass_metrics.h
ADDED
|
@@ -0,0 +1,436 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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_SASS_METRICS_H_)
|
| 51 |
+
#define _CUPTI_SASS_METRICS_H_
|
| 52 |
+
|
| 53 |
+
#include <cuda.h>
|
| 54 |
+
#include <cupti_result.h>
|
| 55 |
+
#include <cupti_profiler_target.h>
|
| 56 |
+
|
| 57 |
+
#ifdef __cplusplus
|
| 58 |
+
extern "C" {
|
| 59 |
+
#endif
|
| 60 |
+
|
| 61 |
+
#if defined(__GNUC__) && defined(CUPTI_LIB)
|
| 62 |
+
#pragma GCC visibility push(default)
|
| 63 |
+
#endif
|
| 64 |
+
|
| 65 |
+
/**
|
| 66 |
+
* \defgroup CUPTI_SASS_METRICS_API CUPTI SASS Metrics API
|
| 67 |
+
* Functions, types, and enums that implement the CUPTI SASS Metrics API.
|
| 68 |
+
* @{
|
| 69 |
+
*/
|
| 70 |
+
|
| 71 |
+
typedef enum
|
| 72 |
+
{
|
| 73 |
+
/// SASS metric data will be collected at GPU level.
|
| 74 |
+
/// In CUpti_SassMetricsGetDataProperties_Params struct the numOfInstances will be equal to 1
|
| 75 |
+
CUPTI_SASS_METRICS_OUTPUT_GRANULARITY_GPU = 0,
|
| 76 |
+
|
| 77 |
+
/// SASS metric data will be collected at SM level
|
| 78 |
+
/// In CUpti_SassMetricsGetDataProperties_Params struct the numOfInstances will be equal to number of SMs in the GPU
|
| 79 |
+
CUPTI_SASS_METRICS_OUTPUT_GRANULARITY_SM = 1,
|
| 80 |
+
|
| 81 |
+
/// SASS metric data will be collected at SM sub-partition level
|
| 82 |
+
/// In CUpti_SassMetricsGetDataProperties_Params struct the numOfInstances will be equal to number of SM sub-partitions in the GPU
|
| 83 |
+
CUPTI_SASS_METRICS_OUTPUT_GRANULARITY_SMSP = 2,
|
| 84 |
+
|
| 85 |
+
CUPTI_SASS_METRICS_OUTPUT_GRANULARITY_INVALID
|
| 86 |
+
} CUpti_SassMetrics_OutputGranularity;
|
| 87 |
+
|
| 88 |
+
typedef struct CUpti_SassMetrics_MetricDetails
|
| 89 |
+
{
|
| 90 |
+
/// unique ID for the SASS metric
|
| 91 |
+
uint64_t metricId;
|
| 92 |
+
/// metric name
|
| 93 |
+
const char* pMetricName;
|
| 94 |
+
/// metric description
|
| 95 |
+
const char* pMetricDescription;
|
| 96 |
+
} CUpti_SassMetrics_MetricDetails;
|
| 97 |
+
|
| 98 |
+
/**
|
| 99 |
+
* \brief Params for cuptiSassMetricsGetNumOfMetrics
|
| 100 |
+
*/
|
| 101 |
+
typedef struct CUpti_SassMetrics_GetNumOfMetrics_Params
|
| 102 |
+
{
|
| 103 |
+
/// [in] should be equal to CUpti_SassMetrics_GetNumOfMetrics_Params_STRUCT_SIZE
|
| 104 |
+
size_t structSize;
|
| 105 |
+
/// [in] assign to NULL
|
| 106 |
+
void* pPriv;
|
| 107 |
+
/// [in] chip name for which metrics will be queried
|
| 108 |
+
const char* pChipName;
|
| 109 |
+
/// [out] number of metrics supported for the queried chip
|
| 110 |
+
size_t numOfMetrics;
|
| 111 |
+
} CUpti_SassMetrics_GetNumOfMetrics_Params;
|
| 112 |
+
|
| 113 |
+
#define CUpti_SassMetrics_GetNumOfMetrics_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_SassMetrics_GetNumOfMetrics_Params, numOfMetrics)
|
| 114 |
+
|
| 115 |
+
/**
|
| 116 |
+
* \brief Get the number of supported SASS metrics for the chip.
|
| 117 |
+
*
|
| 118 |
+
* \param pParams A pointer to \ref CUpti_SassMetrics_GetNumOfMetrics_Params
|
| 119 |
+
*
|
| 120 |
+
* \retval CUPTI_SUCCESS
|
| 121 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if any \p pParams is not valid
|
| 122 |
+
* \retval CUPTI_ERROR_NOT_SUPPORTED indicates that the system/device doesn't support SASS metric collection
|
| 123 |
+
*/
|
| 124 |
+
CUptiResult CUPTIAPI cuptiSassMetricsGetNumOfMetrics(CUpti_SassMetrics_GetNumOfMetrics_Params* pParams);
|
| 125 |
+
|
| 126 |
+
/**
|
| 127 |
+
* \brief Params for cuptiSassMetricsGetMetrics
|
| 128 |
+
*/
|
| 129 |
+
typedef struct CUpti_SassMetrics_GetMetrics_Params
|
| 130 |
+
{
|
| 131 |
+
/// [in] should be equal to CUpti_SassMetrics_GetMetrics_Params_STRUCT_SIZE
|
| 132 |
+
size_t structSize;
|
| 133 |
+
/// [in] assign to NULL
|
| 134 |
+
void* pPriv;
|
| 135 |
+
/// [in] chip name for which metrics will be queried
|
| 136 |
+
const char* pChipName;
|
| 137 |
+
/// [in] number of metrics supported for the queried chip (can be queried using cuptiSassMetricsGetNumOfMetrics())
|
| 138 |
+
size_t numOfMetrics;
|
| 139 |
+
/// [out] list of metrics supported for queried chip
|
| 140 |
+
CUpti_SassMetrics_MetricDetails* pMetricsList;
|
| 141 |
+
} CUpti_SassMetrics_GetMetrics_Params;
|
| 142 |
+
#define CUpti_SassMetrics_GetMetrics_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_SassMetrics_GetMetrics_Params, pMetricsList)
|
| 143 |
+
|
| 144 |
+
/**
|
| 145 |
+
* \brief Get the list of all supported SASS metrics for the chip.
|
| 146 |
+
*
|
| 147 |
+
* \param pParams A pointer to \ref CUpti_SassMetrics_GetMetrics_Params
|
| 148 |
+
*
|
| 149 |
+
* \retval CUPTI_SUCCESS
|
| 150 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if any \p pParams is not valid
|
| 151 |
+
* \retval CUPTI_ERROR_NOT_SUPPORTED indicates that the system/device doesn't support SASS metric collection
|
| 152 |
+
*/
|
| 153 |
+
CUptiResult CUPTIAPI cuptiSassMetricsGetMetrics(CUpti_SassMetrics_GetMetrics_Params* pParams);
|
| 154 |
+
|
| 155 |
+
/**
|
| 156 |
+
* \brief Params for cuptiSassMetricsGetProperties
|
| 157 |
+
*/
|
| 158 |
+
typedef struct CUpti_SassMetrics_GetProperties_Params
|
| 159 |
+
{
|
| 160 |
+
/// [in] should be equal to CUpti_SassMetrics_GetProperties_Params_STRUCT_SIZE
|
| 161 |
+
size_t structSize;
|
| 162 |
+
/// [in] assign to NULL
|
| 163 |
+
void* pPriv;
|
| 164 |
+
/// [in] chip name for which metric will be queried
|
| 165 |
+
const char* pChipName;
|
| 166 |
+
/// [in] metric name
|
| 167 |
+
const char* pMetricName;
|
| 168 |
+
/// [out] returns the metric ID and the metric description
|
| 169 |
+
CUpti_SassMetrics_MetricDetails metric;
|
| 170 |
+
} CUpti_SassMetrics_GetProperties_Params;
|
| 171 |
+
#define CUpti_SassMetrics_GetProperties_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_SassMetrics_GetProperties_Params, metric)
|
| 172 |
+
|
| 173 |
+
/**
|
| 174 |
+
* \brief Get metric properties for the queried metric.
|
| 175 |
+
* For a given metric the results will be put in CUpti_SassMetrics_MetricDetails which
|
| 176 |
+
* stores metric ID, description of the metric.
|
| 177 |
+
*
|
| 178 |
+
* \param pParams A pointer to \ref CUpti_SassMetrics_GetProperties_Params
|
| 179 |
+
*
|
| 180 |
+
* \retval CUPTI_SUCCESS
|
| 181 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if any \p pParams is not valid
|
| 182 |
+
* \retval CUPTI_ERROR_NOT_SUPPORTED indicates that the system/device doesn't support SASS metric data collection
|
| 183 |
+
*/
|
| 184 |
+
CUptiResult CUPTIAPI cuptiSassMetricsGetProperties(CUpti_SassMetrics_GetProperties_Params *pParams);
|
| 185 |
+
|
| 186 |
+
typedef struct CUpti_SassMetrics_Config
|
| 187 |
+
{
|
| 188 |
+
/// [in] unique id for the SASS metric, can be queried using cuptiSassMetricsGetProperties()
|
| 189 |
+
uint64_t metricId;
|
| 190 |
+
/// [in] CUpti_SassMetrics_OutputGranularity
|
| 191 |
+
uint8_t outputGranularity;
|
| 192 |
+
} CUpti_SassMetrics_Config;
|
| 193 |
+
|
| 194 |
+
/**
|
| 195 |
+
* \brief Params for cuptiSassMetricsSetConfig
|
| 196 |
+
*/
|
| 197 |
+
typedef struct CUpti_SassMetricsSetConfig_Params
|
| 198 |
+
{
|
| 199 |
+
/// [in] equal to CUpti_SassMetricsSetConfig_Params_STRUCT_SIZE
|
| 200 |
+
size_t structSize;
|
| 201 |
+
/// [in] assign to NULL
|
| 202 |
+
void* pPriv;
|
| 203 |
+
/// [in] num of metric configs, will be equal to number of metrics queried
|
| 204 |
+
size_t numOfMetricConfig;
|
| 205 |
+
/// [in] list of metric config generated for given sass metrics
|
| 206 |
+
CUpti_SassMetrics_Config* pConfigs;
|
| 207 |
+
/// [in] device index for which config will be set, user can call this once for
|
| 208 |
+
/// the device on which the the SASS metric data will be collected
|
| 209 |
+
uint32_t deviceIndex;
|
| 210 |
+
} CUpti_SassMetricsSetConfig_Params;
|
| 211 |
+
#define CUpti_SassMetricsSetConfig_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_SassMetricsSetConfig_Params, deviceIndex)
|
| 212 |
+
|
| 213 |
+
/**
|
| 214 |
+
* \brief Set config for the SASS metric data collection for a device.
|
| 215 |
+
* User need to call this API before calling any of the SASS metric data collection APIs.
|
| 216 |
+
* Each set config API call need to be followed by cuptiSassPatchingUnSetConfig API
|
| 217 |
+
* before calling the cuptiSassMetricsSetConfig() API again for the same device.
|
| 218 |
+
*
|
| 219 |
+
* \param pParams A pointer to \ref CUpti_SassMetricsSetConfig_Params
|
| 220 |
+
*
|
| 221 |
+
* \retval CUPTI_SUCCESS
|
| 222 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if any \p pParams is not valid
|
| 223 |
+
* \retval CUPTI_ERROR_INVALID_CONTEXT if any cuda context has not been created prior to this API call
|
| 224 |
+
* \retval CUPTI_ERROR_INVALID_OPERATION if this is called multiple times for the device without calling unset config API
|
| 225 |
+
* \retval CUPTI_ERROR_NOT_SUPPORTED indicates that the system/device doesn't support SASS metric data collection
|
| 226 |
+
*/
|
| 227 |
+
CUptiResult CUPTIAPI cuptiSassMetricsSetConfig(CUpti_SassMetricsSetConfig_Params *pParams);
|
| 228 |
+
|
| 229 |
+
/**
|
| 230 |
+
* \brief Params for cuptiSassMetricsUnsetConfig
|
| 231 |
+
*/
|
| 232 |
+
typedef struct CUpti_SassMetricsUnsetConfig_Params
|
| 233 |
+
{
|
| 234 |
+
/// [in] equal to CUpti_SassMetricsUnsetConfig_Params_STRUCT_SIZE
|
| 235 |
+
size_t structSize;
|
| 236 |
+
/// [in] assign to NULL
|
| 237 |
+
void* pPriv;
|
| 238 |
+
/// [in] device index for which SASS metric data collection config will get reset, user need to call this API for
|
| 239 |
+
/// all the devices on which the the SASS metric data collection have been configured.
|
| 240 |
+
uint32_t deviceIndex;
|
| 241 |
+
} CUpti_SassMetricsUnsetConfig_Params;
|
| 242 |
+
#define CUpti_SassMetricsUnsetConfig_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_SassMetricsUnsetConfig_Params, deviceIndex)
|
| 243 |
+
|
| 244 |
+
/**
|
| 245 |
+
* \brief Unset config API will reset the SASS metric data collection configuration for the device.
|
| 246 |
+
* Once this API called CUPTI will deallocate all the memory allocated and remove all
|
| 247 |
+
* the configuration for SASS metric data collection. User can only call this API for a device where
|
| 248 |
+
* cuptiSassMetricsSetConfig() API has been called earlier for the device.
|
| 249 |
+
*
|
| 250 |
+
* \param pParams A pointer to \ref CUpti_SassMetricsSetConfig_Params
|
| 251 |
+
*
|
| 252 |
+
* \retval CUPTI_SUCCESS
|
| 253 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if any \p pParams is not valid
|
| 254 |
+
* \retval CUPTI_ERROR_INVALID_CONTEXT if any cuda context has not been created prior to this API call
|
| 255 |
+
* \retval CUPTI_ERROR_INVALID_OPERATION if this is called multiple times for the device without calling set config API
|
| 256 |
+
* \retval CUPTI_ERROR_NOT_SUPPORTED indicates that the system/device doesn't support SASS metric data collection
|
| 257 |
+
*/
|
| 258 |
+
CUptiResult CUPTIAPI cuptiSassMetricsUnsetConfig(CUpti_SassMetricsUnsetConfig_Params *pParams);
|
| 259 |
+
|
| 260 |
+
/**
|
| 261 |
+
* \brief Params for cuptiSassMetricsEnable
|
| 262 |
+
*/
|
| 263 |
+
typedef struct CUpti_SassMetricsEnable_Params
|
| 264 |
+
{
|
| 265 |
+
/// [in] equal to CUpti_SassMetricsEnable_Params_STRUCT_SIZE
|
| 266 |
+
size_t structSize;
|
| 267 |
+
/// [in] assign to NULL
|
| 268 |
+
void* pPriv;
|
| 269 |
+
/// [in] CUDA context on which SASS metric data collection will be enabled.
|
| 270 |
+
/// If set NULL, default context will be consider for SASS metric data collection.
|
| 271 |
+
CUcontext ctx;
|
| 272 |
+
/// [in] if false, all the functions will patched regardless of their execution with cuptiSassMetricsEnable() API call.
|
| 273 |
+
/// when this parameter is set to true, metric data collection for the function will be done at the very first execution in the enable/disble
|
| 274 |
+
/// range.
|
| 275 |
+
uint8_t enableLazyPatching;
|
| 276 |
+
} CUpti_SassMetricsEnable_Params;
|
| 277 |
+
#define CUpti_SassMetricsEnable_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_SassMetricsEnable_Params, enableLazyPatching)
|
| 278 |
+
|
| 279 |
+
/**
|
| 280 |
+
* \brief Sass metric data collection enable API will mark the start of a range, between which kernel
|
| 281 |
+
* will be profiled for SASS metrics.
|
| 282 |
+
*
|
| 283 |
+
* \param pParams A pointer to \ref CUpti_SassMetricsEnable_Params
|
| 284 |
+
*
|
| 285 |
+
* \retval CUPTI_SUCCESS
|
| 286 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if any \p pParams is not valid
|
| 287 |
+
* \retval CUPTI_ERROR_NOT_SUPPORTED indicates that the system/device doesn't support SASS metric data collection
|
| 288 |
+
* \retval CUPTI_ERROR_INVALID_CONTEXT if any cuda context has not been created prior to this API call
|
| 289 |
+
* \retval CUPTI_ERROR_INVALID_OPERATION if this API is called multiple times for a cuda context without calling
|
| 290 |
+
* cuptiSassMetricsDisable() API or called before cuptiSassMetricsSetConfig() API call.
|
| 291 |
+
*/
|
| 292 |
+
CUptiResult CUPTIAPI cuptiSassMetricsEnable(CUpti_SassMetricsEnable_Params* pParams);
|
| 293 |
+
|
| 294 |
+
/**
|
| 295 |
+
* \brief Params for cuptiSassMetricsDisable
|
| 296 |
+
*/
|
| 297 |
+
typedef struct CUpti_SassMetricsDisable_Params
|
| 298 |
+
{
|
| 299 |
+
/// [in] equal to CUpti_SassMetricsDisable_Params_STRUCT_SIZE
|
| 300 |
+
size_t structSize;
|
| 301 |
+
/// [in] assign to NULL
|
| 302 |
+
void* pPriv;
|
| 303 |
+
/// [in] CUDA context on which SASS metric data collection will be disabled.
|
| 304 |
+
/// If set NULL, default context will be consider for SASS metric data collection.
|
| 305 |
+
CUcontext ctx;
|
| 306 |
+
/// [out] Num of dropped SASS records will be equal to numOfPatchedInstructions * numOfInstances.
|
| 307 |
+
/// Number of dropped records will be zero when data is flushed prior to calling the disable API.
|
| 308 |
+
size_t numOfDroppedRecords;
|
| 309 |
+
} CUpti_SassMetricsDisable_Params;
|
| 310 |
+
#define CUpti_SassMetricsDisable_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_SassMetricsDisable_Params, numOfDroppedRecords)
|
| 311 |
+
|
| 312 |
+
/**
|
| 313 |
+
* \brief SASS metric data collection disable API will mark the end of a range, any kernel launched after this
|
| 314 |
+
* API call will not be profiled for the SASS metrics.
|
| 315 |
+
*
|
| 316 |
+
* \param pParams A pointer to \ref CUpti_SassMetricsDisable_Params
|
| 317 |
+
*
|
| 318 |
+
* \retval CUPTI_SUCCESS
|
| 319 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if any \p pParams is not valid
|
| 320 |
+
* \retval CUPTI_ERROR_NOT_SUPPORTED indicates that the system/device doesn't support SASS metric data collection
|
| 321 |
+
* \retval CUPTI_ERROR_INVALID_CONTEXT if any cuda context has not been created prior to this API call
|
| 322 |
+
* \retval CUPTI_ERROR_INVALID_OPERATION if this API is called multiple times for a cuda context without calling
|
| 323 |
+
* cuptiSassMetricsEnable() API or called before cuptiSassMetricsSetConfig() API call.
|
| 324 |
+
*/
|
| 325 |
+
CUptiResult CUPTIAPI cuptiSassMetricsDisable(CUpti_SassMetricsDisable_Params* pParams);
|
| 326 |
+
|
| 327 |
+
/**
|
| 328 |
+
* \brief Params for cuptiSassMetricsGetDataProperties
|
| 329 |
+
*/
|
| 330 |
+
typedef struct CUpti_SassMetricsGetDataProperties_Params
|
| 331 |
+
{
|
| 332 |
+
/// [in] equal to CUpti_SassMetricsGetDataProperties_Params_STRUCT_SIZE
|
| 333 |
+
size_t structSize;
|
| 334 |
+
/// [in] assign to NULL
|
| 335 |
+
void* pPriv;
|
| 336 |
+
/// [in] CUDA context on which SASS metric data collection was enabled.
|
| 337 |
+
/// If set NULL, default context will be consider for SASS metric data collection.
|
| 338 |
+
CUcontext ctx;
|
| 339 |
+
/// [out] total number of SASS records has been collected
|
| 340 |
+
size_t numOfPatchedInstructionRecords;
|
| 341 |
+
/// [out] number of instances for each metric value per instruction.
|
| 342 |
+
/// This will depend on CUpti_SassPatching_OutputGranularity level set for the metric config.
|
| 343 |
+
size_t numOfInstances;
|
| 344 |
+
} CUpti_SassMetricsGetDataProperties_Params;
|
| 345 |
+
|
| 346 |
+
#define CUpti_SassMetricsGetDataProperties_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_SassMetricsGetDataProperties_Params, numOfInstances)
|
| 347 |
+
/**
|
| 348 |
+
* \brief SASS metric data properties API will give the data regarding number of instances of a metric
|
| 349 |
+
* value and number of SASS instruction data has been collected. The number of instances of a metric
|
| 350 |
+
* will vary as per user set the output granularity level with CUpti_SassMetrics_OutputGranularity value.
|
| 351 |
+
* User need to allocate memory for retriving the SASS data using cuptiSassMetricsFlushData() API.
|
| 352 |
+
*
|
| 353 |
+
* \param pParams A pointer to \ref CUpti_SassMetricsGetDataProperties_Params
|
| 354 |
+
*
|
| 355 |
+
* \retval CUPTI_SUCCESS
|
| 356 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if any \p pParams is not valid
|
| 357 |
+
* \retval CUPTI_ERROR_NOT_SUPPORTED indicates that the system/device doesn't support SASS metric data collection
|
| 358 |
+
* \retval CUPTI_ERROR_INVALID_OPERATION if this API is called outside the enable/disable range.
|
| 359 |
+
*/
|
| 360 |
+
CUptiResult CUPTIAPI cuptiSassMetricsGetDataProperties(CUpti_SassMetricsGetDataProperties_Params* pParams);
|
| 361 |
+
|
| 362 |
+
typedef struct CUpti_SassMetrics_InstanceValue
|
| 363 |
+
{
|
| 364 |
+
// unique id of the metric
|
| 365 |
+
uint64_t metricId;
|
| 366 |
+
// metric value
|
| 367 |
+
uint64_t value;
|
| 368 |
+
} CUpti_SassMetrics_InstanceValue;
|
| 369 |
+
#define CUpti_SassMetrics_InstanceValue_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_SassMetrics_InstanceValue, value)
|
| 370 |
+
|
| 371 |
+
typedef struct CUpti_SassMetrics_Data
|
| 372 |
+
{
|
| 373 |
+
/// [in] equal to CUpti_SassMetricsFlushData_Params_STRUCT_SIZE
|
| 374 |
+
size_t structSize;
|
| 375 |
+
/// [in] assign to NULL
|
| 376 |
+
void* pPriv;
|
| 377 |
+
/// [out] Unique cubin id
|
| 378 |
+
uint32_t cubinCrc;
|
| 379 |
+
/// [out] function's unique symbol index in the module.
|
| 380 |
+
uint32_t functionIndex;
|
| 381 |
+
/// [out] The function name
|
| 382 |
+
const char* functionName;
|
| 383 |
+
/// [out] pc offset for the function in a module
|
| 384 |
+
uint32_t pcOffset;
|
| 385 |
+
/// [out] array of size equal to number of instances per metric, which contains the metric ID and metric value.
|
| 386 |
+
CUpti_SassMetrics_InstanceValue* pInstanceValues;
|
| 387 |
+
} CUpti_SassMetrics_Data;
|
| 388 |
+
|
| 389 |
+
/**
|
| 390 |
+
* \brief Params for cuptiSassMetricsFlushData
|
| 391 |
+
*/
|
| 392 |
+
typedef struct CUpti_SassMetricsFlushData_Params
|
| 393 |
+
{
|
| 394 |
+
/// [in] equal to CUpti_SassMetricsFlushData_Params_STRUCT_SIZE
|
| 395 |
+
size_t structSize;
|
| 396 |
+
/// [in] assign to NULL
|
| 397 |
+
void* pPriv;
|
| 398 |
+
/// [in] CUDA context on which SASS metric data collection was enabled.
|
| 399 |
+
/// If set NULL, default context will be consider for SASS metric data collection.
|
| 400 |
+
CUcontext ctx;
|
| 401 |
+
/// [in] number of patched instruction record will be retrived, user can call cuptiSassMetricsGetDataProperties()
|
| 402 |
+
/// for getting total number of records available.
|
| 403 |
+
size_t numOfPatchedInstructionRecords;
|
| 404 |
+
/// [in] number of patched instruction record instances for a metric, user can call cuptiSassMetricsGetDataProperties()
|
| 405 |
+
/// for getting total number of instances for each record per metric available.
|
| 406 |
+
size_t numOfInstances;
|
| 407 |
+
/// [out]
|
| 408 |
+
CUpti_SassMetrics_Data* pMetricsData;
|
| 409 |
+
} CUpti_SassMetricsFlushData_Params;
|
| 410 |
+
#define CUpti_SassMetricsFlushData_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_SassMetricsFlushData_Params, numOfInstances)
|
| 411 |
+
|
| 412 |
+
/**
|
| 413 |
+
* \brief Flush SASS metrics data from CUPTI internal buffer to the user buffer.
|
| 414 |
+
* User needs to allocate the buffer for retrieving the data. The number of records collected
|
| 415 |
+
* can be queried using the API cuptiSassMetricsGetDataProperties().
|
| 416 |
+
*
|
| 417 |
+
* \param pParams A pointer to \ref CUpti_SassMetricsFlushData_Params
|
| 418 |
+
*
|
| 419 |
+
* \retval CUPTI_SUCCESS
|
| 420 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if any \p pParams is not valid
|
| 421 |
+
* \retval CUPTI_ERROR_NOT_SUPPORTED indicates that the system/device doesn't support SASS metric data collection.
|
| 422 |
+
* \retval CUPTI_ERROR_INVALID_OPERATION if this API is called outside the enable/disable range.
|
| 423 |
+
*/
|
| 424 |
+
CUptiResult CUPTIAPI cuptiSassMetricsFlushData(CUpti_SassMetricsFlushData_Params* pParams);
|
| 425 |
+
|
| 426 |
+
/** @} */ /* END CUPTI_SASS_METRICS_API */
|
| 427 |
+
|
| 428 |
+
#if defined(__GNUC__) && defined(CUPTI_LIB)
|
| 429 |
+
#pragma GCC visibility pop
|
| 430 |
+
#endif
|
| 431 |
+
|
| 432 |
+
#ifdef __cplusplus
|
| 433 |
+
} /* extern "C" */
|
| 434 |
+
#endif
|
| 435 |
+
|
| 436 |
+
#endif // _CUPTI_SASS_METRICS_H_
|
.venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/cupti_target.h
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#if !defined(_CUPTI_TARGET_H_)
|
| 2 |
+
#define _CUPTI_TARGET_H_
|
| 3 |
+
|
| 4 |
+
/*
|
| 5 |
+
CUPTI profiler target API's
|
| 6 |
+
This file contains the CUPTI profiling API's.
|
| 7 |
+
*/
|
| 8 |
+
#include <cupti_result.h>
|
| 9 |
+
#include <stddef.h>
|
| 10 |
+
#include <stdint.h>
|
| 11 |
+
|
| 12 |
+
#ifdef __cplusplus
|
| 13 |
+
extern "C" {
|
| 14 |
+
#endif
|
| 15 |
+
|
| 16 |
+
#if defined(__GNUC__) && defined(CUPTI_LIB)
|
| 17 |
+
#pragma GCC visibility push(default)
|
| 18 |
+
#endif
|
| 19 |
+
|
| 20 |
+
#ifndef CUPTI_PROFILER_STRUCT_SIZE
|
| 21 |
+
#define CUPTI_PROFILER_STRUCT_SIZE(type_, lastfield_) (offsetof(type_, lastfield_) + sizeof(((type_*)0)->lastfield_))
|
| 22 |
+
#endif
|
| 23 |
+
|
| 24 |
+
typedef struct CUpti_Device_GetChipName_Params
|
| 25 |
+
{
|
| 26 |
+
size_t structSize; //!< [in]
|
| 27 |
+
void* pPriv; //!< [in] assign to NULL
|
| 28 |
+
|
| 29 |
+
size_t deviceIndex; //!< [in]
|
| 30 |
+
const char* pChipName; //!< [out]
|
| 31 |
+
} CUpti_Device_GetChipName_Params;
|
| 32 |
+
|
| 33 |
+
#define CUpti_Device_GetChipName_Params_STRUCT_SIZE CUPTI_PROFILER_STRUCT_SIZE(CUpti_Device_GetChipName_Params, pChipName)
|
| 34 |
+
CUptiResult CUPTIAPI cuptiDeviceGetChipName(CUpti_Device_GetChipName_Params *pParams);
|
| 35 |
+
|
| 36 |
+
#if defined(__GNUC__) && defined(CUPTI_LIB)
|
| 37 |
+
#pragma GCC visibility pop
|
| 38 |
+
#endif
|
| 39 |
+
|
| 40 |
+
#ifdef __cplusplus
|
| 41 |
+
} /* extern "C" */
|
| 42 |
+
#endif
|
| 43 |
+
#endif
|
.venv/lib/python3.11/site-packages/nvidia/cuda_cupti/include/cupti_version.h
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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_VERSION_H_)
|
| 51 |
+
#define _CUPTI_VERSION_H_
|
| 52 |
+
|
| 53 |
+
#include <cuda_stdint.h>
|
| 54 |
+
#include <cupti_result.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(__cplusplus)
|
| 65 |
+
extern "C" {
|
| 66 |
+
#endif
|
| 67 |
+
|
| 68 |
+
#if defined(__GNUC__) && defined(CUPTI_LIB)
|
| 69 |
+
#pragma GCC visibility push(default)
|
| 70 |
+
#endif
|
| 71 |
+
|
| 72 |
+
/**
|
| 73 |
+
* \defgroup CUPTI_VERSION_API CUPTI Version
|
| 74 |
+
* Function and macro to determine the CUPTI version.
|
| 75 |
+
* @{
|
| 76 |
+
*/
|
| 77 |
+
|
| 78 |
+
/**
|
| 79 |
+
* \brief The API version for this implementation of CUPTI.
|
| 80 |
+
*
|
| 81 |
+
* The API version for this implementation of CUPTI. This define along
|
| 82 |
+
* with \ref cuptiGetVersion can be used to dynamically detect if the
|
| 83 |
+
* version of CUPTI compiled against matches the version of the loaded
|
| 84 |
+
* CUPTI library.
|
| 85 |
+
*
|
| 86 |
+
* v1 : CUDAToolsSDK 4.0
|
| 87 |
+
* v2 : CUDAToolsSDK 4.1
|
| 88 |
+
* v3 : CUDA Toolkit 5.0
|
| 89 |
+
* v4 : CUDA Toolkit 5.5
|
| 90 |
+
* v5 : CUDA Toolkit 6.0
|
| 91 |
+
* v6 : CUDA Toolkit 6.5
|
| 92 |
+
* v7 : CUDA Toolkit 6.5(with sm_52 support)
|
| 93 |
+
* v8 : CUDA Toolkit 7.0
|
| 94 |
+
* v9 : CUDA Toolkit 8.0
|
| 95 |
+
* v10 : CUDA Toolkit 9.0
|
| 96 |
+
* v11 : CUDA Toolkit 9.1
|
| 97 |
+
* v12 : CUDA Toolkit 10.0, 10.1 and 10.2
|
| 98 |
+
* v13 : CUDA Toolkit 11.0
|
| 99 |
+
* v14 : CUDA Toolkit 11.1
|
| 100 |
+
* v15 : CUDA Toolkit 11.2, 11.3 and 11.4
|
| 101 |
+
* v16 : CUDA Toolkit 11.5
|
| 102 |
+
* v17 : CUDA Toolkit 11.6
|
| 103 |
+
* v18 : CUDA Toolkit 11.8
|
| 104 |
+
* v19 : CUDA Toolkit 12.0
|
| 105 |
+
* v20 : CUDA Toolkit 12.2
|
| 106 |
+
* v21 : CUDA Toolkit 12.3
|
| 107 |
+
* v22 : CUDA Toolkit 12.4
|
| 108 |
+
*/
|
| 109 |
+
#define CUPTI_API_VERSION 22
|
| 110 |
+
|
| 111 |
+
/**
|
| 112 |
+
* \brief Get the CUPTI API version.
|
| 113 |
+
*
|
| 114 |
+
* Return the API version in \p *version.
|
| 115 |
+
*
|
| 116 |
+
* \param version Returns the version
|
| 117 |
+
*
|
| 118 |
+
* \retval CUPTI_SUCCESS on success
|
| 119 |
+
* \retval CUPTI_ERROR_INVALID_PARAMETER if \p version is NULL
|
| 120 |
+
* \sa CUPTI_API_VERSION
|
| 121 |
+
*/
|
| 122 |
+
CUptiResult CUPTIAPI cuptiGetVersion(uint32_t *version);
|
| 123 |
+
|
| 124 |
+
/** @} */ /* END CUPTI_VERSION_API */
|
| 125 |
+
|
| 126 |
+
#if defined(__GNUC__) && defined(CUPTI_LIB)
|
| 127 |
+
#pragma GCC visibility pop
|
| 128 |
+
#endif
|
| 129 |
+
|
| 130 |
+
#if defined(__cplusplus)
|
| 131 |
+
}
|
| 132 |
+
#endif
|
| 133 |
+
|
| 134 |
+
#endif /*_CUPTI_VERSION_H_*/
|