| /* | |
| * Copyright 2010-2020 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_CALLBACK_API CUPTI Callback API | |
| * Functions, types, and enums that implement the CUPTI Callback API. | |
| * @{ | |
| */ | |
| /** | |
| * \brief Specifies the point in an API call that a callback is issued. | |
| * | |
| * Specifies the point in an API call that a callback is issued. This | |
| * value is communicated to the callback function via \ref | |
| * CUpti_CallbackData::callbackSite. | |
| */ | |
| typedef enum { | |
| /** | |
| * The callback is at the entry of the API call. | |
| */ | |
| CUPTI_API_ENTER = 0, | |
| /** | |
| * The callback is at the exit of the API call. | |
| */ | |
| CUPTI_API_EXIT = 1, | |
| CUPTI_API_CBSITE_FORCE_INT = 0x7fffffff | |
| } CUpti_ApiCallbackSite; | |
| /** | |
| * \brief Callback domains. | |
| * | |
| * Callback domains. Each domain represents callback points for a | |
| * group of related API functions or CUDA driver activity. | |
| */ | |
| typedef enum { | |
| /** | |
| * Invalid domain. | |
| */ | |
| CUPTI_CB_DOMAIN_INVALID = 0, | |
| /** | |
| * Domain containing callback points for all driver API functions. | |
| */ | |
| CUPTI_CB_DOMAIN_DRIVER_API = 1, | |
| /** | |
| * Domain containing callback points for all runtime API | |
| * functions. | |
| */ | |
| CUPTI_CB_DOMAIN_RUNTIME_API = 2, | |
| /** | |
| * Domain containing callback points for CUDA resource tracking. | |
| */ | |
| CUPTI_CB_DOMAIN_RESOURCE = 3, | |
| /** | |
| * Domain containing callback points for CUDA synchronization. | |
| */ | |
| CUPTI_CB_DOMAIN_SYNCHRONIZE = 4, | |
| /** | |
| * Domain containing callback points for NVTX API functions. | |
| */ | |
| CUPTI_CB_DOMAIN_NVTX = 5, | |
| CUPTI_CB_DOMAIN_SIZE = 6, | |
| CUPTI_CB_DOMAIN_FORCE_INT = 0x7fffffff | |
| } CUpti_CallbackDomain; | |
| /** | |
| * \brief Callback IDs for resource domain. | |
| * | |
| * Callback IDs for resource domain, CUPTI_CB_DOMAIN_RESOURCE. This | |
| * value is communicated to the callback function via the \p cbid | |
| * parameter. | |
| */ | |
| typedef enum { | |
| /** | |
| * Invalid resource callback ID. | |
| */ | |
| CUPTI_CBID_RESOURCE_INVALID = 0, | |
| /** | |
| * A new context has been created. | |
| */ | |
| CUPTI_CBID_RESOURCE_CONTEXT_CREATED = 1, | |
| /** | |
| * A context is about to be destroyed. | |
| */ | |
| CUPTI_CBID_RESOURCE_CONTEXT_DESTROY_STARTING = 2, | |
| /** | |
| * A new stream has been created. | |
| */ | |
| CUPTI_CBID_RESOURCE_STREAM_CREATED = 3, | |
| /** | |
| * A stream is about to be destroyed. | |
| */ | |
| CUPTI_CBID_RESOURCE_STREAM_DESTROY_STARTING = 4, | |
| /** | |
| * The driver has finished initializing. | |
| */ | |
| CUPTI_CBID_RESOURCE_CU_INIT_FINISHED = 5, | |
| /** | |
| * A module has been loaded. | |
| */ | |
| CUPTI_CBID_RESOURCE_MODULE_LOADED = 6, | |
| /** | |
| * A module is about to be unloaded. | |
| */ | |
| CUPTI_CBID_RESOURCE_MODULE_UNLOAD_STARTING = 7, | |
| /** | |
| * The current module which is being profiled. | |
| */ | |
| CUPTI_CBID_RESOURCE_MODULE_PROFILED = 8, | |
| /** | |
| * CUDA graph has been created. | |
| */ | |
| CUPTI_CBID_RESOURCE_GRAPH_CREATED = 9, | |
| /** | |
| * CUDA graph is about to be destroyed. | |
| */ | |
| CUPTI_CBID_RESOURCE_GRAPH_DESTROY_STARTING = 10, | |
| /** | |
| * CUDA graph is cloned. | |
| */ | |
| CUPTI_CBID_RESOURCE_GRAPH_CLONED = 11, | |
| /** | |
| * CUDA graph node is about to be created | |
| */ | |
| CUPTI_CBID_RESOURCE_GRAPHNODE_CREATE_STARTING = 12, | |
| /** | |
| * CUDA graph node is created. | |
| */ | |
| CUPTI_CBID_RESOURCE_GRAPHNODE_CREATED = 13, | |
| /** | |
| * CUDA graph node is about to be destroyed. | |
| */ | |
| CUPTI_CBID_RESOURCE_GRAPHNODE_DESTROY_STARTING = 14, | |
| /** | |
| * Dependency on a CUDA graph node is created. | |
| */ | |
| CUPTI_CBID_RESOURCE_GRAPHNODE_DEPENDENCY_CREATED = 15, | |
| /** | |
| * Dependency on a CUDA graph node is destroyed. | |
| */ | |
| CUPTI_CBID_RESOURCE_GRAPHNODE_DEPENDENCY_DESTROY_STARTING = 16, | |
| /** | |
| * An executable CUDA graph is about to be created. | |
| */ | |
| CUPTI_CBID_RESOURCE_GRAPHEXEC_CREATE_STARTING = 17, | |
| /** | |
| * An executable CUDA graph is created. | |
| */ | |
| CUPTI_CBID_RESOURCE_GRAPHEXEC_CREATED = 18, | |
| /** | |
| * An executable CUDA graph is about to be destroyed. | |
| */ | |
| CUPTI_CBID_RESOURCE_GRAPHEXEC_DESTROY_STARTING = 19, | |
| /** | |
| * CUDA graph node is cloned. | |
| */ | |
| CUPTI_CBID_RESOURCE_GRAPHNODE_CLONED = 20, | |
| CUPTI_CBID_RESOURCE_SIZE, | |
| CUPTI_CBID_RESOURCE_FORCE_INT = 0x7fffffff | |
| } CUpti_CallbackIdResource; | |
| /** | |
| * \brief Callback IDs for synchronization domain. | |
| * | |
| * Callback IDs for synchronization domain, | |
| * CUPTI_CB_DOMAIN_SYNCHRONIZE. This value is communicated to the | |
| * callback function via the \p cbid parameter. | |
| */ | |
| typedef enum { | |
| /** | |
| * Invalid synchronize callback ID. | |
| */ | |
| CUPTI_CBID_SYNCHRONIZE_INVALID = 0, | |
| /** | |
| * Stream synchronization has completed for the stream. | |
| */ | |
| CUPTI_CBID_SYNCHRONIZE_STREAM_SYNCHRONIZED = 1, | |
| /** | |
| * Context synchronization has completed for the context. | |
| */ | |
| CUPTI_CBID_SYNCHRONIZE_CONTEXT_SYNCHRONIZED = 2, | |
| CUPTI_CBID_SYNCHRONIZE_SIZE, | |
| CUPTI_CBID_SYNCHRONIZE_FORCE_INT = 0x7fffffff | |
| } CUpti_CallbackIdSync; | |
| /** | |
| * \brief Data passed into a runtime or driver API callback function. | |
| * | |
| * Data passed into a runtime or driver API callback function as the | |
| * \p cbdata argument to \ref CUpti_CallbackFunc. The \p cbdata will | |
| * be this type for \p domain equal to CUPTI_CB_DOMAIN_DRIVER_API or | |
| * CUPTI_CB_DOMAIN_RUNTIME_API. The callback data is valid only within | |
| * the invocation of the callback function that is passed the data. If | |
| * you need to retain some data for use outside of the callback, you | |
| * must make a copy of that data. For example, if you make a shallow | |
| * copy of CUpti_CallbackData within a callback, you cannot | |
| * dereference \p functionParams outside of that callback to access | |
| * the function parameters. \p functionName is an exception: the | |
| * string pointed to by \p functionName is a global constant and so | |
| * may be accessed outside of the callback. | |
| */ | |
| typedef struct { | |
| /** | |
| * Point in the runtime or driver function from where the callback | |
| * was issued. | |
| */ | |
| CUpti_ApiCallbackSite callbackSite; | |
| /** | |
| * Name of the runtime or driver API function which issued the | |
| * callback. This string is a global constant and so may be | |
| * accessed outside of the callback. | |
| */ | |
| const char *functionName; | |
| /** | |
| * Pointer to the arguments passed to the runtime or driver API | |
| * call. See generated_cuda_runtime_api_meta.h and | |
| * generated_cuda_meta.h for structure definitions for the | |
| * parameters for each runtime and driver API function. | |
| */ | |
| const void *functionParams; | |
| /** | |
| * Pointer to the return value of the runtime or driver API | |
| * call. This field is only valid within the exit::CUPTI_API_EXIT | |
| * callback. For a runtime API \p functionReturnValue points to a | |
| * \p cudaError_t. For a driver API \p functionReturnValue points | |
| * to a \p CUresult. | |
| */ | |
| void *functionReturnValue; | |
| /** | |
| * Name of the symbol operated on by the runtime or driver API | |
| * function which issued the callback. This entry is valid only for | |
| * driver and runtime launch callbacks, where it returns the name of | |
| * the kernel. | |
| */ | |
| const char *symbolName; | |
| /** | |
| * Driver context current to the thread, or null if no context is | |
| * current. This value can change from the entry to exit callback | |
| * of a runtime API function if the runtime initializes a context. | |
| */ | |
| CUcontext context; | |
| /** | |
| * Unique ID for the CUDA context associated with the thread. The | |
| * UIDs are assigned sequentially as contexts are created and are | |
| * unique within a process. | |
| */ | |
| uint32_t contextUid; | |
| /** | |
| * Pointer to data shared between the entry and exit callbacks of | |
| * a given runtime or drive API function invocation. This field | |
| * can be used to pass 64-bit values from the entry callback to | |
| * the corresponding exit callback. | |
| */ | |
| uint64_t *correlationData; | |
| /** | |
| * The activity record correlation ID for this callback. For a | |
| * driver domain callback (i.e. \p domain | |
| * CUPTI_CB_DOMAIN_DRIVER_API) this ID will equal the correlation ID | |
| * in the CUpti_ActivityAPI record corresponding to the CUDA driver | |
| * function call. For a runtime domain callback (i.e. \p domain | |
| * CUPTI_CB_DOMAIN_RUNTIME_API) this ID will equal the correlation | |
| * ID in the CUpti_ActivityAPI record corresponding to the CUDA | |
| * runtime function call. Within the callback, this ID can be | |
| * recorded to correlate user data with the activity record. This | |
| * field is new in 4.1. | |
| */ | |
| uint32_t correlationId; | |
| } CUpti_CallbackData; | |
| /** | |
| * \brief Data passed into a resource callback function. | |
| * | |
| * Data passed into a resource callback function as the \p cbdata | |
| * argument to \ref CUpti_CallbackFunc. The \p cbdata will be this | |
| * type for \p domain equal to CUPTI_CB_DOMAIN_RESOURCE. The callback | |
| * data is valid only within the invocation of the callback function | |
| * that is passed the data. If you need to retain some data for use | |
| * outside of the callback, you must make a copy of that data. | |
| */ | |
| typedef struct { | |
| /** | |
| * For CUPTI_CBID_RESOURCE_CONTEXT_CREATED and | |
| * CUPTI_CBID_RESOURCE_CONTEXT_DESTROY_STARTING, the context being | |
| * created or destroyed. For CUPTI_CBID_RESOURCE_STREAM_CREATED and | |
| * CUPTI_CBID_RESOURCE_STREAM_DESTROY_STARTING, the context | |
| * containing the stream being created or destroyed. | |
| */ | |
| CUcontext context; | |
| union { | |
| /** | |
| * For CUPTI_CBID_RESOURCE_STREAM_CREATED and | |
| * CUPTI_CBID_RESOURCE_STREAM_DESTROY_STARTING, the stream being | |
| * created or destroyed. | |
| */ | |
| CUstream stream; | |
| } resourceHandle; | |
| /** | |
| * Reserved for future use. | |
| */ | |
| void *resourceDescriptor; | |
| } CUpti_ResourceData; | |
| /** | |
| * \brief Module data passed into a resource callback function. | |
| * | |
| * CUDA module data passed into a resource callback function as the \p cbdata | |
| * argument to \ref CUpti_CallbackFunc. The \p cbdata will be this | |
| * type for \p domain equal to CUPTI_CB_DOMAIN_RESOURCE. The module | |
| * data is valid only within the invocation of the callback function | |
| * that is passed the data. If you need to retain some data for use | |
| * outside of the callback, you must make a copy of that data. | |
| */ | |
| typedef struct { | |
| /** | |
| * Identifier to associate with the CUDA module. | |
| */ | |
| uint32_t moduleId; | |
| /** | |
| * The size of the cubin. | |
| */ | |
| size_t cubinSize; | |
| /** | |
| * Pointer to the associated cubin. | |
| */ | |
| const char *pCubin; | |
| } CUpti_ModuleResourceData; | |
| /** | |
| * \brief CUDA graphs data passed into a resource callback function. | |
| * | |
| * CUDA graphs data passed into a resource callback function as the \p cbdata | |
| * argument to \ref CUpti_CallbackFunc. The \p cbdata will be this | |
| * type for \p domain equal to CUPTI_CB_DOMAIN_RESOURCE. The graph | |
| * data is valid only within the invocation of the callback function | |
| * that is passed the data. If you need to retain some data for use | |
| * outside of the callback, you must make a copy of that data. | |
| */ | |
| typedef struct { | |
| /** | |
| * CUDA graph | |
| */ | |
| CUgraph graph; | |
| /** | |
| * The original CUDA graph from which \param graph is cloned | |
| */ | |
| CUgraph originalGraph; | |
| /** | |
| * CUDA graph node | |
| */ | |
| CUgraphNode node; | |
| /** | |
| * The original CUDA graph node from which \param node is cloned | |
| */ | |
| CUgraphNode originalNode; | |
| /** | |
| * Type of the \param node | |
| */ | |
| CUgraphNodeType nodeType; | |
| /** | |
| * The dependent graph node | |
| * The size of the array is \param numDependencies. | |
| */ | |
| CUgraphNode dependency; | |
| /** | |
| * CUDA executable graph | |
| */ | |
| CUgraphExec graphExec; | |
| } CUpti_GraphData; | |
| /** | |
| * \brief Data passed into a synchronize callback function. | |
| * | |
| * Data passed into a synchronize callback function as the \p cbdata | |
| * argument to \ref CUpti_CallbackFunc. The \p cbdata will be this | |
| * type for \p domain equal to CUPTI_CB_DOMAIN_SYNCHRONIZE. The | |
| * callback data is valid only within the invocation of the callback | |
| * function that is passed the data. If you need to retain some data | |
| * for use outside of the callback, you must make a copy of that data. | |
| */ | |
| typedef struct { | |
| /** | |
| * The context of the stream being synchronized. | |
| */ | |
| CUcontext context; | |
| /** | |
| * The stream being synchronized. | |
| */ | |
| CUstream stream; | |
| } CUpti_SynchronizeData; | |
| /** | |
| * \brief Data passed into a NVTX callback function. | |
| * | |
| * Data passed into a NVTX callback function as the \p cbdata argument | |
| * to \ref CUpti_CallbackFunc. The \p cbdata will be this type for \p | |
| * domain equal to CUPTI_CB_DOMAIN_NVTX. Unless otherwise notes, the | |
| * callback data is valid only within the invocation of the callback | |
| * function that is passed the data. If you need to retain some data | |
| * for use outside of the callback, you must make a copy of that data. | |
| */ | |
| typedef struct { | |
| /** | |
| * Name of the NVTX API function which issued the callback. This | |
| * string is a global constant and so may be accessed outside of the | |
| * callback. | |
| */ | |
| const char *functionName; | |
| /** | |
| * Pointer to the arguments passed to the NVTX API call. See | |
| * generated_nvtx_meta.h for structure definitions for the | |
| * parameters for each NVTX API function. | |
| */ | |
| const void *functionParams; | |
| /** | |
| * Pointer to the return value of the NVTX API call. See | |
| * nvToolsExt.h for each NVTX API function's return value. | |
| */ | |
| const void *functionReturnValue; | |
| } CUpti_NvtxData; | |
| /** | |
| * \brief An ID for a driver API, runtime API, resource or | |
| * synchronization callback. | |
| * | |
| * An ID for a driver API, runtime API, resource or synchronization | |
| * callback. Within a driver API callback this should be interpreted | |
| * as a CUpti_driver_api_trace_cbid value (these values are defined in | |
| * cupti_driver_cbid.h). Within a runtime API callback this should be | |
| * interpreted as a CUpti_runtime_api_trace_cbid value (these values | |
| * are defined in cupti_runtime_cbid.h). Within a resource API | |
| * callback this should be interpreted as a \ref | |
| * CUpti_CallbackIdResource value. Within a synchronize API callback | |
| * this should be interpreted as a \ref CUpti_CallbackIdSync value. | |
| */ | |
| typedef uint32_t CUpti_CallbackId; | |
| /** | |
| * \brief Function type for a callback. | |
| * | |
| * Function type for a callback. The type of the data passed to the | |
| * callback in \p cbdata depends on the \p domain. If \p domain is | |
| * CUPTI_CB_DOMAIN_DRIVER_API or CUPTI_CB_DOMAIN_RUNTIME_API the type | |
| * of \p cbdata will be CUpti_CallbackData. If \p domain is | |
| * CUPTI_CB_DOMAIN_RESOURCE the type of \p cbdata will be | |
| * CUpti_ResourceData. If \p domain is CUPTI_CB_DOMAIN_SYNCHRONIZE the | |
| * type of \p cbdata will be CUpti_SynchronizeData. If \p domain is | |
| * CUPTI_CB_DOMAIN_NVTX the type of \p cbdata will be CUpti_NvtxData. | |
| * | |
| * \param userdata User data supplied at subscription of the callback | |
| * \param domain The domain of the callback | |
| * \param cbid The ID of the callback | |
| * \param cbdata Data passed to the callback. | |
| */ | |
| typedef void (CUPTIAPI *CUpti_CallbackFunc)( | |
| void *userdata, | |
| CUpti_CallbackDomain domain, | |
| CUpti_CallbackId cbid, | |
| const void *cbdata); | |
| /** | |
| * \brief A callback subscriber. | |
| */ | |
| typedef struct CUpti_Subscriber_st *CUpti_SubscriberHandle; | |
| /** | |
| * \brief Pointer to an array of callback domains. | |
| */ | |
| typedef CUpti_CallbackDomain *CUpti_DomainTable; | |
| /** | |
| * \brief Get the available callback domains. | |
| * | |
| * Returns in \p *domainTable an array of size \p *domainCount of all | |
| * the available callback domains. | |
| * \note \b Thread-safety: this function is thread safe. | |
| * | |
| * \param domainCount Returns number of callback domains | |
| * \param domainTable Returns pointer to array of available callback domains | |
| * | |
| * \retval CUPTI_SUCCESS on success | |
| * \retval CUPTI_ERROR_NOT_INITIALIZED if unable to initialize CUPTI | |
| * \retval CUPTI_ERROR_INVALID_PARAMETER if \p domainCount or \p domainTable are NULL | |
| */ | |
| CUptiResult CUPTIAPI cuptiSupportedDomains(size_t *domainCount, | |
| CUpti_DomainTable *domainTable); | |
| /** | |
| * \brief Initialize a callback subscriber with a callback function | |
| * and user data. | |
| * | |
| * Initializes a callback subscriber with a callback function and | |
| * (optionally) a pointer to user data. The returned subscriber handle | |
| * can be used to enable and disable the callback for specific domains | |
| * and callback IDs. | |
| * \note Only a single subscriber can be registered at a time. To ensure | |
| * that no other CUPTI client interrupts the profiling session, it's the | |
| * responsibility of all the CUPTI clients to call this function before | |
| * starting the profling session. In case profiling session is already | |
| * started by another CUPTI client, this function returns the error code | |
| * CUPTI_ERROR_MULTIPLE_SUBSCRIBERS_NOT_SUPPORTED. | |
| * Note that this function returns the same error when application is | |
| * launched using NVIDIA tools like nvprof, Visual Profiler, Nsight Systems, | |
| * Nsight Compute, cuda-gdb and cuda-memcheck. | |
| * \note This function does not enable any callbacks. | |
| * \note \b Thread-safety: this function is thread safe. | |
| * | |
| * \param subscriber Returns handle to initialize subscriber | |
| * \param callback The callback function | |
| * \param userdata A pointer to user data. This data will be passed to | |
| * the callback function via the \p userdata paramater. | |
| * | |
| * \retval CUPTI_SUCCESS on success | |
| * \retval CUPTI_ERROR_NOT_INITIALIZED if unable to initialize CUPTI | |
| * \retval CUPTI_ERROR_MULTIPLE_SUBSCRIBERS_NOT_SUPPORTED if there is already a CUPTI subscriber | |
| * \retval CUPTI_ERROR_INVALID_PARAMETER if \p subscriber is NULL | |
| */ | |
| CUptiResult CUPTIAPI cuptiSubscribe(CUpti_SubscriberHandle *subscriber, | |
| CUpti_CallbackFunc callback, | |
| void *userdata); | |
| /** | |
| * \brief Unregister a callback subscriber. | |
| * | |
| * Removes a callback subscriber so that no future callbacks will be | |
| * issued to that subscriber. | |
| * \note \b Thread-safety: this function is thread safe. | |
| * | |
| * \param subscriber Handle to the initialize subscriber | |
| * | |
| * \retval CUPTI_SUCCESS on success | |
| * \retval CUPTI_ERROR_NOT_INITIALIZED if unable to initialized CUPTI | |
| * \retval CUPTI_ERROR_INVALID_PARAMETER if \p subscriber is NULL or not initialized | |
| */ | |
| CUptiResult CUPTIAPI cuptiUnsubscribe(CUpti_SubscriberHandle subscriber); | |
| /** | |
| * \brief Get the current enabled/disabled state of a callback for a specific | |
| * domain and function ID. | |
| * | |
| * Returns non-zero in \p *enable if the callback for a domain and | |
| * callback ID is enabled, and zero if not enabled. | |
| * | |
| * \note \b Thread-safety: a subscriber must serialize access to | |
| * cuptiGetCallbackState, cuptiEnableCallback, cuptiEnableDomain, and | |
| * cuptiEnableAllDomains. For example, if cuptiGetCallbackState(sub, | |
| * d, c) and cuptiEnableCallback(sub, d, c) are called concurrently, | |
| * the results are undefined. | |
| * | |
| * \param enable Returns non-zero if callback enabled, zero if not enabled | |
| * \param subscriber Handle to the initialize subscriber | |
| * \param domain The domain of the callback | |
| * \param cbid The ID of the callback | |
| * | |
| * \retval CUPTI_SUCCESS on success | |
| * \retval CUPTI_ERROR_NOT_INITIALIZED if unable to initialized CUPTI | |
| * \retval CUPTI_ERROR_INVALID_PARAMETER if \p enabled is NULL, or if \p | |
| * subscriber, \p domain or \p cbid is invalid. | |
| */ | |
| CUptiResult CUPTIAPI cuptiGetCallbackState(uint32_t *enable, | |
| CUpti_SubscriberHandle subscriber, | |
| CUpti_CallbackDomain domain, | |
| CUpti_CallbackId cbid); | |
| /** | |
| * \brief Enable or disabled callbacks for a specific domain and | |
| * callback ID. | |
| * | |
| * Enable or disabled callbacks for a subscriber for a specific domain | |
| * and callback ID. | |
| * | |
| * \note \b Thread-safety: a subscriber must serialize access to | |
| * cuptiGetCallbackState, cuptiEnableCallback, cuptiEnableDomain, and | |
| * cuptiEnableAllDomains. For example, if cuptiGetCallbackState(sub, | |
| * d, c) and cuptiEnableCallback(sub, d, c) are called concurrently, | |
| * the results are undefined. | |
| * | |
| * \param enable New enable state for the callback. Zero disables the | |
| * callback, non-zero enables the callback. | |
| * \param subscriber - Handle to callback subscription | |
| * \param domain The domain of the callback | |
| * \param cbid The ID of the callback | |
| * | |
| * \retval CUPTI_SUCCESS on success | |
| * \retval CUPTI_ERROR_NOT_INITIALIZED if unable to initialized CUPTI | |
| * \retval CUPTI_ERROR_INVALID_PARAMETER if \p subscriber, \p domain or \p | |
| * cbid is invalid. | |
| */ | |
| CUptiResult CUPTIAPI cuptiEnableCallback(uint32_t enable, | |
| CUpti_SubscriberHandle subscriber, | |
| CUpti_CallbackDomain domain, | |
| CUpti_CallbackId cbid); | |
| /** | |
| * \brief Enable or disabled all callbacks for a specific domain. | |
| * | |
| * Enable or disabled all callbacks for a specific domain. | |
| * | |
| * \note \b Thread-safety: a subscriber must serialize access to | |
| * cuptiGetCallbackState, cuptiEnableCallback, cuptiEnableDomain, and | |
| * cuptiEnableAllDomains. For example, if cuptiGetCallbackEnabled(sub, | |
| * d, *) and cuptiEnableDomain(sub, d) are called concurrently, the | |
| * results are undefined. | |
| * | |
| * \param enable New enable state for all callbacks in the | |
| * domain. Zero disables all callbacks, non-zero enables all | |
| * callbacks. | |
| * \param subscriber - Handle to callback subscription | |
| * \param domain The domain of the callback | |
| * | |
| * \retval CUPTI_SUCCESS on success | |
| * \retval CUPTI_ERROR_NOT_INITIALIZED if unable to initialized CUPTI | |
| * \retval CUPTI_ERROR_INVALID_PARAMETER if \p subscriber or \p domain is invalid | |
| */ | |
| CUptiResult CUPTIAPI cuptiEnableDomain(uint32_t enable, | |
| CUpti_SubscriberHandle subscriber, | |
| CUpti_CallbackDomain domain); | |
| /** | |
| * \brief Enable or disable all callbacks in all domains. | |
| * | |
| * Enable or disable all callbacks in all domains. | |
| * | |
| * \note \b Thread-safety: a subscriber must serialize access to | |
| * cuptiGetCallbackState, cuptiEnableCallback, cuptiEnableDomain, and | |
| * cuptiEnableAllDomains. For example, if cuptiGetCallbackState(sub, | |
| * d, *) and cuptiEnableAllDomains(sub) are called concurrently, the | |
| * results are undefined. | |
| * | |
| * \param enable New enable state for all callbacks in all | |
| * domain. Zero disables all callbacks, non-zero enables all | |
| * callbacks. | |
| * \param subscriber - Handle to callback subscription | |
| * | |
| * \retval CUPTI_SUCCESS on success | |
| * \retval CUPTI_ERROR_NOT_INITIALIZED if unable to initialized CUPTI | |
| * \retval CUPTI_ERROR_INVALID_PARAMETER if \p subscriber is invalid | |
| */ | |
| CUptiResult CUPTIAPI cuptiEnableAllDomains(uint32_t enable, | |
| CUpti_SubscriberHandle subscriber); | |
| /** | |
| * \brief Get the name of a callback for a specific domain and callback ID. | |
| * | |
| * Returns a pointer to the name c_string in \p **name. | |
| * | |
| * \note \b Names are available only for the DRIVER and RUNTIME domains. | |
| * | |
| * \param domain The domain of the callback | |
| * \param cbid The ID of the callback | |
| * \param name Returns pointer to the name string on success, NULL otherwise | |
| * | |
| * \retval CUPTI_SUCCESS on success | |
| * \retval CUPTI_ERROR_INVALID_PARAMETER if \p name is NULL, or if | |
| * \p domain or \p cbid is invalid. | |
| */ | |
| CUptiResult CUPTIAPI cuptiGetCallbackName(CUpti_CallbackDomain domain, | |
| uint32_t cbid, | |
| const char **name); | |
| /** @} */ /* END CUPTI_CALLBACK_API */ | |
| } | |