2022-11-29 04:27:46 -08:00
|
|
|
|
/*
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* Copyright 2021-2024 NVIDIA Corporation. All rights reserved.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*
|
|
|
|
|
|
* Licensed under the Apache License v2.0 with LLVM Exceptions.
|
|
|
|
|
|
* See https://llvm.org/LICENSE.txt for license information.
|
|
|
|
|
|
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
2023-02-27 02:48:21 -08:00
|
|
|
|
#include "nvToolsExt.h"
|
2022-11-29 04:27:46 -08:00
|
|
|
|
|
2024-06-11 01:28:01 -07:00
|
|
|
|
/* Optionally include helper macros. */
|
|
|
|
|
|
/* #include "nvToolsExtPayloadHelper.h" */
|
2022-11-29 04:27:46 -08:00
|
|
|
|
|
2024-06-11 01:28:01 -07:00
|
|
|
|
/**
|
|
|
|
|
|
* If needed, semantic extension headers can be included after this header.
|
|
|
|
|
|
*/
|
2022-11-29 04:27:46 -08:00
|
|
|
|
|
|
|
|
|
|
/**
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* \brief The compatibility ID is used for versioning of this extension.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
2024-06-11 01:28:01 -07:00
|
|
|
|
#ifndef NVTX_EXT_PAYLOAD_COMPATID
|
|
|
|
|
|
#define NVTX_EXT_PAYLOAD_COMPATID 0x0103
|
|
|
|
|
|
#endif
|
2022-11-29 04:27:46 -08:00
|
|
|
|
|
|
|
|
|
|
/**
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* \brief The module ID identifies the payload extension. It has to be unique
|
2022-11-29 04:27:46 -08:00
|
|
|
|
* among the extension modules.
|
|
|
|
|
|
*/
|
2024-06-11 01:28:01 -07:00
|
|
|
|
#ifndef NVTX_EXT_PAYLOAD_MODULEID
|
|
|
|
|
|
#define NVTX_EXT_PAYLOAD_MODULEID 2
|
|
|
|
|
|
#endif
|
2022-11-29 04:27:46 -08:00
|
|
|
|
|
|
|
|
|
|
/**
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* \brief Additional value for the enum @ref nvtxPayloadType_t
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
2024-06-11 01:28:01 -07:00
|
|
|
|
#ifndef NVTX_PAYLOAD_TYPE_EXT
|
|
|
|
|
|
#define NVTX_PAYLOAD_TYPE_EXT ((int32_t)0xDFBD0009)
|
|
|
|
|
|
#endif
|
2022-11-29 04:27:46 -08:00
|
|
|
|
|
|
|
|
|
|
/** ---------------------------------------------------------------------------
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* Payload schema entry flags. Used for @ref nvtxPayloadSchemaEntry_t::flags.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
* ------------------------------------------------------------------------- */
|
2024-06-11 01:28:01 -07:00
|
|
|
|
#ifndef NVTX_PAYLOAD_ENTRY_FLAGS_V1
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_FLAGS_V1
|
|
|
|
|
|
|
2022-11-29 04:27:46 -08:00
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_FLAG_UNUSED 0
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Absolute pointer into a payload (entry) of the same event.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_FLAG_POINTER (1 << 1)
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Offset from base address of the payload.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_FLAG_OFFSET_FROM_BASE (1 << 2)
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Offset from the end of this payload entry.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_FLAG_OFFSET_FROM_HERE (1 << 3)
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* The value is an array with fixed length, set with the field `arrayLength`.
|
|
|
|
|
|
*/
|
2024-06-11 01:28:01 -07:00
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_FIXED_SIZE (1 << 4)
|
2022-11-29 04:27:46 -08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* The value is a zero-/null-terminated array.
|
|
|
|
|
|
*/
|
2024-06-11 01:28:01 -07:00
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_ZERO_TERMINATED (2 << 4)
|
2022-11-29 04:27:46 -08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* \brief A single or multi-dimensional array of variable length.
|
|
|
|
|
|
*
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* The field `arrayOrUnionDetail` contains the index of the schema entry that
|
|
|
|
|
|
* holds the length(s). If the length entry is a scalar, then this entry is a 1D
|
|
|
|
|
|
* array. If the length entry is a fixed-size array, then the number of
|
|
|
|
|
|
* dimensions is defined with the registration of the schema. If the length
|
|
|
|
|
|
* entry is a zero-terminated array, then the array of the dimensions can be
|
|
|
|
|
|
* determined at runtime.
|
|
|
|
|
|
* For multidimensional arrays, values are stored in row-major order, with rows
|
|
|
|
|
|
* being stored consecutively in contiguous memory. The size of the entry (in
|
|
|
|
|
|
* bytes) is the product of the dimensions multiplied with size of the array
|
|
|
|
|
|
* element.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
2024-06-11 01:28:01 -07:00
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_LENGTH_INDEX (3 << 4)
|
2022-11-29 04:27:46 -08:00
|
|
|
|
|
|
|
|
|
|
/**
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* \brief A single or multi-dimensional array of variable length, where the
|
|
|
|
|
|
* dimensions are stored in a different payload (index) of the same event.
|
|
|
|
|
|
*
|
|
|
|
|
|
* This enables an existing address to an array to be directly passed, while the
|
|
|
|
|
|
* dimensions are defined in a separate payload (with only one payload entry).
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_LENGTH_PAYLOAD_INDEX (4 << 4)
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* \brief The value or data that is pointed to by this payload entry value shall
|
|
|
|
|
|
* be copied by the NVTX handler.
|
|
|
|
|
|
*
|
2022-11-29 04:27:46 -08:00
|
|
|
|
* A tool may not support deep copy and just ignore this flag.
|
|
|
|
|
|
* See @ref NVTX_PAYLOAD_SCHEMA_FLAG_DEEP_COPY for more details.
|
|
|
|
|
|
*/
|
2024-06-11 01:28:01 -07:00
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_FLAG_DEEP_COPY (1 << 8)
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Notifies the NVTX handler to hide this entry in case of visualization.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_FLAG_HIDE (1 << 9)
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* The entry specifies the event message. Any string type can be used.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_FLAG_EVENT_MESSAGE (1 << 10)
|
2022-11-29 04:27:46 -08:00
|
|
|
|
|
|
|
|
|
|
/**
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* \brief The entry contains an event timestamp.
|
|
|
|
|
|
*
|
|
|
|
|
|
* The time source might be provided via the entry semantics field. In most
|
|
|
|
|
|
* cases, the timestamp (entry) type is @ref NVTX_PAYLOAD_ENTRY_TYPE_UINT64.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
2024-06-11 01:28:01 -07:00
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_FLAG_EVENT_TIMESTAMP (2 << 10)
|
2022-11-29 04:27:46 -08:00
|
|
|
|
|
2024-06-11 01:28:01 -07:00
|
|
|
|
/**
|
|
|
|
|
|
* These flags specify the NVTX event type to which an entry refers.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_FLAG_RANGE_BEGIN (1 << 12)
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_FLAG_RANGE_END (2 << 12)
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_FLAG_MARK (3 << 12)
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_FLAG_COUNTER (4 << 12)
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* NVTX_PAYLOAD_ENTRY_FLAGS_V1 */
|
|
|
|
|
|
/** ---------------------------------------------------------------------------
|
|
|
|
|
|
* END: Payload schema entry flags.
|
|
|
|
|
|
* ------------------------------------------------------------------------- */
|
|
|
|
|
|
|
|
|
|
|
|
/** \todo: Keep this in the header? */
|
2022-11-29 04:27:46 -08:00
|
|
|
|
/**
|
|
|
|
|
|
* @note The ‘array’ flags assume that the array is embedded. Otherwise,
|
|
|
|
|
|
* @ref NVTX_PAYLOAD_ENTRY_FLAG_POINTER has to be additionally specified. Some
|
|
|
|
|
|
* combinations may be invalid based on the `NVTX_PAYLOAD_SCHEMA_TYPE_*` this
|
|
|
|
|
|
* entry is enclosed. For instance, variable length embedded arrays are valid
|
|
|
|
|
|
* within @ref NVTX_PAYLOAD_SCHEMA_TYPE_DYNAMIC but invalid with
|
|
|
|
|
|
* @ref NVTX_PAYLOAD_SCHEMA_TYPE_STATIC. See `NVTX_PAYLOAD_SCHEMA_TYPE_*` for
|
|
|
|
|
|
* additional details.
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
/* Helper macro to check if an entry represents an array. */
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_FLAG_IS_ARRAY (\
|
|
|
|
|
|
NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_FIXED_SIZE | \
|
|
|
|
|
|
NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_ZERO_TERMINATED | \
|
|
|
|
|
|
NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_LENGTH_INDEX)
|
|
|
|
|
|
|
2024-06-11 01:28:01 -07:00
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_TYPE(F) \
|
|
|
|
|
|
(F & NVTX_PAYLOAD_ENTRY_FLAG_IS_ARRAY)
|
|
|
|
|
|
/** \todo end */
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-11-29 04:27:46 -08:00
|
|
|
|
/** ---------------------------------------------------------------------------
|
|
|
|
|
|
* Types of entries in a payload schema.
|
2024-06-11 01:28:01 -07:00
|
|
|
|
*
|
2022-11-29 04:27:46 -08:00
|
|
|
|
* @note Several of the predefined types contain the size (in bits) in their
|
|
|
|
|
|
* names. For some data types the size (in bytes) is not fixed and may differ
|
|
|
|
|
|
* for different platforms/operating systems/compilers. To provide portability,
|
|
|
|
|
|
* an array of sizes (in bytes) for type 1 to 28 ( @ref
|
|
|
|
|
|
* NVTX_PAYLOAD_ENTRY_TYPE_CHAR to @ref NVTX_PAYLOAD_ENTRY_TYPE_INFO_ARRAY_SIZE)
|
|
|
|
|
|
* is passed to the NVTX extension initialization function
|
|
|
|
|
|
* @ref InitializeInjectionNvtxExtension via the `extInfo` field of
|
|
|
|
|
|
* @ref nvtxExtModuleInfo_t.
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* ------------------------------------------------------------------------- */
|
|
|
|
|
|
#ifndef NVTX_PAYLOAD_ENTRY_TYPES_V1
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPES_V1
|
2022-11-29 04:27:46 -08:00
|
|
|
|
|
2024-06-11 01:28:01 -07:00
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_INVALID 0
|
2022-11-29 04:27:46 -08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Basic integer types.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_CHAR 1
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_UCHAR 2
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_SHORT 3
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_USHORT 4
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_INT 5
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_UINT 6
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_LONG 7
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_ULONG 8
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_LONGLONG 9
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_ULONGLONG 10
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Integer types with explicit size.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_INT8 11
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_UINT8 12
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_INT16 13
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_UINT16 14
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_INT32 15
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_UINT32 16
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_INT64 17
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_UINT64 18
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* Floating point types
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT 19
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_DOUBLE 20
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_LONGDOUBLE 21
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* Size type (`size_t` in C).
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_SIZE 22
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Any address, e.g. `void*`. If the pointer type matters, use the flag @ref
|
|
|
|
|
|
* NVTX_PAYLOAD_ENTRY_FLAG_POINTER and the respective type instead.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_ADDRESS 23
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Special character types.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_WCHAR 24 /* wide character (since C90) */
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_CHAR8 25 /* since C2x and C++20 */
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_CHAR16 26
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_CHAR32 27
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* There is type size and alignment information for all previous types.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_INFO_ARRAY_SIZE (NVTX_PAYLOAD_ENTRY_TYPE_CHAR32 + 1)
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Store raw 8-bit binary data. As with `char`, 1-byte alignment is assumed.
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* Typically, a tool will display this as hex or binary.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_BYTE 32
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* These types do not have standardized equivalents. It is assumed that the
|
|
|
|
|
|
* number at the end corresponds to the bits used to store the value and that
|
|
|
|
|
|
* the alignment corresponds to standardized types of the same size.
|
|
|
|
|
|
* A tool may not support these types.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_INT128 33
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_UINT128 34
|
|
|
|
|
|
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT16 42
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT32 43
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT64 44
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT128 45
|
|
|
|
|
|
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_BF16 50
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_TF32 52
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* Data types are as defined by NVTXv3 core.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
2024-06-11 01:28:01 -07:00
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_CATEGORY 68 /* uint32_t */
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_COLOR_ARGB 69 /* uint32_t */
|
2022-11-29 04:27:46 -08:00
|
|
|
|
|
|
|
|
|
|
/**
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* The scope of events or counters (see `nvtxScopeRegister`).
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_SCOPE_ID 70 /* uint64_t */
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Thread ID as scope.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_TID_UINT32 73
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_TID_UINT64 74
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* \brief String types.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* If no flags are set for the entry and `arrayOrUnionDetail > 0`, the entry is
|
|
|
|
|
|
* assumed to be a fixed-size string with the given length, embedded in the payload.
|
|
|
|
|
|
* `NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_FIXED_SIZE` is redundant for fixed-size strings.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* \todo(Revise the following paragraph.)
|
|
|
|
|
|
* Setting the flag `NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_ZERO_TERMINATED` specifies a
|
|
|
|
|
|
* zero-terminated string. If `arrayOrUnionDetail > 0`, the entry is handled as
|
|
|
|
|
|
* a zero-terminated array of fixed-size strings.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* Setting the flag `NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_LENGTH_INDEX` specifies a
|
|
|
|
|
|
* variable-length string with the length given in the entry specified by the
|
|
|
|
|
|
* field `arrayOrUnionDetail`.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_CSTRING 75 /* `char*`, system LOCALE */
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_CSTRING_UTF8 76
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_CSTRING_UTF16 77
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_CSTRING_UTF32 78
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* The entry value is of type @ref nvtxStringHandle_t returned by
|
|
|
|
|
|
* @ref nvtxDomainRegisterString.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_NVTX_REGISTERED_STRING_HANDLE 80
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* This type marks the union selector member (entry index) in schemas used by
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* a union with internal selector.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
* See @ref NVTX_PAYLOAD_SCHEMA_TYPE_UNION_WITH_INTERNAL_SELECTOR.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_UNION_SELECTOR 100
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* \brief Predefined schema ID for payload data that is referenced in another payload.
|
|
|
|
|
|
*
|
|
|
|
|
|
* This schema ID can be used in @ref nvtxPayloadData_t::schema_id to indicate that the
|
|
|
|
|
|
* payload is a blob of memory which other payload entries may point into.
|
|
|
|
|
|
* A tool will not expose this payload directly.
|
|
|
|
|
|
*
|
|
|
|
|
|
* This schema ID cannot be used as schema entry type!
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
2024-06-11 01:28:01 -07:00
|
|
|
|
#define NVTX_TYPE_PAYLOAD_SCHEMA_REFERENCED 1022
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* \brief Predefined schema ID for raw payload data.
|
|
|
|
|
|
*
|
|
|
|
|
|
* This schema ID can be used in @ref nvtxPayloadData_t::schema_id to indicate
|
|
|
|
|
|
* that the payload is a blob, which can be shown with an arbitrary data viewer.
|
|
|
|
|
|
* This schema ID cannot be used as schema entry type!
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define NVTX_TYPE_PAYLOAD_SCHEMA_RAW 1023
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* \deprecated: Remove for official release!
|
|
|
|
|
|
* In the initial version of this header custom schema IDs started
|
|
|
|
|
|
* here. Unless predefined types require more than 16 bits we can keep this
|
|
|
|
|
|
* value to preserve backwards compatibility. The value is not used as first
|
|
|
|
|
|
* ID for custom schemas any more, but in the analysis every entry type >= this
|
|
|
|
|
|
* value is assumed to be a custom schema.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_CUSTOM_BASE 65536
|
|
|
|
|
|
|
|
|
|
|
|
/* Custom (static) schema IDs. */
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_SCHEMA_ID_STATIC_START (1 << 24)
|
|
|
|
|
|
|
|
|
|
|
|
/* Dynamic schema IDs (generated by the tool) start here. */
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENTRY_TYPE_SCHEMA_ID_DYNAMIC_START 4294967296 /* 1 << 32 */
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* NVTX_PAYLOAD_ENTRY_TYPES_V1 */
|
|
|
|
|
|
/** ---------------------------------------------------------------------------
|
|
|
|
|
|
* END: Payload schema entry types.
|
|
|
|
|
|
* ------------------------------------------------------------------------- */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef NVTX_PAYLOAD_SCHEMA_TYPES_V1
|
|
|
|
|
|
#define NVTX_PAYLOAD_SCHEMA_TYPES_V1
|
2022-11-29 04:27:46 -08:00
|
|
|
|
|
|
|
|
|
|
/**
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* \brief The payload schema type.
|
|
|
|
|
|
*
|
|
|
|
|
|
* A schema can be either of the following types. It is set with
|
|
|
|
|
|
* @ref nvtxPayloadSchemaAttr_t::type.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
2024-06-11 01:28:01 -07:00
|
|
|
|
#define NVTX_PAYLOAD_SCHEMA_TYPE_INVALID 0
|
|
|
|
|
|
#define NVTX_PAYLOAD_SCHEMA_TYPE_STATIC 1
|
|
|
|
|
|
#define NVTX_PAYLOAD_SCHEMA_TYPE_DYNAMIC 2
|
|
|
|
|
|
#define NVTX_PAYLOAD_SCHEMA_TYPE_UNION 3
|
|
|
|
|
|
#define NVTX_PAYLOAD_SCHEMA_TYPE_UNION_WITH_INTERNAL_SELECTOR 4
|
2022-11-29 04:27:46 -08:00
|
|
|
|
|
2024-06-11 01:28:01 -07:00
|
|
|
|
#endif /* NVTX_PAYLOAD_SCHEMA_TYPES_V1 */
|
2022-11-29 04:27:46 -08:00
|
|
|
|
|
|
|
|
|
|
|
2024-06-11 01:28:01 -07:00
|
|
|
|
#ifndef NVTX_PAYLOAD_SCHEMA_FLAGS_V1
|
|
|
|
|
|
#define NVTX_PAYLOAD_SCHEMA_FLAGS_V1
|
2022-11-29 04:27:46 -08:00
|
|
|
|
|
|
|
|
|
|
/**
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* \brief Flags for static and dynamic schemas.
|
|
|
|
|
|
*
|
|
|
|
|
|
* The schema flags are used with @ref nvtxPayloadSchemaAttr_t::flags.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
2024-06-11 01:28:01 -07:00
|
|
|
|
#define NVTX_PAYLOAD_SCHEMA_FLAG_NONE 0
|
2022-11-29 04:27:46 -08:00
|
|
|
|
|
|
|
|
|
|
/**
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* This flag indicates that a schema and the corresponding payloads can
|
|
|
|
|
|
* contain fields which require a deep copy.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
2024-06-11 01:28:01 -07:00
|
|
|
|
#define NVTX_PAYLOAD_SCHEMA_FLAG_DEEP_COPY (1 << 1)
|
2022-11-29 04:27:46 -08:00
|
|
|
|
|
|
|
|
|
|
/**
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* This flag indicates that a schema and the corresponding payload can be
|
|
|
|
|
|
* referenced by another payload of the same event. If the schema is not
|
|
|
|
|
|
* intended to be visualized directly, it is possible use
|
|
|
|
|
|
* @ref NVTX_TYPE_PAYLOAD_SCHEMA_REFERENCED instead.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
2024-06-11 01:28:01 -07:00
|
|
|
|
#define NVTX_PAYLOAD_SCHEMA_FLAG_REFERENCED (1 << 2)
|
2022-11-29 04:27:46 -08:00
|
|
|
|
|
|
|
|
|
|
/**
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* The schema defines a counter group. An NVTX handler can expect that the schema
|
|
|
|
|
|
* contains entries with counter semantics.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
2024-06-11 01:28:01 -07:00
|
|
|
|
#define NVTX_PAYLOAD_SCHEMA_FLAG_COUNTER_GROUP (1 << 3)
|
2022-11-29 04:27:46 -08:00
|
|
|
|
|
|
|
|
|
|
|
2024-06-11 01:28:01 -07:00
|
|
|
|
#endif /* NVTX_PAYLOAD_SCHEMA_FLAGS_V1 */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef NVTX_PAYLOAD_SCHEMA_ATTRS_V1
|
|
|
|
|
|
#define NVTX_PAYLOAD_SCHEMA_ATTRS_V1
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* The values allow the valid fields in @ref nvtxPayloadSchemaAttr_t to be
|
|
|
|
|
|
* specified via setting the field `fieldMask`.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define NVTX_PAYLOAD_SCHEMA_ATTR_NAME (1 << 1)
|
|
|
|
|
|
#define NVTX_PAYLOAD_SCHEMA_ATTR_TYPE (1 << 2)
|
|
|
|
|
|
#define NVTX_PAYLOAD_SCHEMA_ATTR_FLAGS (1 << 3)
|
|
|
|
|
|
#define NVTX_PAYLOAD_SCHEMA_ATTR_ENTRIES (1 << 4)
|
|
|
|
|
|
#define NVTX_PAYLOAD_SCHEMA_ATTR_NUM_ENTRIES (1 << 5)
|
|
|
|
|
|
#define NVTX_PAYLOAD_SCHEMA_ATTR_STATIC_SIZE (1 << 6)
|
|
|
|
|
|
#define NVTX_PAYLOAD_SCHEMA_ATTR_ALIGNMENT (1 << 7)
|
|
|
|
|
|
#define NVTX_PAYLOAD_SCHEMA_ATTR_SCHEMA_ID (1 << 8)
|
|
|
|
|
|
#define NVTX_PAYLOAD_SCHEMA_ATTR_EXTENSION (1 << 9)
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* NVTX_PAYLOAD_SCHEMA_ATTRS_V1 */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef NVTX_PAYLOAD_ENUM_ATTRS_V1
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENUM_ATTRS_V1
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* The values are used to set the field `fieldMask` and specify which fields in
|
|
|
|
|
|
* @ref nvtxPayloadEnumAttr_t are set.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENUM_ATTR_NAME (1 << 1)
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENUM_ATTR_ENTRIES (1 << 2)
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENUM_ATTR_NUM_ENTRIES (1 << 3)
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENUM_ATTR_SIZE (1 << 4)
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENUM_ATTR_SCHEMA_ID (1 << 5)
|
|
|
|
|
|
#define NVTX_PAYLOAD_ENUM_ATTR_EXTENSION (1 << 6)
|
2022-11-29 04:27:46 -08:00
|
|
|
|
|
2024-06-11 01:28:01 -07:00
|
|
|
|
#endif /* NVTX_PAYLOAD_ENUM_ATTRS_V1 */
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* An NVTX scope specifies the execution scope or source of events or counters.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#ifndef NVTX_SCOPES_V1
|
|
|
|
|
|
#define NVTX_SCOPES_V1
|
|
|
|
|
|
|
|
|
|
|
|
/** Identifies an invalid scope and indicates an error if returned by `nvtxScopeRegister`. */
|
|
|
|
|
|
#define NVTX_SCOPE_NONE 0 /* no scope */
|
|
|
|
|
|
|
|
|
|
|
|
#define NVTX_SCOPE_ROOT 1
|
|
|
|
|
|
|
|
|
|
|
|
#define NVTX_SCOPE_CURRENT_HW_MACHINE 2 /* Node/machine name */
|
|
|
|
|
|
#define NVTX_SCOPE_CURRENT_HW_SOCKET 3
|
|
|
|
|
|
#define NVTX_SCOPE_CURRENT_HW_CPU_PHYSICAL 4 /* Physical CPU core */
|
|
|
|
|
|
#define NVTX_SCOPE_CURRENT_HW_CPU_LOGICAL 5 /* Logical CPU core */
|
|
|
|
|
|
/* Innermost HW execution context at registration time */
|
|
|
|
|
|
#define NVTX_SCOPE_CURRENT_HW_INNERMOST 15
|
|
|
|
|
|
|
|
|
|
|
|
/* Virtualized hardware, virtual machines, OS (if you don't know any better)
|
|
|
|
|
|
\todo: Need to be more precise what information is expected for each of these scopes. */
|
|
|
|
|
|
#define NVTX_SCOPE_CURRENT_HYPERVISOR 16
|
|
|
|
|
|
#define NVTX_SCOPE_CURRENT_VM 17
|
|
|
|
|
|
#define NVTX_SCOPE_CURRENT_KERNEL 18
|
|
|
|
|
|
#define NVTX_SCOPE_CURRENT_CONTAINER 19
|
|
|
|
|
|
#define NVTX_SCOPE_CURRENT_OS 20
|
|
|
|
|
|
|
|
|
|
|
|
/* Software scopes */
|
|
|
|
|
|
#define NVTX_SCOPE_CURRENT_SW_PROCESS 21 /* Process scope */
|
|
|
|
|
|
#define NVTX_SCOPE_CURRENT_SW_THREAD 22 /* Thread scope */
|
|
|
|
|
|
/* Innermost SW execution context at registration time */
|
|
|
|
|
|
#define NVTX_SCOPE_CURRENT_SW_INNERMOST 31
|
|
|
|
|
|
|
|
|
|
|
|
/** Static (user-provided) scope IDs (feed forward) */
|
|
|
|
|
|
#define NVTX_SCOPE_ID_STATIC_START (1 << 24)
|
|
|
|
|
|
|
|
|
|
|
|
/** Dynamically (tool) generated scope IDs */
|
|
|
|
|
|
#define NVTX_SCOPE_ID_DYNAMIC_START 4294967296 /* 1 << 32 */
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* NVTX_SCOPES_V1 */
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
|
extern "C" {
|
|
|
|
|
|
#endif /* __cplusplus */
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef NVTX_PAYLOAD_TYPEDEFS_V1
|
|
|
|
|
|
#define NVTX_PAYLOAD_TYPEDEFS_V1
|
2022-11-29 04:27:46 -08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* \brief Size and alignment information for predefined payload entry types.
|
|
|
|
|
|
*
|
|
|
|
|
|
* The struct contains the size and the alignment size in bytes. A respective
|
|
|
|
|
|
* array for the predefined types is passed via nvtxExtModuleInfo_t to the NVTX
|
|
|
|
|
|
* client/handler. The type (ID) is used as index into this array.
|
|
|
|
|
|
*/
|
2024-06-11 01:28:01 -07:00
|
|
|
|
typedef struct nvtxPayloadEntryTypeInfo_v1
|
2022-11-29 04:27:46 -08:00
|
|
|
|
{
|
|
|
|
|
|
uint16_t size;
|
|
|
|
|
|
uint16_t align;
|
|
|
|
|
|
} nvtxPayloadEntryTypeInfo_t;
|
|
|
|
|
|
|
2024-06-11 01:28:01 -07:00
|
|
|
|
/**
|
|
|
|
|
|
* \brief Binary payload data, size and decoding information.
|
|
|
|
|
|
*
|
|
|
|
|
|
* An array of type `nvtxPayloadData_t` is passed to the NVTX event attached to
|
|
|
|
|
|
* an NVTX event via the `payload.ullvalue` field of NVTX event attributes.
|
|
|
|
|
|
*
|
|
|
|
|
|
* The `schemaId` be a predefined schema entry type (`NVTX_PAYLOAD_ENTRY_TYPE*`),
|
|
|
|
|
|
* a schema ID (statically specified or dynamically created) or one of
|
|
|
|
|
|
* `NVTX_PAYLOAD_TYPE_REFERENCED` or `NVTX_PAYLOAD_TYPE_RAW`.
|
|
|
|
|
|
*
|
|
|
|
|
|
* Setting the size of a payload to `MAX_SIZE` can be useful to reduce the
|
|
|
|
|
|
* overhead of NVTX instrumentation, when no NVTX handler is attached. However,
|
|
|
|
|
|
* a tool might not be able to detect the size of a payload and thus skip it.
|
|
|
|
|
|
* A reasonable use case is a payload that represents a null-terminated
|
|
|
|
|
|
* C string, where the NVTX handler can call `strlen()`.
|
|
|
|
|
|
*/
|
|
|
|
|
|
typedef struct nvtxPayloadData_v1
|
|
|
|
|
|
{
|
|
|
|
|
|
/**
|
|
|
|
|
|
* The schema ID, which defines the layout of the binary data.
|
|
|
|
|
|
*/
|
|
|
|
|
|
uint64_t schemaId;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Size of the payload (blob) in bytes. `SIZE_MAX` (`-1`) indicates the tool
|
|
|
|
|
|
* that it should figure out the size, which might not be possible.
|
|
|
|
|
|
*/
|
|
|
|
|
|
size_t size;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Pointer to the binary payload data.
|
|
|
|
|
|
*/
|
|
|
|
|
|
const void* payload;
|
|
|
|
|
|
} nvtxPayloadData_t;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* \brief Header of the payload entry's semantic field.
|
|
|
|
|
|
*
|
|
|
|
|
|
* If the semantic field of the payload schema entry is set, the first four
|
|
|
|
|
|
* fields (header) are defined with this type. A tool can iterate through the
|
|
|
|
|
|
* extensions and check, if it supports (can handle) it.
|
|
|
|
|
|
*/
|
|
|
|
|
|
typedef struct nvtxSemanticsHeader_v1
|
|
|
|
|
|
{
|
|
|
|
|
|
uint32_t structSize; /** Size of semantic extension struct. */
|
|
|
|
|
|
uint16_t semanticId;
|
|
|
|
|
|
uint16_t version;
|
|
|
|
|
|
const struct nvtxSemanticsHeader_v1* next; /** linked list */
|
|
|
|
|
|
/* Additional fields are defined by the specific semantic extension. */
|
|
|
|
|
|
} nvtxSemanticsHeader_t;
|
|
|
|
|
|
|
2022-11-29 04:27:46 -08:00
|
|
|
|
/**
|
|
|
|
|
|
* \brief Entry in a schema.
|
|
|
|
|
|
*
|
|
|
|
|
|
* A payload schema consists of an array of payload schema entries. It is
|
|
|
|
|
|
* registered with @ref nvtxPayloadSchemaRegister. `flag` can be set to `0` for
|
|
|
|
|
|
* simple values, 'type' is the only "required" field. If not set explicitly,
|
|
|
|
|
|
* all other fields are zero-initialized, which means that the entry has no name
|
|
|
|
|
|
* and the offset is determined based on self-alignment rules.
|
|
|
|
|
|
*
|
|
|
|
|
|
* Example schema:
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* nvtxPayloadSchemaEntry_t schema[] = {
|
2022-11-29 04:27:46 -08:00
|
|
|
|
* {0, NVTX_EXT_PAYLOAD_TYPE_UINT8, "one byte"},
|
|
|
|
|
|
* {0, NVTX_EXT_PAYLOAD_TYPE_INT32, "four bytes"}
|
|
|
|
|
|
* };
|
|
|
|
|
|
*/
|
2024-06-11 01:28:01 -07:00
|
|
|
|
typedef struct nvtxPayloadSchemaEntry_v1
|
2022-11-29 04:27:46 -08:00
|
|
|
|
{
|
|
|
|
|
|
/**
|
|
|
|
|
|
* \brief Flags to augment the basic type.
|
|
|
|
|
|
*
|
|
|
|
|
|
* This field allows additional properties of the payload entry to be
|
|
|
|
|
|
* specified. Valid values are `NVTX_PAYLOAD_ENTRY_FLAG_*`.
|
|
|
|
|
|
*/
|
|
|
|
|
|
uint64_t flags;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* \brief Predefined payload schema entry type or custom schema ID.
|
|
|
|
|
|
*
|
|
|
|
|
|
* Predefined types are `NVTX_PAYLOAD_ENTRY_TYPE_*`. Passing a schema ID
|
|
|
|
|
|
* enables nesting of schemas.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
|
|
|
|
|
uint64_t type;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* \brief Name or label of the payload entry. (Optional)
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* A meaningful name or label can help organizing and interpreting the data.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
|
|
|
|
|
const char* name;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* \brief Description of the payload entry. (Optional)
|
2024-06-11 01:28:01 -07:00
|
|
|
|
*
|
|
|
|
|
|
* A more detail description of the data that is stored with this entry.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
|
|
|
|
|
const char* description;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* \brief String length, array length or member selector for union types.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* If @ref type is a C string type, this field specifies the string length.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* If @ref flags specify that the entry is an array, this field specifies
|
|
|
|
|
|
* the array length. See `NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_*` for more details.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* If @ref type is a union with schema type @ref NVTX_PAYLOAD_SCHEMA_TYPE_UNION
|
|
|
|
|
|
* (external selection of the union member), this field contains the index
|
|
|
|
|
|
* (starting with 0) to an entry of integral type in the same schema. The
|
|
|
|
|
|
* associated field value specifies the selected union member.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*
|
|
|
|
|
|
* @note An array of schema type @ref NVTX_PAYLOAD_SCHEMA_TYPE_UNION is not
|
|
|
|
|
|
* supported. @ref NVTX_PAYLOAD_SCHEMA_TYPE_UNION_WITH_INTERNAL_SELECTOR can
|
|
|
|
|
|
* be used instead.
|
|
|
|
|
|
*/
|
|
|
|
|
|
uint64_t arrayOrUnionDetail;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* \brief Offset in the binary payload data (in bytes).
|
|
|
|
|
|
*
|
|
|
|
|
|
* This field specifies the byte offset from the base address of the actual
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* binary data (blob) to the start address of the data of this entry.
|
|
|
|
|
|
*
|
|
|
|
|
|
* It is recommended (but not required) to provide the offset it. Otherwise,
|
|
|
|
|
|
* the NVTX handler will determine the offset from natural alignment rules.
|
|
|
|
|
|
* In some cases, e.g. dynamic schema layouts, the offset cannot be set and
|
|
|
|
|
|
* has to be determined based on the data of prior entries.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* Setting the offset can also be used to skip entries during payload parsing.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
|
|
|
|
|
uint64_t offset;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* \brief Additional semantics of the payload entry.
|
|
|
|
|
|
*
|
|
|
|
|
|
* The field points to the first element in a linked list, which enables
|
|
|
|
|
|
* multiple semantic extensions.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
2024-06-11 01:28:01 -07:00
|
|
|
|
const nvtxSemanticsHeader_t* semantics;
|
2022-11-29 04:27:46 -08:00
|
|
|
|
|
|
|
|
|
|
/**
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* \brief Reserved for future use. Do not use it!
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
2024-06-11 01:28:01 -07:00
|
|
|
|
const void* reserved;
|
2022-11-29 04:27:46 -08:00
|
|
|
|
} nvtxPayloadSchemaEntry_t;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* \brief Header of the schema attribute extension field.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
2024-06-11 01:28:01 -07:00
|
|
|
|
typedef struct nvtxPayloadSchemaExtension_v1
|
2022-11-29 04:27:46 -08:00
|
|
|
|
{
|
2024-06-11 01:28:01 -07:00
|
|
|
|
uint32_t structSize; /** Size of schema extension struct. */
|
|
|
|
|
|
uint16_t schemaExtId;
|
|
|
|
|
|
uint16_t version;
|
|
|
|
|
|
const struct nvtxPayloadSchemaExtension_v1* next; /** linked list */
|
|
|
|
|
|
/* Additional fields are defined by the specific schema extension. */
|
|
|
|
|
|
} nvtxPayloadSchemaExtension_t;
|
2022-11-29 04:27:46 -08:00
|
|
|
|
|
|
|
|
|
|
/**
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* \brief NVTX payload schema attributes.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
2024-06-11 01:28:01 -07:00
|
|
|
|
typedef struct nvtxPayloadSchemaAttr_v1
|
2022-11-29 04:27:46 -08:00
|
|
|
|
{
|
|
|
|
|
|
/**
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* \brief Mask of valid fields in this struct.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* Use the `NVTX_PAYLOAD_SCHEMA_ATTR_*` defines.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
|
|
|
|
|
uint64_t fieldMask;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* \brief Name of the payload schema. (Optional)
|
|
|
|
|
|
*/
|
|
|
|
|
|
const char* name;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* \brief Payload schema type. (Mandatory) \anchor PAYLOAD_TYPE_FIELD
|
|
|
|
|
|
*
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* Use the `NVTX_PAYLOAD_SCHEMA_TYPE_*` defines.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
|
|
|
|
|
uint64_t type;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* \brief Payload schema flags. (Optional)
|
|
|
|
|
|
*
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* Flags defined by `NVTX_PAYLOAD_SCHEMA_FLAG_*` can be used to set
|
2022-11-29 04:27:46 -08:00
|
|
|
|
* additional properties of the schema.
|
|
|
|
|
|
*/
|
|
|
|
|
|
uint64_t flags;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* \brief Entries of a payload schema. (Mandatory) \anchor ENTRIES_FIELD
|
|
|
|
|
|
*
|
|
|
|
|
|
* This field is a pointer to an array of schema entries, each describing a
|
|
|
|
|
|
* field in a data structure, e.g. in a C struct or union.
|
|
|
|
|
|
*/
|
|
|
|
|
|
const nvtxPayloadSchemaEntry_t* entries;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* \brief Number of entries in the payload schema. (Mandatory)
|
|
|
|
|
|
*
|
|
|
|
|
|
* Number of entries in the array of payload entries \ref ENTRIES_FIELD.
|
|
|
|
|
|
*/
|
|
|
|
|
|
size_t numEntries;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* \brief The binary payload size in bytes for static payload schemas.
|
|
|
|
|
|
*
|
|
|
|
|
|
* If \ref PAYLOAD_TYPE_FIELD is @ref NVTX_PAYLOAD_SCHEMA_TYPE_DYNAMIC this
|
|
|
|
|
|
* value is ignored. If this field is not specified for a schema of type
|
|
|
|
|
|
* @ref NVTX_PAYLOAD_SCHEMA_TYPE_STATIC, the size can be automatically
|
|
|
|
|
|
* determined by a tool.
|
|
|
|
|
|
*/
|
|
|
|
|
|
size_t payloadStaticSize;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* \brief The byte alignment for packed structures.
|
|
|
|
|
|
*
|
|
|
|
|
|
* If not specified, this field defaults to `0`, which means that the fields
|
|
|
|
|
|
* in the data structure are not packed and natural alignment rules can be
|
|
|
|
|
|
* applied.
|
|
|
|
|
|
*/
|
|
|
|
|
|
size_t packAlign;
|
|
|
|
|
|
|
|
|
|
|
|
/* Static/custom schema ID must be
|
|
|
|
|
|
>= NVTX_PAYLOAD_ENTRY_TYPE_SCHEMA_ID_STATIC_START and
|
|
|
|
|
|
< NVTX_PAYLOAD_ENTRY_TYPE_SCHEMA_ID_DYNAMIC_START */
|
|
|
|
|
|
uint64_t schemaId;
|
2024-06-11 01:28:01 -07:00
|
|
|
|
|
|
|
|
|
|
/* Flexible extension for schema attributes. */
|
|
|
|
|
|
void* extension;
|
2022-11-29 04:27:46 -08:00
|
|
|
|
} nvtxPayloadSchemaAttr_t;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* \brief This type is used to describe an enumeration.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* Since the value of an enum entry might not be meaningful for the analysis
|
|
|
|
|
|
* and/or visualization, a tool can show the name of enum entry instead.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* An array of this struct is passed to @ref nvtxPayloadEnumAttr_t::entries to be
|
|
|
|
|
|
* finally registered via @ref nvtxPayloadEnumRegister with the NVTX handler.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*
|
|
|
|
|
|
* @note EXPERIMENTAL
|
|
|
|
|
|
*/
|
2024-06-11 01:28:01 -07:00
|
|
|
|
typedef struct nvtxPayloadEnum_v1
|
2022-11-29 04:27:46 -08:00
|
|
|
|
{
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Name of the enum value.
|
|
|
|
|
|
*/
|
|
|
|
|
|
const char* name;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Value of the enum entry.
|
|
|
|
|
|
*/
|
|
|
|
|
|
uint64_t value;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Indicates that this entry sets a specific set of bits, which can be used
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* to define bitsets.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
|
|
|
|
|
int8_t isFlag;
|
|
|
|
|
|
} nvtxPayloadEnum_t;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* \brief NVTX payload enumeration type attributes.
|
|
|
|
|
|
*
|
|
|
|
|
|
* A pointer to this struct is passed to @ref nvtxPayloadEnumRegister.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
2024-06-11 01:28:01 -07:00
|
|
|
|
typedef struct nvtxPayloadEnumAttr_v1
|
|
|
|
|
|
{
|
2022-11-29 04:27:46 -08:00
|
|
|
|
/**
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* Mask of valid fields in this struct. See `NVTX_PAYLOAD_ENUM_ATTR_*`.
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
|
|
|
|
|
uint64_t fieldMask;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Name of the enum. (Optional)
|
|
|
|
|
|
*/
|
|
|
|
|
|
const char* name;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Entries of the enum. (Mandatory)
|
|
|
|
|
|
*/
|
|
|
|
|
|
const nvtxPayloadEnum_t* entries;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Number of entries in the enum. (Mandatory)
|
|
|
|
|
|
*/
|
|
|
|
|
|
size_t numEntries;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Size of enumeration type in bytes
|
|
|
|
|
|
*/
|
|
|
|
|
|
size_t sizeOfEnum;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Static/custom schema ID must be
|
|
|
|
|
|
* >= NVTX_PAYLOAD_ENTRY_TYPE_SCHEMA_ID_STATIC_START and
|
|
|
|
|
|
* < NVTX_PAYLOAD_ENTRY_TYPE_SCHEMA_ID_DYNAMIC_START
|
|
|
|
|
|
*/
|
|
|
|
|
|
uint64_t schemaId;
|
2024-06-11 01:28:01 -07:00
|
|
|
|
|
|
|
|
|
|
/* Flexible extension for enumeration attributes. */
|
|
|
|
|
|
void* extension;
|
2022-11-29 04:27:46 -08:00
|
|
|
|
} nvtxPayloadEnumAttr_t;
|
|
|
|
|
|
|
2024-06-11 01:28:01 -07:00
|
|
|
|
typedef struct nvtxScopeAttr_v1
|
|
|
|
|
|
{
|
|
|
|
|
|
size_t structSize;
|
|
|
|
|
|
|
|
|
|
|
|
/** Path delimited by '/' characters, relative to parentScope. Leading
|
|
|
|
|
|
slashes are ignored. Nodes in the path may use name[key] syntax to indicate
|
|
|
|
|
|
an array of sibling nodes, which may be combined with other non-array nodes
|
|
|
|
|
|
or different arrays at the same scope. Node names should be UTF8 printable
|
|
|
|
|
|
characters, excluding '/', '[', and ']' characters which have special
|
|
|
|
|
|
meaning here. An empty C string "" and `NULL` are valid inputs and treated
|
|
|
|
|
|
equivalently. */
|
|
|
|
|
|
const char* path;
|
|
|
|
|
|
|
|
|
|
|
|
uint64_t parentScope;
|
|
|
|
|
|
|
|
|
|
|
|
/** The static scope ID must be unique within the domain,
|
|
|
|
|
|
>= NVTX_EVENT_SCOPE_ID_STATIC_START, and
|
|
|
|
|
|
< NVTX_EVENT_SCOPE_ID_DYNAMIC_START. */
|
|
|
|
|
|
uint64_t scopeId;
|
|
|
|
|
|
} nvtxScopeAttr_t;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* NVTX_PAYLOAD_TYPEDEFS_V1 */
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef NVTX_PAYLOAD_API_FUNCTIONS_V1
|
|
|
|
|
|
#define NVTX_PAYLOAD_API_FUNCTIONS_V1
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* \brief Register a payload schema.
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param domain NVTX domain handle.
|
|
|
|
|
|
* @param attr NVTX payload schema attributes.
|
|
|
|
|
|
*/
|
|
|
|
|
|
NVTX_DECLSPEC uint64_t NVTX_API nvtxPayloadSchemaRegister(
|
|
|
|
|
|
nvtxDomainHandle_t domain,
|
|
|
|
|
|
const nvtxPayloadSchemaAttr_t* attr);
|
|
|
|
|
|
|
2022-11-29 04:27:46 -08:00
|
|
|
|
/**
|
|
|
|
|
|
* \brief Register an enumeration type with the payload extension.
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param domain NVTX domain handle
|
|
|
|
|
|
* @param attr NVTX payload enumeration type attributes.
|
|
|
|
|
|
*/
|
2024-06-11 01:28:01 -07:00
|
|
|
|
NVTX_DECLSPEC uint64_t NVTX_API nvtxPayloadEnumRegister(
|
|
|
|
|
|
nvtxDomainHandle_t domain,
|
2022-11-29 04:27:46 -08:00
|
|
|
|
const nvtxPayloadEnumAttr_t* attr);
|
|
|
|
|
|
|
2024-06-11 01:28:01 -07:00
|
|
|
|
/**
|
|
|
|
|
|
* \brief Register a scope.
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param domain NVTX domain handle (0 for default domain)
|
|
|
|
|
|
* @param attr Scope attributes.
|
|
|
|
|
|
*
|
|
|
|
|
|
* @return an identifier for the scope. If the operation was not successful,
|
|
|
|
|
|
* `NVTX_SCOPE_NONE` is returned.
|
|
|
|
|
|
*/
|
|
|
|
|
|
NVTX_DECLSPEC uint64_t NVTX_API nvtxScopeRegister(
|
|
|
|
|
|
nvtxDomainHandle_t domain,
|
|
|
|
|
|
const nvtxScopeAttr_t* attr);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* \brief Marks an instantaneous event in the application with the attributes
|
|
|
|
|
|
* being passed via the extended payload.
|
|
|
|
|
|
*
|
|
|
|
|
|
* An NVTX handler can assume that the payload contains the event message.
|
|
|
|
|
|
* Otherwise, it might ignore the event.
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param domain NVTX domain handle
|
|
|
|
|
|
* @param payloadData pointer to an array of structured payloads.
|
|
|
|
|
|
* @param count number of payload BLOBs.
|
|
|
|
|
|
*/
|
|
|
|
|
|
NVTX_DECLSPEC void NVTX_API nvtxMarkPayload(
|
|
|
|
|
|
nvtxDomainHandle_t domain,
|
|
|
|
|
|
const nvtxPayloadData_t* payloadData,
|
|
|
|
|
|
size_t count);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* \brief Begin a nested thread range with the attributes being passed via the
|
|
|
|
|
|
* payload.
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param domain NVTX domain handle
|
|
|
|
|
|
* @param payloadData pointer to an array of structured payloads.
|
|
|
|
|
|
* @param count number of payload BLOBs.
|
|
|
|
|
|
*
|
|
|
|
|
|
* @return The level of the range being ended. If an error occurs a negative
|
|
|
|
|
|
* value is returned on the current thread.
|
|
|
|
|
|
*/
|
|
|
|
|
|
NVTX_DECLSPEC int NVTX_API nvtxRangePushPayload(
|
|
|
|
|
|
nvtxDomainHandle_t domain,
|
|
|
|
|
|
const nvtxPayloadData_t* payloadData,
|
|
|
|
|
|
size_t count);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* \brief End a nested thread range with an additional custom payload.
|
|
|
|
|
|
*
|
|
|
|
|
|
* NVTX event attributes passed to this function (via the payloads) overwrite
|
|
|
|
|
|
* event attributes (message and color) that have been set in the push event.
|
|
|
|
|
|
* Other payload entries extend the data of the range.
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param domain NVTX domain handle
|
|
|
|
|
|
* @param payloadData pointer to an array of structured payloads.
|
|
|
|
|
|
* @param count number of payload BLOBs.
|
|
|
|
|
|
*
|
|
|
|
|
|
* @return The level of the range being ended. If an error occurs a negative
|
|
|
|
|
|
* value is returned on the current thread.
|
|
|
|
|
|
*/
|
|
|
|
|
|
NVTX_DECLSPEC int NVTX_API nvtxRangePopPayload(
|
|
|
|
|
|
nvtxDomainHandle_t domain,
|
|
|
|
|
|
const nvtxPayloadData_t* payloadData,
|
|
|
|
|
|
size_t count);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* \brief Start a thread range with attributes passed via the extended payload.
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param domain NVTX domain handle
|
|
|
|
|
|
* @param payloadData pointer to an array of structured payloads.
|
|
|
|
|
|
* @param count number of payload BLOBs.
|
|
|
|
|
|
*
|
|
|
|
|
|
* @return The level of the range being ended. If an error occurs a negative
|
|
|
|
|
|
* value is returned on the current thread.
|
|
|
|
|
|
*/
|
|
|
|
|
|
NVTX_DECLSPEC nvtxRangeId_t NVTX_API nvtxRangeStartPayload(
|
|
|
|
|
|
nvtxDomainHandle_t domain,
|
|
|
|
|
|
const nvtxPayloadData_t* payloadData,
|
|
|
|
|
|
size_t count);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* \brief End a thread range and pass a custom payload.
|
|
|
|
|
|
*
|
|
|
|
|
|
* NVTX event attributes passed to this function (via the payloads) overwrite
|
|
|
|
|
|
* event attributes (message and color) that have been set in the start event.
|
|
|
|
|
|
* Other payload entries extend the data of the range.
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param domain NVTX domain handle
|
|
|
|
|
|
* @param id The correlation ID returned from a NVTX range start call.
|
|
|
|
|
|
* @param payloadData pointer to an array of structured payloads.
|
|
|
|
|
|
* @param count number of payload BLOBs.
|
|
|
|
|
|
*/
|
|
|
|
|
|
NVTX_DECLSPEC void NVTX_API nvtxRangeEndPayload(
|
|
|
|
|
|
nvtxDomainHandle_t domain,
|
|
|
|
|
|
nvtxRangeId_t id,
|
|
|
|
|
|
const nvtxPayloadData_t* payloadData,
|
|
|
|
|
|
size_t count);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief Checks if an NVTX domain is enabled (unofficial and may not work)
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param domain NVTX domain handle
|
|
|
|
|
|
* @return 0 if the domain is not enabled.
|
|
|
|
|
|
*/
|
|
|
|
|
|
NVTX_DECLSPEC uint8_t NVTX_API nvtxDomainIsEnabled(
|
|
|
|
|
|
nvtxDomainHandle_t domain);
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* NVTX_PAYLOAD_API_FUNCTIONS_V1 */
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef NVTX_PAYLOAD_CALLBACK_ID_V1
|
|
|
|
|
|
#define NVTX_PAYLOAD_CALLBACK_ID_V1
|
2022-11-29 04:27:46 -08:00
|
|
|
|
/**
|
|
|
|
|
|
* \brief Callback Ids of API functions in the payload extension.
|
|
|
|
|
|
*
|
|
|
|
|
|
* The NVTX handler can use these values to register a handler function. When
|
|
|
|
|
|
* InitializeInjectionNvtxExtension(nvtxExtModuleInfo_t* moduleInfo) is
|
|
|
|
|
|
* executed, a handler routine 'handlenvtxPayloadRegisterSchema' can be
|
|
|
|
|
|
* registered as follows:
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* \code{.c}
|
2022-11-29 04:27:46 -08:00
|
|
|
|
* moduleInfo->segments->slots[NVTX3EXT_CBID_nvtxPayloadSchemaRegister] =
|
2024-06-11 01:28:01 -07:00
|
|
|
|
* (intptr_t)YourPayloadRegisterSchemaHandlerFn;
|
|
|
|
|
|
* \endcode
|
2022-11-29 04:27:46 -08:00
|
|
|
|
*/
|
2024-06-11 01:28:01 -07:00
|
|
|
|
#define NVTX3EXT_CBID_nvtxPayloadSchemaRegister 0
|
|
|
|
|
|
#define NVTX3EXT_CBID_nvtxPayloadEnumRegister 1
|
|
|
|
|
|
#define NVTX3EXT_CBID_nvtxMarkPayload 2
|
|
|
|
|
|
#define NVTX3EXT_CBID_nvtxRangePushPayload 3
|
|
|
|
|
|
#define NVTX3EXT_CBID_nvtxRangePopPayload 4
|
|
|
|
|
|
#define NVTX3EXT_CBID_nvtxRangeStartPayload 5
|
|
|
|
|
|
#define NVTX3EXT_CBID_nvtxRangeEndPayload 6
|
|
|
|
|
|
#define NVTX3EXT_CBID_nvtxDomainIsEnabled 7
|
|
|
|
|
|
#define NVTX3EXT_CBID_nvtxScopeRegister 12
|
|
|
|
|
|
#endif /* NVTX_PAYLOAD_CALLBACK_ID_V1 */
|
|
|
|
|
|
|
|
|
|
|
|
/*** Helper utilities ***/
|
|
|
|
|
|
|
|
|
|
|
|
/** \brief Helper macro for safe double-cast of pointer to uint64_t value. */
|
|
|
|
|
|
#ifndef NVTX_POINTER_AS_PAYLOAD_ULLVALUE
|
|
|
|
|
|
# ifdef __cplusplus
|
|
|
|
|
|
# define NVTX_POINTER_AS_PAYLOAD_ULLVALUE(p) \
|
|
|
|
|
|
static_cast<uint64_t>(reinterpret_cast<uintptr_t>(p))
|
|
|
|
|
|
# else
|
|
|
|
|
|
#define NVTX_POINTER_AS_PAYLOAD_ULLVALUE(p) ((uint64_t)(uintptr_t)p)
|
|
|
|
|
|
# endif
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef NVTX_PAYLOAD_EVTATTR_SET_DATA
|
|
|
|
|
|
/**
|
|
|
|
|
|
* \brief Helper macro to attach a single payload to an NVTX event attribute.
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param evtAttr NVTX event attribute (variable name)
|
|
|
|
|
|
* @param pldata_addr Adress of `nvtxPayloadData_t` variable.
|
|
|
|
|
|
* @param schema_id NVTX binary payload schema ID.
|
|
|
|
|
|
* @param pl_addr Address of the (actual) payload.
|
|
|
|
|
|
* @param sz size of the (actual) payload.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define NVTX_PAYLOAD_EVTATTR_SET_DATA(evtAttr, pldata_addr, schema_id, pl_addr, sz) \
|
|
|
|
|
|
(pldata_addr)->schemaId = schema_id; \
|
|
|
|
|
|
(pldata_addr)->size = sz; \
|
|
|
|
|
|
(pldata_addr)->payload = pl_addr; \
|
|
|
|
|
|
(evtAttr).payload.ullValue = NVTX_POINTER_AS_PAYLOAD_ULLVALUE(pldata_addr); \
|
|
|
|
|
|
(evtAttr).payloadType = NVTX_PAYLOAD_TYPE_EXT; \
|
|
|
|
|
|
(evtAttr).reserved0 = 1;
|
|
|
|
|
|
#endif /* NVTX_PAYLOAD_EVTATTR_SET_DATA */
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef NVTX_PAYLOAD_EVTATTR_SET_MULTIPLE
|
|
|
|
|
|
/**
|
|
|
|
|
|
* \brief Helper macro to attach multiple payloads to an NVTX event attribute.
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param evtAttr NVTX event attribute (variable name)
|
|
|
|
|
|
* @param pldata Payload data array (of type `nvtxPayloadData_t`)
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define NVTX_PAYLOAD_EVTATTR_SET_MULTIPLE(evtAttr, pldata) \
|
|
|
|
|
|
(evtAttr).payloadType = NVTX_PAYLOAD_TYPE_EXT; \
|
|
|
|
|
|
(evtAttr).reserved0 = sizeof(pldata)/sizeof(nvtxPayloadData_t); \
|
|
|
|
|
|
(evtAttr).payload.ullValue = NVTX_POINTER_AS_PAYLOAD_ULLVALUE(pldata);
|
|
|
|
|
|
#endif /* NVTX_PAYLOAD_EVTATTR_SET_MULTIPLE */
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef NVTX_PAYLOAD_EVTATTR_SET
|
|
|
|
|
|
/*
|
|
|
|
|
|
* Do not use this macro directly! It is a helper to attach a single payload to
|
|
|
|
|
|
* an NVTX event attribute.
|
|
|
|
|
|
* @warning The NVTX push, start or mark operation must not be in an outer scope.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define NVTX_PAYLOAD_EVTATTR_SET(evtAttr, schema_id, pl_addr, sz) \
|
|
|
|
|
|
nvtxPayloadData_t _NVTX_PAYLOAD_DATA_VAR[] = \
|
|
|
|
|
|
{{schema_id, sz, pl_addr}}; \
|
|
|
|
|
|
(evtAttr)->payload.ullValue = \
|
|
|
|
|
|
NVTX_POINTER_AS_PAYLOAD_ULLVALUE(_NVTX_PAYLOAD_DATA_VAR); \
|
|
|
|
|
|
(evtAttr)->payloadType = NVTX_PAYLOAD_TYPE_EXT; \
|
|
|
|
|
|
(evtAttr)->reserved0 = 1;
|
|
|
|
|
|
#endif /* NVTX_PAYLOAD_EVTATTR_SET */
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef nvtxPayloadRangePush
|
|
|
|
|
|
/**
|
|
|
|
|
|
* \brief Helper macro to push a range with extended payload.
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param domain NVTX domain handle (0 for default domain)
|
|
|
|
|
|
* @param evtAttr pointer to NVTX event attribute.
|
|
|
|
|
|
* @param schemaId NVTX payload schema ID
|
|
|
|
|
|
* @param plAddr Pointer to the binary data (actual payload)
|
|
|
|
|
|
* @param size Size of the binary payload data in bytes.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define nvtxPayloadRangePush(domain, evtAttr, schemaId, plAddr, size) \
|
|
|
|
|
|
do { \
|
|
|
|
|
|
NVTX_PAYLOAD_EVTATTR_SET(evtAttr, schemaId, plAddr, size) \
|
|
|
|
|
|
nvtxDomainRangePushEx(domain, evtAttr); \
|
|
|
|
|
|
} while (0)
|
|
|
|
|
|
#endif /* nvtxPayloadRangePush */
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef nvtxPayloadMark
|
|
|
|
|
|
/**
|
|
|
|
|
|
* \brief Helper macro to set a marker with extended payload.
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param domain NVTX domain handle (0 for default domain)
|
|
|
|
|
|
* @param evtAttr pointer to NVTX event attribute.
|
|
|
|
|
|
* @param schemaId NVTX payload schema ID
|
|
|
|
|
|
* @param plAddr Pointer to the binary data (actual payload)
|
|
|
|
|
|
* @param size Size of the binary payload data in bytes.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define nvtxPayloadMark(domain, evtAttr, schemaId, plAddr, size) \
|
|
|
|
|
|
do { \
|
|
|
|
|
|
NVTX_PAYLOAD_EVTATTR_SET(evtAttr, schemaId, plAddr, size) \
|
|
|
|
|
|
nvtxDomainMarkEx(domain, evtAttr); \
|
|
|
|
|
|
} while (0)
|
|
|
|
|
|
#endif /* nvtxPayloadMark */
|
|
|
|
|
|
|
2022-11-29 04:27:46 -08:00
|
|
|
|
|
|
|
|
|
|
#ifdef __GNUC__
|
|
|
|
|
|
#pragma GCC visibility push(internal)
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
2024-06-11 01:28:01 -07:00
|
|
|
|
/* Extension types are required for the implementation and the NVTX handler. */
|
|
|
|
|
|
#define NVTX_EXT_TYPES_GUARD
|
|
|
|
|
|
#include "nvtxDetail/nvtxExtTypes.h"
|
2022-11-29 04:27:46 -08:00
|
|
|
|
#undef NVTX_EXT_TYPES_GUARD
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef NVTX_NO_IMPL
|
2024-06-11 01:28:01 -07:00
|
|
|
|
#define NVTX_EXT_IMPL_PAYLOAD_GUARD
|
|
|
|
|
|
#include "nvtxDetail/nvtxExtImplPayload_v1.h"
|
2022-11-29 04:27:46 -08:00
|
|
|
|
#undef NVTX_EXT_IMPL_PAYLOAD_GUARD
|
2024-06-11 01:28:01 -07:00
|
|
|
|
#endif /* NVTX_NO_IMPL */
|
2022-11-29 04:27:46 -08:00
|
|
|
|
|
|
|
|
|
|
#ifdef __GNUC__
|
|
|
|
|
|
#pragma GCC visibility pop
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif /* __cplusplus */
|