NVTX C API Reference v3
NVIDIA Tools Extension Library
Loading...
Searching...
No Matches
nvToolsExtPayload.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: Copyright (c) 2021-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 * Licensed under the Apache License v2.0 with LLVM Exceptions.
18 * See https://nvidia.github.io/NVTX/LICENSE.txt for license information.
19 */
20
21#if defined(NVTX_AS_SYSTEM_HEADER)
22#if defined(__clang__)
23#pragma clang system_header
24#elif defined(__GNUC__) || defined(__NVCOMPILER)
25#pragma GCC system_header
26#elif defined(_MSC_VER)
27#pragma system_header
28#endif
29#endif
30
49#include "nvToolsExt.h"
50
51/* Optionally include helper macros. */
52/* #include "nvToolsExtPayloadHelper.h" */
53
61#ifndef NVTX_EXT_PAYLOAD_COMPATID
62#define NVTX_EXT_PAYLOAD_COMPATID 0x0104
63#endif
64
68#ifndef NVTX_EXT_PAYLOAD_MODULEID
69#define NVTX_EXT_PAYLOAD_MODULEID 2
70#endif
71
75#ifndef NVTX_PAYLOAD_TYPE_EXT
76#define NVTX_PAYLOAD_TYPE_EXT (NVTX_STATIC_CAST(int32_t, 0xDFBD0009))
77#endif
78
82#ifndef NVTX_PAYLOAD_ENTRY_FLAGS_V1
83#define NVTX_PAYLOAD_ENTRY_FLAGS_V1
84
85#define NVTX_PAYLOAD_ENTRY_FLAG_UNUSED 0
86
90#define NVTX_PAYLOAD_ENTRY_FLAG_POINTER (1 << 1)
91
95#define NVTX_PAYLOAD_ENTRY_FLAG_OFFSET_FROM_BASE (1 << 2)
96
100#define NVTX_PAYLOAD_ENTRY_FLAG_OFFSET_FROM_HERE (1 << 3)
101
105#define NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_FIXED_SIZE (1 << 4)
106
110#define NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_ZERO_TERMINATED (2 << 4)
111
130#define NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_LENGTH_INDEX (3 << 4)
131
144#define NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_LENGTH_PAYLOAD_INDEX (4 << 4)
145
154#define NVTX_PAYLOAD_ENTRY_FLAG_DEEP_COPY (1 << 8)
155
159#define NVTX_PAYLOAD_ENTRY_FLAG_HIDE (1 << 9)
160
167#define NVTX_PAYLOAD_ENTRY_FLAG_EVENT_MESSAGE (1 << 10)
168
175#define NVTX_PAYLOAD_ENTRY_FLAG_TIMESTAMP (2 << 10)
176
199#define NVTX_PAYLOAD_ENTRY_FLAG_RANGE_BEGIN (1 << 12)
201#define NVTX_PAYLOAD_ENTRY_FLAG_RANGE_END (2 << 12)
203#define NVTX_PAYLOAD_ENTRY_FLAG_MARK (3 << 12)
205#define NVTX_PAYLOAD_ENTRY_FLAG_COUNTER (4 << 12)
206
217/* Helper macro to check if an entry represents an array. */
218#define NVTX_PAYLOAD_ENTRY_FLAG_IS_ARRAY \
219 (NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_FIXED_SIZE | NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_ZERO_TERMINATED | \
220 NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_LENGTH_INDEX | \
221 NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_LENGTH_PAYLOAD_INDEX)
222
223#define NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_TYPE(F) ((F) & NVTX_PAYLOAD_ENTRY_FLAG_IS_ARRAY)
224
225#endif /* NVTX_PAYLOAD_ENTRY_FLAGS_V1 */
262#ifndef NVTX_PAYLOAD_ENTRY_TYPES_V1
263#define NVTX_PAYLOAD_ENTRY_TYPES_V1
264
265#define NVTX_PAYLOAD_ENTRY_TYPE_INVALID 0
266
270#define NVTX_PAYLOAD_ENTRY_TYPE_CHAR 1
271#define NVTX_PAYLOAD_ENTRY_TYPE_UCHAR 2
272#define NVTX_PAYLOAD_ENTRY_TYPE_SHORT 3
273#define NVTX_PAYLOAD_ENTRY_TYPE_USHORT 4
274#define NVTX_PAYLOAD_ENTRY_TYPE_INT 5
275#define NVTX_PAYLOAD_ENTRY_TYPE_UINT 6
276#define NVTX_PAYLOAD_ENTRY_TYPE_LONG 7
277#define NVTX_PAYLOAD_ENTRY_TYPE_ULONG 8
278#define NVTX_PAYLOAD_ENTRY_TYPE_LONGLONG 9
279#define NVTX_PAYLOAD_ENTRY_TYPE_ULONGLONG 10
280
284#define NVTX_PAYLOAD_ENTRY_TYPE_INT8 11
285#define NVTX_PAYLOAD_ENTRY_TYPE_UINT8 12
286#define NVTX_PAYLOAD_ENTRY_TYPE_INT16 13
287#define NVTX_PAYLOAD_ENTRY_TYPE_UINT16 14
288#define NVTX_PAYLOAD_ENTRY_TYPE_INT32 15
289#define NVTX_PAYLOAD_ENTRY_TYPE_UINT32 16
291#define NVTX_PAYLOAD_ENTRY_TYPE_INT64 17
292#define NVTX_PAYLOAD_ENTRY_TYPE_UINT64 18
293
297#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT 19
298#define NVTX_PAYLOAD_ENTRY_TYPE_DOUBLE 20
299#define NVTX_PAYLOAD_ENTRY_TYPE_LONGDOUBLE 21
300
304#define NVTX_PAYLOAD_ENTRY_TYPE_SIZE 22
305
310#define NVTX_PAYLOAD_ENTRY_TYPE_ADDRESS 23
311
315#define NVTX_PAYLOAD_ENTRY_TYPE_WCHAR 24 /* wide character (since C90) */
316#define NVTX_PAYLOAD_ENTRY_TYPE_CHAR8 25 /* since C2x and C++20 */
317#define NVTX_PAYLOAD_ENTRY_TYPE_CHAR16 26
318#define NVTX_PAYLOAD_ENTRY_TYPE_CHAR32 27
319
323#define NVTX_PAYLOAD_ENTRY_TYPE_INFO_ARRAY_SIZE (NVTX_PAYLOAD_ENTRY_TYPE_CHAR32 + 1)
324
329#define NVTX_PAYLOAD_ENTRY_TYPE_BYTE 32
330
337#define NVTX_PAYLOAD_ENTRY_TYPE_INT128 33
338#define NVTX_PAYLOAD_ENTRY_TYPE_UINT128 34
339
345#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT16 42
346#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT32 43
347#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT64 44
348#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT128 45
349
350#define NVTX_PAYLOAD_ENTRY_TYPE_BF16 50 /* bfloat16 (16-bit) */
351#define NVTX_PAYLOAD_ENTRY_TYPE_TF32 52 /* TensorFloat-32 (stored in 32 bits) */
352
358#define NVTX_PAYLOAD_ENTRY_TYPE_RANGE_ID 67 /* nvtxRangeId_t / uint64_t */
359#define NVTX_PAYLOAD_ENTRY_TYPE_CATEGORY 68 /* uint32_t */
360#define NVTX_PAYLOAD_ENTRY_TYPE_COLOR_ARGB 69 /* uint32_t */
361
365#define NVTX_PAYLOAD_ENTRY_TYPE_SCOPE_ID 70 /* uint64_t */
366
370#define NVTX_PAYLOAD_ENTRY_TYPE_PID_UINT32 71
371#define NVTX_PAYLOAD_ENTRY_TYPE_PID_UINT64 72
372
376#define NVTX_PAYLOAD_ENTRY_TYPE_TID_UINT32 73
377#define NVTX_PAYLOAD_ENTRY_TYPE_TID_UINT64 74
378
405#define NVTX_PAYLOAD_ENTRY_TYPE_CSTRING 75 /* `char*`, system LOCALE */
406#define NVTX_PAYLOAD_ENTRY_TYPE_CSTRING_UTF8 76
407#define NVTX_PAYLOAD_ENTRY_TYPE_CSTRING_UTF16 77
408#define NVTX_PAYLOAD_ENTRY_TYPE_CSTRING_UTF32 78
409
415#define NVTX_PAYLOAD_ENTRY_TYPE_NVTX_REGISTERED_STRING_HANDLE 80
416
422#define NVTX_PAYLOAD_ENTRY_TYPE_UNION_SELECTOR 100
423
433#define NVTX_TYPE_PAYLOAD_SCHEMA_REFERENCED 1022
434
442#define NVTX_TYPE_PAYLOAD_SCHEMA_RAW 1023
443
444/* Custom (static) schema IDs. */
446#define NVTX_PAYLOAD_SCHEMA_ID_STATIC_START (1 << 24)
447
448/* Dynamic schema IDs (generated by the tool) start here. */
449#define NVTX_PAYLOAD_SCHEMA_ID_DYNAMIC_START (NVTX_STATIC_CAST(uint64_t, 1) << 32)
450
451#endif /* NVTX_PAYLOAD_ENTRY_TYPES_V1 */
456#ifndef NVTX_PAYLOAD_SCHEMA_TYPES_V1
457#define NVTX_PAYLOAD_SCHEMA_TYPES_V1
458
483#define NVTX_PAYLOAD_SCHEMA_TYPE_INVALID 0
485#define NVTX_PAYLOAD_SCHEMA_TYPE_STATIC 1
487#define NVTX_PAYLOAD_SCHEMA_TYPE_DYNAMIC 2
489#define NVTX_PAYLOAD_SCHEMA_TYPE_UNION 3
491#define NVTX_PAYLOAD_SCHEMA_TYPE_UNION_WITH_INTERNAL_SELECTOR 4
492
493#endif /* NVTX_PAYLOAD_SCHEMA_TYPES_V1 */
494
495#ifndef NVTX_PAYLOAD_SCHEMA_FLAGS_V1
496#define NVTX_PAYLOAD_SCHEMA_FLAGS_V1
497
503#define NVTX_PAYLOAD_SCHEMA_FLAG_NONE 0
504
509#define NVTX_PAYLOAD_SCHEMA_FLAG_DEEP_COPY (1 << 1)
510
517#define NVTX_PAYLOAD_SCHEMA_FLAG_REFERENCED (1 << 2)
518
524#define NVTX_PAYLOAD_SCHEMA_FLAG_COUNTER_GROUP (1 << 3)
525
530#define NVTX_PAYLOAD_SCHEMA_FLAG_RANGE_PUSHPOP (2 << 3)
532#define NVTX_PAYLOAD_SCHEMA_FLAG_RANGE_STARTEND (3 << 3)
534#define NVTX_PAYLOAD_SCHEMA_FLAG_MARK (4 << 3)
535#define NVTX_PAYLOAD_SCHEMA_FLAG_RANGE_PUSH (5 << 3)
536#define NVTX_PAYLOAD_SCHEMA_FLAG_RANGE_POP (6 << 3)
537#define NVTX_PAYLOAD_SCHEMA_FLAG_RANGE_START (7 << 3)
538#define NVTX_PAYLOAD_SCHEMA_FLAG_RANGE_END (8 << 3)
539
540#endif /* NVTX_PAYLOAD_SCHEMA_FLAGS_V1 */
541
542#ifndef NVTX_PAYLOAD_SCHEMA_ATTR_FIELDS_V1
543#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELDS_V1
544
552#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_NAME (1 << 1)
553#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_TYPE (1 << 2)
554#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_FLAGS (1 << 3)
555#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_ENTRIES (1 << 4)
556#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_NUM_ENTRIES (1 << 5)
557#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_STATIC_SIZE (1 << 6)
558#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_ALIGNMENT (1 << 7)
559#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_SCHEMA_ID (1 << 8)
560#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_EXTENSION (1 << 9)
561
562#endif /* NVTX_PAYLOAD_SCHEMA_ATTR_FIELDS_V1 */
563
564#ifndef NVTX_PAYLOAD_ENUM_ATTR_FIELDS_V1
565#define NVTX_PAYLOAD_ENUM_ATTR_FIELDS_V1
566
574#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_NAME (1 << 1)
575#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_ENTRIES (1 << 2)
576#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_NUM_ENTRIES (1 << 3)
577#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_SIZE (1 << 4)
578#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_SCHEMA_ID (1 << 5)
579#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_EXTENSION (1 << 6)
580
581#endif /* NVTX_PAYLOAD_ENUM_ATTR_FIELDS_V1 */
582
622#ifndef NVTX_SCOPES_V1
623#define NVTX_SCOPES_V1
624
626#define NVTX_SCOPE_NONE 0 /* No scope specified. */
627#define NVTX_SCOPE_ROOT 1 /* The root in a hierarchy. */
628
629/* Hardware events */
630#define NVTX_SCOPE_CURRENT_HW_MACHINE 2 /* Node/machine name */
631#define NVTX_SCOPE_CURRENT_HW_SOCKET 3
632#define NVTX_SCOPE_CURRENT_HW_CPU_PHYSICAL 4 /* Physical CPU core */
633#define NVTX_SCOPE_CURRENT_HW_CPU_LOGICAL 5 /* Logical CPU core */
634/* Innermost HW execution context */
635#define NVTX_SCOPE_CURRENT_HW_INNERMOST 15
636
637/* Virtualized hardware, virtual machines */
638#define NVTX_SCOPE_CURRENT_HYPERVISOR 16
639#define NVTX_SCOPE_CURRENT_VM 17
640#define NVTX_SCOPE_CURRENT_KERNEL 18
641#define NVTX_SCOPE_CURRENT_CONTAINER 19
642#define NVTX_SCOPE_CURRENT_OS 20
643
644/* Software scopes */
645#define NVTX_SCOPE_CURRENT_SW_PROCESS 21 /* Process scope */
646#define NVTX_SCOPE_CURRENT_SW_THREAD 22 /* Thread scope */
647/* Innermost SW execution context */
648#define NVTX_SCOPE_CURRENT_SW_INNERMOST 31
649
651#define NVTX_SCOPE_ID_STATIC_START (1 << 24)
652
653/* Dynamically (tool) generated scope IDs */
654#define NVTX_SCOPE_ID_DYNAMIC_START (NVTX_STATIC_CAST(uint64_t, 1) << 32)
655
656#endif /* NVTX_SCOPES_V1 */
657
658#ifndef NVTX_TIME_V1
659#define NVTX_TIME_V1
660
672#define NVTX_TIMESTAMP_TYPE_NONE 0
673
675#define NVTX_TIMESTAMP_TYPE_TOOL_PROVIDED 1
676
678/* RDTSC on x86, CNTVCT on ARM */
679#define NVTX_TIMESTAMP_TYPE_CPU_TSC 10
680/* CNTPCT on ARM */
681#define NVTX_TIMESTAMP_TYPE_CPU_TSC_NONVIRTUALIZED 11
682/* Nanoseconds since epoch (relative to UTC), clock_gettime(CLOCK_REALTIME) */
683#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_REALTIME 12
684/* Same as above but less overhead and precision (1-10 ms) */
685#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_REALTIME_COARSE 13
686/* POSIX, Time since system boot, adjusted by NTP */
687#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_MONOTONIC 14
688/* Linux only, Time since system boot, no NTP or frequency corrections */
689#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_MONOTONIC_RAW 15
690/* Same as `CLOCK_MONOTONIC`, but less overhead and precision (1-10ms) */
691#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_MONOTONIC_COARSE 16
692/* Same as `CLOCK_MONOTONIC`, but including suspended time. */
693#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_BOOTTIME 17
694/* The total CPU time consumed by the calling process. */
695#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_PROCESS_CPUTIME_ID 18
696/* The total CPU time consumed by the calling thread. */
697#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_THREAD_CPUTIME_ID 19
698
700#define NVTX_TIMESTAMP_TYPE_WIN_QPC 30 /* QueryPerformanceCounter */
701#define NVTX_TIMESTAMP_TYPE_WIN_GSTAFT 31 /* GetSystemTimeAsFileTime */
702#define NVTX_TIMESTAMP_TYPE_WIN_GSTAFTP 32 /* GetSystemTimePreciseAsFileTime */
703
705/* Seconds since epoch (represented in C as `time_t`) */
706#define NVTX_TIMESTAMP_TYPE_C_TIME 40
707/* CPU clock value (represented in C as `clock_t`) as returned by `clock()` */
708#define NVTX_TIMESTAMP_TYPE_C_CLOCK 41
709/* High-resolution time into struct timespec (C11) */
710#define NVTX_TIMESTAMP_TYPE_C_TIMESPEC_GET 42
711
713/* std::chrono::steady_clock (monotonic clock), similar to `CLOCK_MONOTONIC` */
714#define NVTX_TIMESTAMP_TYPE_CPP_STEADY_CLOCK 50
715/* std::chrono::high_resolution_clock, similar to `CLOCK_MONOTONIC` or `CLOCK_MONOTONIC_RAW` */
716#define NVTX_TIMESTAMP_TYPE_CPP_HIGH_RESOLUTION_CLOCK 51
717/* std::chrono::system_clock, similar to `CLOCK_REALTIME` */
718#define NVTX_TIMESTAMP_TYPE_CPP_SYSTEM_CLOCK 52
719/* (since C++20) std::chrono::utc_clock, similar to `CPP_SYSTEM_CLOCK` */
720#define NVTX_TIMESTAMP_TYPE_CPP_UTC_CLOCK 53
721/* (since C++20) std::chrono::tai_clock */
722#define NVTX_TIMESTAMP_TYPE_CPP_TAI_CLOCK 54
723/* (since C++20) std::chrono::gps_clock */
724#define NVTX_TIMESTAMP_TYPE_CPP_GPS_CLOCK 55
725/* (since C++20) std::chrono::file_clock */
726#define NVTX_TIMESTAMP_TYPE_CPP_FILE_CLOCK 56
727
729#define NVTX_TIMESTAMP_TYPE_GPU_GLOBALTIMER 80 /* e.g. PTIMER */
730
732#define NVTX_TIME_DOMAIN_ID_NONE 0
733
735#define NVTX_TIME_DOMAIN_ID_STATIC_START (1 << 24)
736
737/* Dynamically (tool) generated time domain IDs */
738#define NVTX_TIME_DOMAIN_ID_DYNAMIC_START (NVTX_STATIC_CAST(uint64_t, 1) << 32)
739
741#define NVTX_TIMER_FLAG_NONE 0
742#define NVTX_TIMER_FLAG_CLOCK_MONOTONIC (1 << 1)
743#define NVTX_TIMER_FLAG_CLOCK_STEADY (1 << 2)
744
746#define NVTX_TIMER_START_UNKNOWN 0
747#define NVTX_TIMER_START_SYSTEM_BOOT 1
748#define NVTX_TIMER_START_VM_BOOT 2
749#define NVTX_TIMER_START_UNIX_EPOCH 3 /* 1 January 1970 */
750#define NVTX_TIMER_START_WIN_FILETIME 4 /* 1 January 1601 */
751
756#define NVTX_TIMER_SOURCE_SAFE_CALL_AFTER_PROCESS_TEARDOWN 0
757#define NVTX_TIMER_SOURCE_UNSAFE_CALL_AFTER_PROCESS_TEARDOWN 1
758
759#endif /* NVTX_TIME_V1 */
760
761#ifndef NVTX_BATCH_FLAGS_V1
762#define NVTX_BATCH_FLAGS_V1
763
769#define NVTX_BATCH_FLAG_TIME_SORTED 0
770#define NVTX_BATCH_FLAG_TIME_SORTED_PARTIALLY (1 << 1)
771#define NVTX_BATCH_FLAG_TIME_SORTED_PER_SCOPE (2 << 1)
772#define NVTX_BATCH_FLAG_UNSORTED (3 << 1)
773
774#endif /* NVTX_BATCH_FLAGS_V1 */
775
776#ifdef __cplusplus
777extern "C" {
778#endif /* __cplusplus */
779
780#ifndef NVTX_PAYLOAD_TYPEDEFS_V1
781#define NVTX_PAYLOAD_TYPEDEFS_V1
782
798typedef struct nvtxPayloadEntryTypeInfo_v1
799{
800 uint16_t size;
801 uint16_t align;
803
818typedef struct nvtxPayloadData_v1
819{
835 uint64_t schemaId;
836
853 size_t size;
854
858 const void* payload;
860
867typedef struct nvtxSemanticsHeader_v1
868{
869 uint32_t structSize;
870 uint16_t semanticId;
871 uint16_t version;
872 const struct nvtxSemanticsHeader_v1* next;
873 /* Additional fields are defined by the specific semantic extension. */
875
890typedef struct nvtxPayloadSchemaEntry_v1
891{
898 uint64_t flags;
899
913 uint64_t type;
914
920 const char* name;
921
927 const char* description;
928
955
977 uint64_t offset;
978
986
990 const void* reserved;
992
996typedef struct nvtxPayloadSchemaAttr_v1
997{
1003 uint64_t fieldMask;
1004
1008 const char* name;
1009
1015 uint64_t type;
1016
1023 uint64_t flags;
1024
1032
1039
1049
1064
1075 uint64_t schemaId;
1076
1080
1088typedef struct nvtxPayloadEnum_v1
1089{
1093 const char* name;
1094
1098 uint64_t value;
1099
1101 int8_t isFlag;
1103
1109typedef struct nvtxPayloadEnumAttr_v1
1110{
1114 uint64_t fieldMask;
1115
1119 const char* name;
1120
1125
1130
1139
1145 uint64_t schemaId;
1146
1150
1151typedef struct nvtxScopeAttr_v1
1152{
1156
1201 const char* path;
1202
1209 uint64_t parentScope;
1210
1216 uint64_t scopeId;
1218
1219#endif /* NVTX_PAYLOAD_TYPEDEFS_V1 */
1220
1221#ifndef NVTX_PAYLOAD_TYPEDEFS_DEFERRED_V1
1222#define NVTX_PAYLOAD_TYPEDEFS_DEFERRED_V1
1223
1225typedef struct nvtxTimeDomainAttr_v1
1226{
1228 uint64_t scopeId;
1229
1232
1239
1241 uint64_t timerFlags;
1242
1245
1247 uint64_t timerStart;
1249
1254typedef struct nvtxSyncPoint_v1
1255{
1257 int64_t src;
1259 int64_t dst;
1261
1269typedef struct nvtxEventBatch_v1
1270{
1277
1279 size_t size;
1280
1288 const void* events;
1289
1301 uint64_t scope;
1302
1304 uint64_t flags;
1305
1314 const void* flexData;
1315
1318
1325
1326#endif /* NVTX_PAYLOAD_TYPEDEFS_DEFERRED_V1 */
1327
1328#ifndef NVTX_PAYLOAD_API_FUNCTIONS_V1
1329#define NVTX_PAYLOAD_API_FUNCTIONS_V1
1330
1342NVTX_DECLSPEC uint64_t NVTX_API
1343nvtxPayloadSchemaRegister(nvtxDomainHandle_t domain, const nvtxPayloadSchemaAttr_t* attr);
1344
1355NVTX_DECLSPEC uint64_t NVTX_API
1356nvtxPayloadEnumRegister(nvtxDomainHandle_t domain, const nvtxPayloadEnumAttr_t* attr);
1357
1369NVTX_DECLSPEC uint64_t NVTX_API
1370nvtxScopeRegister(nvtxDomainHandle_t domain, const nvtxScopeAttr_t* attr);
1371
1382NVTX_DECLSPEC void NVTX_API
1383nvtxMarkPayload(nvtxDomainHandle_t domain, const nvtxPayloadData_t* payloadData, size_t count);
1384
1398NVTX_DECLSPEC int NVTX_API
1399nvtxRangePushPayload(nvtxDomainHandle_t domain, const nvtxPayloadData_t* payloadData, size_t count);
1400
1418NVTX_DECLSPEC int NVTX_API
1419nvtxRangePopPayload(nvtxDomainHandle_t domain, const nvtxPayloadData_t* payloadData, size_t count);
1420
1435NVTX_DECLSPEC nvtxRangeId_t NVTX_API nvtxRangeStartPayload(
1436 nvtxDomainHandle_t domain, const nvtxPayloadData_t* payloadData, size_t count);
1437
1448NVTX_DECLSPEC void NVTX_API nvtxRangeEndPayload(
1449 nvtxDomainHandle_t domain,
1450 nvtxRangeId_t id,
1451 const nvtxPayloadData_t* payloadData,
1452 size_t count);
1453
1470NVTX_DECLSPEC uint8_t NVTX_API nvtxDomainIsEnabled(nvtxDomainHandle_t domain);
1471
1472#endif /* NVTX_PAYLOAD_API_FUNCTIONS_V1 */
1473
1474#ifndef NVTX_PAYLOAD_API_FUNCTIONS_DEFERRED_V1
1475#define NVTX_PAYLOAD_API_FUNCTIONS_DEFERRED_V1
1476
1482NVTX_DECLSPEC int64_t NVTX_API nvtxTimestampGet(void);
1483
1493NVTX_DECLSPEC uint64_t NVTX_API
1494nvtxTimeDomainRegister(nvtxDomainHandle_t domain, const nvtxTimeDomainAttr_t* timeAttr);
1495
1507NVTX_DECLSPEC void NVTX_API nvtxTimerSource(
1508 nvtxDomainHandle_t domain,
1509 uint64_t timeDomainId,
1510 uint64_t flags,
1511 int64_t (*timestampProviderFn)(void));
1512
1524NVTX_DECLSPEC void NVTX_API nvtxTimerSourceWithData(
1525 nvtxDomainHandle_t domain,
1526 uint64_t timeDomainId,
1527 uint64_t flags,
1528 int64_t (*timestampProviderFn)(void* data),
1529 void* data);
1530
1545NVTX_DECLSPEC void NVTX_API nvtxTimeSyncPoint(
1546 nvtxDomainHandle_t domain,
1547 uint64_t timeDomainId1,
1548 uint64_t timeDomainId2,
1549 int64_t timestamp1,
1550 int64_t timestamp2);
1551
1563NVTX_DECLSPEC void NVTX_API nvtxTimeSyncPointTable(
1564 nvtxDomainHandle_t domain,
1565 uint64_t timeDomainIdSrc,
1566 uint64_t timeDomainIdDst,
1567 const nvtxSyncPoint_t* syncPoints,
1568 size_t count);
1569
1582NVTX_DECLSPEC void NVTX_API nvtxTimestampConversionFactor(
1583 nvtxDomainHandle_t domain,
1584 uint64_t timeDomainIdSrc,
1585 uint64_t timeDomainIdDst,
1586 double slope,
1587 int64_t timestampSrc,
1588 int64_t timestampDst);
1589
1599NVTX_DECLSPEC void NVTX_API nvtxEventSubmit(
1600 nvtxDomainHandle_t domain, const nvtxPayloadData_t* payloadData, size_t numPayloads);
1601
1608NVTX_DECLSPEC void NVTX_API
1609nvtxEventBatchSubmit(nvtxDomainHandle_t domain, const nvtxEventBatch_t* eventBatch);
1610
1611#endif /* NVTX_PAYLOAD_API_FUNCTIONS_DEFERRED_V1 */
1612
1624#ifndef NVTX_PAYLOAD_CALLBACK_ID_V1
1625#define NVTX_PAYLOAD_CALLBACK_ID_V1
1626
1627#define NVTX3EXT_CBID_nvtxPayloadSchemaRegister 0
1628#define NVTX3EXT_CBID_nvtxPayloadEnumRegister 1
1629#define NVTX3EXT_CBID_nvtxMarkPayload 2
1630#define NVTX3EXT_CBID_nvtxRangePushPayload 3
1631#define NVTX3EXT_CBID_nvtxRangePopPayload 4
1632#define NVTX3EXT_CBID_nvtxRangeStartPayload 5
1633#define NVTX3EXT_CBID_nvtxRangeEndPayload 6
1634#define NVTX3EXT_CBID_nvtxDomainIsEnabled 7
1635#define NVTX3EXT_CBID_nvtxScopeRegister 12
1636
1637#endif /* NVTX_PAYLOAD_CALLBACK_ID_V1 */
1638
1639#ifndef NVTX_PAYLOAD_CALLBACK_ID_DEFERRED_V1
1640#define NVTX_PAYLOAD_CALLBACK_ID_DEFERRED_V1
1641
1642#define NVTX3EXT_CBID_nvtxTimestampGet 8
1643#define NVTX3EXT_CBID_nvtxTimeDomainRegister 9
1644#define NVTX3EXT_CBID_nvtxTimerSource 10
1645#define NVTX3EXT_CBID_nvtxTimerSourceWithData 11
1646#define NVTX3EXT_CBID_nvtxTimeSyncPoint 13
1647#define NVTX3EXT_CBID_nvtxTimeSyncPointTable 14
1648#define NVTX3EXT_CBID_nvtxTimestampConversionFactor 15
1649#define NVTX3EXT_CBID_nvtxEventSubmit 16
1650#define NVTX3EXT_CBID_nvtxEventBatchSubmit 17
1651
1652#endif /* NVTX_PAYLOAD_CALLBACK_ID_DEFERRED_V1 */
1653
1654/*** Helper utilities ***/
1655
1657#ifndef NVTX_POINTER_AS_PAYLOAD_ULLVALUE
1658#ifdef __cplusplus
1659#define NVTX_POINTER_AS_PAYLOAD_ULLVALUE(p) static_cast<uint64_t>(reinterpret_cast<uintptr_t>(p))
1660#else
1661#define NVTX_POINTER_AS_PAYLOAD_ULLVALUE(p) \
1662 (NVTX_STATIC_CAST(uint64_t, NVTX_STATIC_CAST(uintptr_t, p)))
1663#endif
1664#endif
1665
1666#ifndef NVTX_PAYLOAD_EVTATTR_SET_DATA
1676#define NVTX_PAYLOAD_EVTATTR_SET_DATA(evtAttr, pldata_addr, schema_id, pl_addr, sz) \
1677 (pldata_addr)->schemaId = schema_id; \
1678 (pldata_addr)->size = sz; \
1679 (pldata_addr)->payload = pl_addr; \
1680 (evtAttr).payload.ullValue = NVTX_POINTER_AS_PAYLOAD_ULLVALUE(pldata_addr); \
1681 (evtAttr).payloadType = NVTX_PAYLOAD_TYPE_EXT; \
1682 (evtAttr).reserved0 = 1;
1683#endif /* NVTX_PAYLOAD_EVTATTR_SET_DATA */
1684
1685#ifndef NVTX_PAYLOAD_EVTATTR_SET_MULTIPLE
1692#define NVTX_PAYLOAD_EVTATTR_SET_MULTIPLE(evtAttr, pldata) \
1693 (evtAttr).payloadType = NVTX_PAYLOAD_TYPE_EXT; \
1694 (evtAttr).reserved0 = sizeof(pldata) / sizeof(nvtxPayloadData_t); \
1695 (evtAttr).payload.ullValue = NVTX_POINTER_AS_PAYLOAD_ULLVALUE(pldata);
1696#endif /* NVTX_PAYLOAD_EVTATTR_SET_MULTIPLE */
1697
1698#ifndef NVTX_PAYLOAD_EVTATTR_SET_MULTIPLE_N
1707#define NVTX_PAYLOAD_EVTATTR_SET_MULTIPLE_N(evtAttr, pldata, count) \
1708 (evtAttr).payloadType = NVTX_PAYLOAD_TYPE_EXT; \
1709 (evtAttr).reserved0 = NVTX_STATIC_CAST(int32_t, count); \
1710 (evtAttr).payload.ullValue = NVTX_POINTER_AS_PAYLOAD_ULLVALUE(pldata);
1711#endif /* NVTX_PAYLOAD_EVTATTR_SET_MULTIPLE_N */
1712
1713#ifndef NVTX_PAYLOAD_EVTATTR_SET
1714/*
1715 * Do not use this macro directly! It is a helper to attach a single payload to
1716 * an NVTX event attribute.
1717 * @warning The NVTX push, start, or mark call must be in the same scope.
1718 */
1719#define NVTX_PAYLOAD_EVTATTR_SET(evtAttr, schema_id, pl_addr, sz) \
1720 nvtxPayloadData_t _NVTX_PAYLOAD_DATA_VAR[] = {{schema_id, sz, pl_addr}}; \
1721 (evtAttr)->payload.ullValue = NVTX_POINTER_AS_PAYLOAD_ULLVALUE(_NVTX_PAYLOAD_DATA_VAR); \
1722 (evtAttr)->payloadType = NVTX_PAYLOAD_TYPE_EXT; \
1723 (evtAttr)->reserved0 = 1;
1724#endif /* NVTX_PAYLOAD_EVTATTR_SET */
1725
1726#ifndef nvtxPayloadRangePush
1736#define nvtxPayloadRangePush(domain, evtAttr, schemaId, plAddr, size) \
1737 do \
1738 { \
1739 NVTX_PAYLOAD_EVTATTR_SET(evtAttr, schemaId, plAddr, size) \
1740 nvtxDomainRangePushEx(domain, evtAttr); \
1741 } while (0)
1742#endif /* nvtxPayloadRangePush */
1743
1744#ifndef nvtxPayloadMark
1754#define nvtxPayloadMark(domain, evtAttr, schemaId, plAddr, size) \
1755 do \
1756 { \
1757 NVTX_PAYLOAD_EVTATTR_SET(evtAttr, schemaId, plAddr, size) \
1758 nvtxDomainMarkEx(domain, evtAttr); \
1759 } while (0)
1760#endif /* nvtxPayloadMark */
1761
1762/* Macros to create versioned symbols. */
1763#ifndef NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIERS_V1
1764#define NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIERS_V1
1765#define NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIER_L3(NAME, VERSION, COMPATID) \
1766 NAME##_v##VERSION##_bpl##COMPATID
1767#define NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIER_L2(NAME, VERSION, COMPATID) \
1768 NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIER_L3(NAME, VERSION, COMPATID)
1769#define NVTX_EXT_PAYLOAD_VERSIONED_ID(NAME) \
1770 NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIER_L2(NAME, NVTX_VERSION, NVTX_EXT_PAYLOAD_COMPATID)
1771#endif /* NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIERS_V1 */
1772
1773#ifdef __GNUC__
1774#pragma GCC visibility push(internal)
1775#endif
1776
1777/* Extension types are required for the implementation and the NVTX handler. */
1778#define NVTX_EXT_TYPES_GUARD
1779#include "nvtxDetail/nvtxExtTypes.h"
1780#undef NVTX_EXT_TYPES_GUARD
1781
1782#ifndef NVTX_NO_IMPL
1783#define NVTX_EXT_IMPL_PAYLOAD_GUARD
1784#include "nvtxDetail/nvtxExtImplPayload_v1.h"
1785#undef NVTX_EXT_IMPL_PAYLOAD_GUARD
1786#endif /* NVTX_NO_IMPL */
1787
1788#ifdef __GNUC__
1789#pragma GCC visibility pop
1790#endif
1791
1792#ifdef __cplusplus
1793}
1794#endif /* __cplusplus */
NVTX_DECLSPEC void NVTX_API nvtxTimerSourceWithData(nvtxDomainHandle_t domain, uint64_t timeDomainId, uint64_t flags, int64_t(*timestampProviderFn)(void *data), void *data)
NVTX_DECLSPEC void NVTX_API nvtxMarkPayload(nvtxDomainHandle_t domain, const nvtxPayloadData_t *payloadData, size_t count)
Marks an instantaneous event in the application with the attributes being passed via the extended pay...
NVTX_DECLSPEC uint64_t NVTX_API nvtxScopeRegister(nvtxDomainHandle_t domain, const nvtxScopeAttr_t *attr)
Register a scope.
NVTX_DECLSPEC void NVTX_API nvtxEventSubmit(nvtxDomainHandle_t domain, const nvtxPayloadData_t *payloadData, size_t numPayloads)
Submit one deferred event.
NVTX_DECLSPEC void NVTX_API nvtxTimeSyncPoint(nvtxDomainHandle_t domain, uint64_t timeDomainId1, uint64_t timeDomainId2, int64_t timestamp1, int64_t timestamp2)
NVTX_DECLSPEC int64_t NVTX_API nvtxTimestampGet(void)
NVTX_DECLSPEC uint64_t NVTX_API nvtxTimeDomainRegister(nvtxDomainHandle_t domain, const nvtxTimeDomainAttr_t *timeAttr)
NVTX_DECLSPEC void NVTX_API nvtxRangeEndPayload(nvtxDomainHandle_t domain, nvtxRangeId_t id, const nvtxPayloadData_t *payloadData, size_t count)
End a thread range and pass a custom payload.
NVTX_DECLSPEC uint64_t NVTX_API nvtxPayloadSchemaRegister(nvtxDomainHandle_t domain, const nvtxPayloadSchemaAttr_t *attr)
Register a payload schema.
NVTX_DECLSPEC uint8_t NVTX_API nvtxDomainIsEnabled(nvtxDomainHandle_t domain)
Checks if the given NVTX domain is enabled.
NVTX_DECLSPEC int NVTX_API nvtxRangePushPayload(nvtxDomainHandle_t domain, const nvtxPayloadData_t *payloadData, size_t count)
Begin a nested thread range with the attributes being passed via the payload.
NVTX_DECLSPEC uint64_t NVTX_API nvtxPayloadEnumRegister(nvtxDomainHandle_t domain, const nvtxPayloadEnumAttr_t *attr)
Register an enumeration type with the payload extension.
NVTX_DECLSPEC void NVTX_API nvtxEventBatchSubmit(nvtxDomainHandle_t domain, const nvtxEventBatch_t *eventBatch)
Submit a batch of deferred events in the given domain.
NVTX_DECLSPEC nvtxRangeId_t NVTX_API nvtxRangeStartPayload(nvtxDomainHandle_t domain, const nvtxPayloadData_t *payloadData, size_t count)
Start a thread range with attributes passed via the extended payload.
NVTX_DECLSPEC int NVTX_API nvtxRangePopPayload(nvtxDomainHandle_t domain, const nvtxPayloadData_t *payloadData, size_t count)
End a nested thread range with an additional custom payload.
NVTX_DECLSPEC void NVTX_API nvtxTimerSource(nvtxDomainHandle_t domain, uint64_t timeDomainId, uint64_t flags, int64_t(*timestampProviderFn)(void))
NVTX_DECLSPEC void NVTX_API nvtxTimeSyncPointTable(nvtxDomainHandle_t domain, uint64_t timeDomainIdSrc, uint64_t timeDomainIdDst, const nvtxSyncPoint_t *syncPoints, size_t count)
NVTX_DECLSPEC void NVTX_API nvtxTimestampConversionFactor(nvtxDomainHandle_t domain, uint64_t timeDomainIdSrc, uint64_t timeDomainIdDst, double slope, int64_t timestampSrc, int64_t timestampDst)
Pass a conversion factor between two time domains to the NVTX handler.
Helper struct to submit a batch of events (marks or ranges).
const void * events
Pointer to the array of deferred events.
const void * flexData
Flexible data blob referenced by events in the batch.
Binary payload data, size and decoding information.
uint64_t schemaId
The schema ID, which defines the layout of the binary data.
size_t size
Size of the payload (blob) in bytes.
Size and alignment information for predefined payload entry types.
Description of one enumeration value.
NVTX payload enumeration type attributes.
size_t sizeOfEnum
Size of the enumeration type in bytes. (Mandatory)
const nvtxPayloadEnum_t * entries
uint64_t schemaId
Unique identifier for this enum type.
NVTX payload schema attributes.
uint64_t type
Payload schema type. (Mandatory).
size_t payloadStaticSize
The binary payload size in bytes for static payload schemas.
size_t packAlign
The byte alignment for packed structures.
const char * name
Name of the payload schema. (Optional)
uint64_t fieldMask
Mask of valid fields in this struct.
uint64_t schemaId
Unique identifier for this schema.
uint64_t flags
Payload schema flags. (Optional)
const nvtxPayloadSchemaEntry_t * entries
Entries of a payload schema. (Mandatory).
size_t numEntries
Number of entries in the payload schema. (Mandatory)
Entry in a schema.
uint64_t arrayOrUnionDetail
String length, array length or member selector for union types.
uint64_t type
Predefined payload schema entry type, registered enum ID, or registered schema ID.
uint64_t offset
Offset in the binary payload data (in bytes).
const char * description
Description of the payload entry. (Optional)
const nvtxSemanticsHeader_t * semantics
Additional semantics of the payload entry.
const char * name
Name or label of the payload entry. (Optional)
const void * reserved
Reserved for future use.
uint64_t flags
Flags to augment the basic type.
Header of the payload entry's semantic field.
const struct nvtxSemanticsHeader_v1 * next
A pair of timestamps taken at the same instant in two different time domains. Used with nvtxTimeSyncP...