| /* | |
| * Copyright 2010-2021 NVIDIA Corporation. All rights reserved. | |
| * | |
| * NOTICE TO LICENSEE: | |
| * | |
| * This source code and/or documentation ("Licensed Deliverables") are | |
| * subject to NVIDIA intellectual property rights under U.S. and | |
| * international Copyright laws. | |
| * | |
| * These Licensed Deliverables contained herein is PROPRIETARY and | |
| * CONFIDENTIAL to NVIDIA and is being provided under the terms and | |
| * conditions of a form of NVIDIA software license agreement by and | |
| * between NVIDIA and Licensee ("License Agreement") or electronically | |
| * accepted by Licensee. Notwithstanding any terms or conditions to | |
| * the contrary in the License Agreement, reproduction or disclosure | |
| * of the Licensed Deliverables to any third party without the express | |
| * written consent of NVIDIA is prohibited. | |
| * | |
| * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE | |
| * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE | |
| * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. IT IS | |
| * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. | |
| * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED | |
| * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, | |
| * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. | |
| * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE | |
| * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY | |
| * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY | |
| * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, | |
| * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS | |
| * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE | |
| * OF THESE LICENSED DELIVERABLES. | |
| * | |
| * U.S. Government End Users. These Licensed Deliverables are a | |
| * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT | |
| * 1995), consisting of "commercial computer software" and "commercial | |
| * computer software documentation" as such terms are used in 48 | |
| * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government | |
| * only as a commercial end item. Consistent with 48 C.F.R.12.212 and | |
| * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all | |
| * U.S. Government End Users acquire the Licensed Deliverables with | |
| * only those rights set forth herein. | |
| * | |
| * Any use of the Licensed Deliverables in individual and commercial | |
| * software must include, in the user documentation and internal | |
| * comments to the code, the above Disclaimer and U.S. Government End | |
| * Users Notice. | |
| */ | |
| extern "C" { | |
| /** | |
| * \defgroup CUPTI_RESULT_API CUPTI Result Codes | |
| * Error and result codes returned by CUPTI functions. | |
| * @{ | |
| */ | |
| /** | |
| * \brief CUPTI result codes. | |
| * | |
| * Error and result codes returned by CUPTI functions. | |
| */ | |
| typedef enum { | |
| /** | |
| * No error. | |
| */ | |
| CUPTI_SUCCESS = 0, | |
| /** | |
| * One or more of the parameters is invalid. | |
| */ | |
| CUPTI_ERROR_INVALID_PARAMETER = 1, | |
| /** | |
| * The device does not correspond to a valid CUDA device. | |
| */ | |
| CUPTI_ERROR_INVALID_DEVICE = 2, | |
| /** | |
| * The context is NULL or not valid. | |
| */ | |
| CUPTI_ERROR_INVALID_CONTEXT = 3, | |
| /** | |
| * The event domain id is invalid. | |
| */ | |
| CUPTI_ERROR_INVALID_EVENT_DOMAIN_ID = 4, | |
| /** | |
| * The event id is invalid. | |
| */ | |
| CUPTI_ERROR_INVALID_EVENT_ID = 5, | |
| /** | |
| * The event name is invalid. | |
| */ | |
| CUPTI_ERROR_INVALID_EVENT_NAME = 6, | |
| /** | |
| * The current operation cannot be performed due to dependency on | |
| * other factors. | |
| */ | |
| CUPTI_ERROR_INVALID_OPERATION = 7, | |
| /** | |
| * Unable to allocate enough memory to perform the requested | |
| * operation. | |
| */ | |
| CUPTI_ERROR_OUT_OF_MEMORY = 8, | |
| /** | |
| * An error occurred on the performance monitoring hardware. | |
| */ | |
| CUPTI_ERROR_HARDWARE = 9, | |
| /** | |
| * The output buffer size is not sufficient to return all | |
| * requested data. | |
| */ | |
| CUPTI_ERROR_PARAMETER_SIZE_NOT_SUFFICIENT = 10, | |
| /** | |
| * API is not implemented. | |
| */ | |
| CUPTI_ERROR_API_NOT_IMPLEMENTED = 11, | |
| /** | |
| * The maximum limit is reached. | |
| */ | |
| CUPTI_ERROR_MAX_LIMIT_REACHED = 12, | |
| /** | |
| * The object is not yet ready to perform the requested operation. | |
| */ | |
| CUPTI_ERROR_NOT_READY = 13, | |
| /** | |
| * The current operation is not compatible with the current state | |
| * of the object | |
| */ | |
| CUPTI_ERROR_NOT_COMPATIBLE = 14, | |
| /** | |
| * CUPTI is unable to initialize its connection to the CUDA | |
| * driver. | |
| */ | |
| CUPTI_ERROR_NOT_INITIALIZED = 15, | |
| /** | |
| * The metric id is invalid. | |
| */ | |
| CUPTI_ERROR_INVALID_METRIC_ID = 16, | |
| /** | |
| * The metric name is invalid. | |
| */ | |
| CUPTI_ERROR_INVALID_METRIC_NAME = 17, | |
| /** | |
| * The queue is empty. | |
| */ | |
| CUPTI_ERROR_QUEUE_EMPTY = 18, | |
| /** | |
| * Invalid handle (internal?). | |
| */ | |
| CUPTI_ERROR_INVALID_HANDLE = 19, | |
| /** | |
| * Invalid stream. | |
| */ | |
| CUPTI_ERROR_INVALID_STREAM = 20, | |
| /** | |
| * Invalid kind. | |
| */ | |
| CUPTI_ERROR_INVALID_KIND = 21, | |
| /** | |
| * Invalid event value. | |
| */ | |
| CUPTI_ERROR_INVALID_EVENT_VALUE = 22, | |
| /** | |
| * CUPTI is disabled due to conflicts with other enabled profilers | |
| */ | |
| CUPTI_ERROR_DISABLED = 23, | |
| /** | |
| * Invalid module. | |
| */ | |
| CUPTI_ERROR_INVALID_MODULE = 24, | |
| /** | |
| * Invalid metric value. | |
| */ | |
| CUPTI_ERROR_INVALID_METRIC_VALUE = 25, | |
| /** | |
| * The performance monitoring hardware is in use by other client. | |
| */ | |
| CUPTI_ERROR_HARDWARE_BUSY = 26, | |
| /** | |
| * The attempted operation is not supported on the current | |
| * system or device. | |
| */ | |
| CUPTI_ERROR_NOT_SUPPORTED = 27, | |
| /** | |
| * Unified memory profiling is not supported on the system. | |
| * Potential reason could be unsupported OS or architecture. | |
| */ | |
| CUPTI_ERROR_UM_PROFILING_NOT_SUPPORTED = 28, | |
| /** | |
| * Unified memory profiling is not supported on the device | |
| */ | |
| CUPTI_ERROR_UM_PROFILING_NOT_SUPPORTED_ON_DEVICE = 29, | |
| /** | |
| * Unified memory profiling is not supported on a multi-GPU | |
| * configuration without P2P support between any pair of devices | |
| */ | |
| CUPTI_ERROR_UM_PROFILING_NOT_SUPPORTED_ON_NON_P2P_DEVICES = 30, | |
| /** | |
| * Unified memory profiling is not supported under the | |
| * Multi-Process Service (MPS) environment. CUDA 7.5 removes this | |
| * restriction. | |
| */ | |
| CUPTI_ERROR_UM_PROFILING_NOT_SUPPORTED_WITH_MPS = 31, | |
| /** | |
| * In CUDA 9.0, devices with compute capability 7.0 don't | |
| * support CDP tracing | |
| */ | |
| CUPTI_ERROR_CDP_TRACING_NOT_SUPPORTED = 32, | |
| /** | |
| * Profiling on virtualized GPU is not supported. | |
| */ | |
| CUPTI_ERROR_VIRTUALIZED_DEVICE_NOT_SUPPORTED = 33, | |
| /** | |
| * Profiling results might be incorrect for CUDA applications | |
| * compiled with nvcc version older than 9.0 for devices with | |
| * compute capability 6.0 and 6.1. | |
| * Profiling session will continue and CUPTI will notify it using this error code. | |
| * User is advised to recompile the application code with nvcc version 9.0 or later. | |
| * Ignore this warning if code is already compiled with the recommended nvcc version. | |
| */ | |
| CUPTI_ERROR_CUDA_COMPILER_NOT_COMPATIBLE = 34, | |
| /** | |
| * User doesn't have sufficient privileges which are required to | |
| * start the profiling session. | |
| * One possible reason for this may be that the NVIDIA driver or your system | |
| * administrator may have restricted access to the NVIDIA GPU performance counters. | |
| * To learn how to resolve this issue and find more information, please visit | |
| * https://developer.nvidia.com/CUPTI_ERROR_INSUFFICIENT_PRIVILEGES | |
| */ | |
| CUPTI_ERROR_INSUFFICIENT_PRIVILEGES = 35, | |
| /** | |
| * Legacy CUPTI Profiling API i.e. event API from the header cupti_events.h and | |
| * metric API from the header cupti_metrics.h are not compatible with the | |
| * Profiling API in the header cupti_profiler_target.h and Perfworks metrics API | |
| * in the headers nvperf_host.h and nvperf_target.h. | |
| */ | |
| CUPTI_ERROR_OLD_PROFILER_API_INITIALIZED = 36, | |
| /** | |
| * Missing definition of the OpenACC API routine in the linked OpenACC library. | |
| * | |
| * One possible reason is that OpenACC library is linked statically in the | |
| * user application, which might not have the definition of all the OpenACC | |
| * API routines needed for the OpenACC profiling, as compiler might ignore | |
| * definitions for the functions not used in the application. This issue | |
| * can be mitigated by linking the OpenACC library dynamically. | |
| */ | |
| CUPTI_ERROR_OPENACC_UNDEFINED_ROUTINE = 37, | |
| /** | |
| * Legacy CUPTI Profiling API i.e. event API from the header cupti_events.h and | |
| * metric API from the header cupti_metrics.h are not supported on devices with | |
| * compute capability 7.5 and higher (i.e. Turing and later GPU architectures). | |
| * These API will be deprecated in a future CUDA release. These are replaced by | |
| * Profiling API in the header cupti_profiler_target.h and Perfworks metrics API | |
| * in the headers nvperf_host.h and nvperf_target.h. | |
| */ | |
| CUPTI_ERROR_LEGACY_PROFILER_NOT_SUPPORTED = 38, | |
| /** | |
| * CUPTI doesn't allow multiple callback subscribers. Only a single subscriber | |
| * can be registered at a time. | |
| * Same error code is used when application is launched using NVIDIA tools | |
| * like nvprof, Visual Profiler, Nsight Systems, Nsight Compute, cuda-gdb and | |
| * cuda-memcheck. | |
| */ | |
| CUPTI_ERROR_MULTIPLE_SUBSCRIBERS_NOT_SUPPORTED = 39, | |
| /** | |
| * Profiling on virtualized GPU is not allowed by hypervisor. | |
| */ | |
| CUPTI_ERROR_VIRTUALIZED_DEVICE_INSUFFICIENT_PRIVILEGES = 40, | |
| /** | |
| * Profiling and tracing are not allowed when confidential computing mode | |
| * is enabled. | |
| */ | |
| CUPTI_ERROR_CONFIDENTIAL_COMPUTING_NOT_SUPPORTED = 41, | |
| /** | |
| * CUPTI does not support NVIDIA Crypto Mining Processors (CMP). | |
| * For more information, please visit https://developer.nvidia.com/ERR_NVCMPGPU | |
| */ | |
| CUPTI_ERROR_CMP_DEVICE_NOT_SUPPORTED = 42, | |
| /** | |
| * An unknown internal error has occurred. | |
| */ | |
| CUPTI_ERROR_UNKNOWN = 999, | |
| CUPTI_ERROR_FORCE_INT = 0x7fffffff | |
| } CUptiResult; | |
| /** | |
| * \brief Get the descriptive string for a CUptiResult. | |
| * | |
| * Return the descriptive string for a CUptiResult in \p *str. | |
| * \note \b Thread-safety: this function is thread safe. | |
| * | |
| * \param result The result to get the string for | |
| * \param str Returns the string | |
| * | |
| * \retval CUPTI_SUCCESS on success | |
| * \retval CUPTI_ERROR_INVALID_PARAMETER if \p str is NULL or \p | |
| * result is not a valid CUptiResult | |
| */ | |
| CUptiResult CUPTIAPI cuptiGetResultString(CUptiResult result, const char **str); | |
| /** @} */ /* END CUPTI_RESULT_API */ | |
| } | |