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)
200#define NVTX_PAYLOAD_ENTRY_FLAG_RANGE_END (2 << 12)
201#define NVTX_PAYLOAD_ENTRY_FLAG_MARK (3 << 12)
202#define NVTX_PAYLOAD_ENTRY_FLAG_COUNTER (4 << 12)
203
214/* Helper macro to check if an entry represents an array. */
215#define NVTX_PAYLOAD_ENTRY_FLAG_IS_ARRAY \
216 (NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_FIXED_SIZE | NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_ZERO_TERMINATED | \
217 NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_LENGTH_INDEX | \
218 NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_LENGTH_PAYLOAD_INDEX)
219
220#define NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_TYPE(F) ((F) & NVTX_PAYLOAD_ENTRY_FLAG_IS_ARRAY)
221
222#endif /* NVTX_PAYLOAD_ENTRY_FLAGS_V1 */
258#ifndef NVTX_PAYLOAD_ENTRY_TYPES_V1
259#define NVTX_PAYLOAD_ENTRY_TYPES_V1
260
261#define NVTX_PAYLOAD_ENTRY_TYPE_INVALID 0
262
266#define NVTX_PAYLOAD_ENTRY_TYPE_CHAR 1
267#define NVTX_PAYLOAD_ENTRY_TYPE_UCHAR 2
268#define NVTX_PAYLOAD_ENTRY_TYPE_SHORT 3
269#define NVTX_PAYLOAD_ENTRY_TYPE_USHORT 4
270#define NVTX_PAYLOAD_ENTRY_TYPE_INT 5
271#define NVTX_PAYLOAD_ENTRY_TYPE_UINT 6
272#define NVTX_PAYLOAD_ENTRY_TYPE_LONG 7
273#define NVTX_PAYLOAD_ENTRY_TYPE_ULONG 8
274#define NVTX_PAYLOAD_ENTRY_TYPE_LONGLONG 9
275#define NVTX_PAYLOAD_ENTRY_TYPE_ULONGLONG 10
276
280#define NVTX_PAYLOAD_ENTRY_TYPE_INT8 11
281#define NVTX_PAYLOAD_ENTRY_TYPE_UINT8 12
282#define NVTX_PAYLOAD_ENTRY_TYPE_INT16 13
283#define NVTX_PAYLOAD_ENTRY_TYPE_UINT16 14
284#define NVTX_PAYLOAD_ENTRY_TYPE_INT32 15
285#define NVTX_PAYLOAD_ENTRY_TYPE_UINT32 16
286#define NVTX_PAYLOAD_ENTRY_TYPE_INT64 17
287#define NVTX_PAYLOAD_ENTRY_TYPE_UINT64 18
288
292#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT 19
293#define NVTX_PAYLOAD_ENTRY_TYPE_DOUBLE 20
294#define NVTX_PAYLOAD_ENTRY_TYPE_LONGDOUBLE 21
295
299#define NVTX_PAYLOAD_ENTRY_TYPE_SIZE 22
300
305#define NVTX_PAYLOAD_ENTRY_TYPE_ADDRESS 23
306
310#define NVTX_PAYLOAD_ENTRY_TYPE_WCHAR 24 /* wide character (since C90) */
311#define NVTX_PAYLOAD_ENTRY_TYPE_CHAR8 25 /* since C2x and C++20 */
312#define NVTX_PAYLOAD_ENTRY_TYPE_CHAR16 26
313#define NVTX_PAYLOAD_ENTRY_TYPE_CHAR32 27
314
318#define NVTX_PAYLOAD_ENTRY_TYPE_INFO_ARRAY_SIZE (NVTX_PAYLOAD_ENTRY_TYPE_CHAR32 + 1)
319
324#define NVTX_PAYLOAD_ENTRY_TYPE_BYTE 32
325
332#define NVTX_PAYLOAD_ENTRY_TYPE_INT128 33
333#define NVTX_PAYLOAD_ENTRY_TYPE_UINT128 34
334
340#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT16 42
341#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT32 43
342#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT64 44
343#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT128 45
344
345#define NVTX_PAYLOAD_ENTRY_TYPE_BF16 50 /* bfloat16 (16-bit) */
346#define NVTX_PAYLOAD_ENTRY_TYPE_TF32 52 /* TensorFloat-32 (stored in 32 bits) */
347
353#define NVTX_PAYLOAD_ENTRY_TYPE_CATEGORY 68 /* uint32_t */
354#define NVTX_PAYLOAD_ENTRY_TYPE_COLOR_ARGB 69 /* uint32_t */
355
359#define NVTX_PAYLOAD_ENTRY_TYPE_SCOPE_ID 70 /* uint64_t */
360
364#define NVTX_PAYLOAD_ENTRY_TYPE_PID_UINT32 71
365#define NVTX_PAYLOAD_ENTRY_TYPE_PID_UINT64 72
366
370#define NVTX_PAYLOAD_ENTRY_TYPE_TID_UINT32 73
371#define NVTX_PAYLOAD_ENTRY_TYPE_TID_UINT64 74
372
399#define NVTX_PAYLOAD_ENTRY_TYPE_CSTRING 75 /* `char*`, system LOCALE */
400#define NVTX_PAYLOAD_ENTRY_TYPE_CSTRING_UTF8 76
401#define NVTX_PAYLOAD_ENTRY_TYPE_CSTRING_UTF16 77
402#define NVTX_PAYLOAD_ENTRY_TYPE_CSTRING_UTF32 78
403
408#define NVTX_PAYLOAD_ENTRY_TYPE_NVTX_REGISTERED_STRING_HANDLE 80
409
415#define NVTX_PAYLOAD_ENTRY_TYPE_UNION_SELECTOR 100
416
426#define NVTX_TYPE_PAYLOAD_SCHEMA_REFERENCED 1022
427
435#define NVTX_TYPE_PAYLOAD_SCHEMA_RAW 1023
436
437/* Custom (static) schema IDs. */
438#define NVTX_PAYLOAD_SCHEMA_ID_STATIC_START (1 << 24)
439
440/* Dynamic schema IDs (generated by the tool) start here. */
441#define NVTX_PAYLOAD_SCHEMA_ID_DYNAMIC_START (NVTX_STATIC_CAST(uint64_t, 1) << 32)
442
443#endif /* NVTX_PAYLOAD_ENTRY_TYPES_V1 */
448#ifndef NVTX_PAYLOAD_SCHEMA_TYPES_V1
449#define NVTX_PAYLOAD_SCHEMA_TYPES_V1
450
475#define NVTX_PAYLOAD_SCHEMA_TYPE_INVALID 0
476#define NVTX_PAYLOAD_SCHEMA_TYPE_STATIC 1
477#define NVTX_PAYLOAD_SCHEMA_TYPE_DYNAMIC 2
478#define NVTX_PAYLOAD_SCHEMA_TYPE_UNION 3
479#define NVTX_PAYLOAD_SCHEMA_TYPE_UNION_WITH_INTERNAL_SELECTOR 4
480
481#endif /* NVTX_PAYLOAD_SCHEMA_TYPES_V1 */
482
483#ifndef NVTX_PAYLOAD_SCHEMA_FLAGS_V1
484#define NVTX_PAYLOAD_SCHEMA_FLAGS_V1
485
491#define NVTX_PAYLOAD_SCHEMA_FLAG_NONE 0
492
497#define NVTX_PAYLOAD_SCHEMA_FLAG_DEEP_COPY (1 << 1)
498
505#define NVTX_PAYLOAD_SCHEMA_FLAG_REFERENCED (1 << 2)
506
512#define NVTX_PAYLOAD_SCHEMA_FLAG_COUNTER_GROUP (1 << 3)
513
518#define NVTX_PAYLOAD_SCHEMA_FLAG_RANGE_PUSHPOP (2 << 3)
519#define NVTX_PAYLOAD_SCHEMA_FLAG_RANGE_STARTEND (3 << 3)
520#define NVTX_PAYLOAD_SCHEMA_FLAG_MARK (4 << 3)
521
522#endif /* NVTX_PAYLOAD_SCHEMA_FLAGS_V1 */
523
524#ifndef NVTX_PAYLOAD_SCHEMA_ATTR_FIELDS_V1
525#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELDS_V1
526
534#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_NAME (1 << 1)
535#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_TYPE (1 << 2)
536#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_FLAGS (1 << 3)
537#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_ENTRIES (1 << 4)
538#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_NUM_ENTRIES (1 << 5)
539#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_STATIC_SIZE (1 << 6)
540#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_ALIGNMENT (1 << 7)
541#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_SCHEMA_ID (1 << 8)
542#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_EXTENSION (1 << 9)
543
544#endif /* NVTX_PAYLOAD_SCHEMA_ATTR_FIELDS_V1 */
545
546#ifndef NVTX_PAYLOAD_ENUM_ATTR_FIELDS_V1
547#define NVTX_PAYLOAD_ENUM_ATTR_FIELDS_V1
548
556#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_NAME (1 << 1)
557#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_ENTRIES (1 << 2)
558#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_NUM_ENTRIES (1 << 3)
559#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_SIZE (1 << 4)
560#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_SCHEMA_ID (1 << 5)
561#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_EXTENSION (1 << 6)
562
563#endif /* NVTX_PAYLOAD_ENUM_ATTR_FIELDS_V1 */
564
604#ifndef NVTX_SCOPES_V1
605#define NVTX_SCOPES_V1
606
607#define NVTX_SCOPE_NONE 0 /* No scope specified. */
608#define NVTX_SCOPE_ROOT 1 /* The root in a hierarchy. */
609
610/* Hardware events */
611#define NVTX_SCOPE_CURRENT_HW_MACHINE 2 /* Node/machine name */
612#define NVTX_SCOPE_CURRENT_HW_SOCKET 3
613#define NVTX_SCOPE_CURRENT_HW_CPU_PHYSICAL 4 /* Physical CPU core */
614#define NVTX_SCOPE_CURRENT_HW_CPU_LOGICAL 5 /* Logical CPU core */
615/* Innermost HW execution context */
616#define NVTX_SCOPE_CURRENT_HW_INNERMOST 15
617
618/* Virtualized hardware, virtual machines */
619#define NVTX_SCOPE_CURRENT_HYPERVISOR 16
620#define NVTX_SCOPE_CURRENT_VM 17
621#define NVTX_SCOPE_CURRENT_KERNEL 18
622#define NVTX_SCOPE_CURRENT_CONTAINER 19
623#define NVTX_SCOPE_CURRENT_OS 20
624
625/* Software scopes */
626#define NVTX_SCOPE_CURRENT_SW_PROCESS 21 /* Process scope */
627#define NVTX_SCOPE_CURRENT_SW_THREAD 22 /* Thread scope */
628/* Innermost SW execution context */
629#define NVTX_SCOPE_CURRENT_SW_INNERMOST 31
630
632#define NVTX_SCOPE_ID_STATIC_START (1 << 24)
633
634/* Dynamically (tool) generated scope IDs */
635#define NVTX_SCOPE_ID_DYNAMIC_START (NVTX_STATIC_CAST(uint64_t, 1) << 32)
636
637#endif /* NVTX_SCOPES_V1 */
638
639#ifndef NVTX_TIME_V1
640#define NVTX_TIME_V1
641
653#define NVTX_TIMESTAMP_TYPE_NONE 0
654
656#define NVTX_TIMESTAMP_TYPE_TOOL_PROVIDED 1
657
659/* RDTSC on x86, CNTVCT on ARM */
660#define NVTX_TIMESTAMP_TYPE_CPU_TSC 10
661/* CNTPCT on ARM */
662#define NVTX_TIMESTAMP_TYPE_CPU_TSC_NONVIRTUALIZED 11
663/* Nanoseconds since epoch (relative to UTC), clock_gettime(CLOCK_REALTIME) */
664#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_REALTIME 12
665/* Same as above but less overhead and precision (1-10 ms) */
666#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_REALTIME_COARSE 13
667/* POSIX, Time since system boot, adjusted by NTP */
668#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_MONOTONIC 14
669/* Linux only, Time since system boot, no NTP or frequency corrections */
670#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_MONOTONIC_RAW 15
671/* Same as `CLOCK_MONOTONIC`, but less overhead and precision (1-10ms) */
672#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_MONOTONIC_COARSE 16
673/* Same as `CLOCK_MONOTONIC`, but including suspended time. */
674#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_BOOTTIME 17
675/* The total CPU time consumed by the calling process. */
676#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_PROCESS_CPUTIME_ID 18
677/* The total CPU time consumed by the calling thread. */
678#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_THREAD_CPUTIME_ID 19
679
681#define NVTX_TIMESTAMP_TYPE_WIN_QPC 30 /* QueryPerformanceCounter */
682#define NVTX_TIMESTAMP_TYPE_WIN_GSTAFT 31 /* GetSystemTimeAsFileTime */
683#define NVTX_TIMESTAMP_TYPE_WIN_GSTAFTP 32 /* GetSystemTimePreciseAsFileTime */
684
686/* Seconds since epoch (represented in C as `time_t`) */
687#define NVTX_TIMESTAMP_TYPE_C_TIME 40
688/* CPU clock value (represented in C as `clock_t`) as returned by `clock()` */
689#define NVTX_TIMESTAMP_TYPE_C_CLOCK 41
690/* High-resolution time into struct timespec (C11) */
691#define NVTX_TIMESTAMP_TYPE_C_TIMESPEC_GET 42
692
694/* std::chrono::steady_clock (monotonic clock), similar to `CLOCK_MONOTONIC` */
695#define NVTX_TIMESTAMP_TYPE_CPP_STEADY_CLOCK 50
696/* std::chrono::high_resolution_clock, similar to `CLOCK_MONOTONIC` or `CLOCK_MONOTONIC_RAW` */
697#define NVTX_TIMESTAMP_TYPE_CPP_HIGH_RESOLUTION_CLOCK 51
698/* std::chrono::system_clock, similar to `CLOCK_REALTIME` */
699#define NVTX_TIMESTAMP_TYPE_CPP_SYSTEM_CLOCK 52
700/* (since C++20) std::chrono::utc_clock, similar to `CPP_SYSTEM_CLOCK` */
701#define NVTX_TIMESTAMP_TYPE_CPP_UTC_CLOCK 53
702/* (since C++20) std::chrono::tai_clock */
703#define NVTX_TIMESTAMP_TYPE_CPP_TAI_CLOCK 54
704/* (since C++20) std::chrono::gps_clock */
705#define NVTX_TIMESTAMP_TYPE_CPP_GPS_CLOCK 55
706/* (since C++20) std::chrono::file_clock */
707#define NVTX_TIMESTAMP_TYPE_CPP_FILE_CLOCK 56
708
710#define NVTX_TIMESTAMP_TYPE_GPU_GLOBALTIMER 80 /* e.g. PTIMER */
711
713#define NVTX_TIME_DOMAIN_ID_NONE 0
714
716#define NVTX_TIME_DOMAIN_ID_STATIC_START (1 << 24)
717
718/* Dynamically (tool) generated time domain IDs */
719#define NVTX_TIME_DOMAIN_ID_DYNAMIC_START (NVTX_STATIC_CAST(uint64_t, 1) << 32)
720
722#define NVTX_TIMER_FLAG_NONE 0
723#define NVTX_TIMER_FLAG_CLOCK_MONOTONIC (1 << 1)
724#define NVTX_TIMER_FLAG_CLOCK_STEADY (1 << 2)
725
727#define NVTX_TIMER_START_UNKNOWN 0
728#define NVTX_TIMER_START_SYSTEM_BOOT 1
729#define NVTX_TIMER_START_VM_BOOT 2
730#define NVTX_TIMER_START_UNIX_EPOCH 3 /* 1 January 1970 */
731#define NVTX_TIMER_START_WIN_FILETIME 4 /* 1 January 1601 */
732
737#define NVTX_TIMER_SOURCE_SAFE_CALL_AFTER_PROCESS_TEARDOWN 0
738#define NVTX_TIMER_SOURCE_UNSAFE_CALL_AFTER_PROCESS_TEARDOWN 1
739
740#endif /* NVTX_TIME_V1 */
741
742#ifndef NVTX_BATCH_FLAGS_V1
743#define NVTX_BATCH_FLAGS_V1
744
750#define NVTX_BATCH_FLAG_TIME_SORTED 0
751#define NVTX_BATCH_FLAG_TIME_SORTED_PARTIALLY (1 << 1)
752#define NVTX_BATCH_FLAG_TIME_SORTED_PER_SCOPE (2 << 1)
753#define NVTX_BATCH_FLAG_UNSORTED (3 << 1)
754
755#endif /* NVTX_BATCH_FLAGS_V1 */
756
757#ifdef __cplusplus
758extern "C" {
759#endif /* __cplusplus */
760
761#ifndef NVTX_PAYLOAD_TYPEDEFS_V1
762#define NVTX_PAYLOAD_TYPEDEFS_V1
763
779typedef struct nvtxPayloadEntryTypeInfo_v1
780{
781 uint16_t size;
782 uint16_t align;
784
799typedef struct nvtxPayloadData_v1
800{
816 uint64_t schemaId;
817
834 size_t size;
835
839 const void* payload;
841
848typedef struct nvtxSemanticsHeader_v1
849{
850 uint32_t structSize;
851 uint16_t semanticId;
852 uint16_t version;
853 const struct nvtxSemanticsHeader_v1* next;
854 /* Additional fields are defined by the specific semantic extension. */
856
871typedef struct nvtxPayloadSchemaEntry_v1
872{
879 uint64_t flags;
880
894 uint64_t type;
895
901 const char* name;
902
908 const char* description;
909
936
958 uint64_t offset;
959
967
971 const void* reserved;
973
977typedef struct nvtxPayloadSchemaAttr_v1
978{
984 uint64_t fieldMask;
985
989 const char* name;
990
996 uint64_t type;
997
1004 uint64_t flags;
1005
1013
1020
1030
1045
1056 uint64_t schemaId;
1057
1061
1069typedef struct nvtxPayloadEnum_v1
1070{
1074 const char* name;
1075
1079 uint64_t value;
1080
1082 int8_t isFlag;
1084
1090typedef struct nvtxPayloadEnumAttr_v1
1091{
1095 uint64_t fieldMask;
1096
1100 const char* name;
1101
1106
1111
1120
1126 uint64_t schemaId;
1127
1131
1132typedef struct nvtxScopeAttr_v1
1133{
1137
1182 const char* path;
1183
1190 uint64_t parentScope;
1191
1197 uint64_t scopeId;
1199
1200#endif /* NVTX_PAYLOAD_TYPEDEFS_V1 */
1201
1202#ifndef NVTX_PAYLOAD_TYPEDEFS_DEFERRED_V1
1203#define NVTX_PAYLOAD_TYPEDEFS_DEFERRED_V1
1204
1206typedef struct nvtxTimeDomainAttr_v1
1207{
1209 uint64_t scopeId;
1210
1213
1220
1222 uint64_t timerFlags;
1223
1226
1228 uint64_t timerStart;
1230
1235typedef struct nvtxSyncPoint_v1
1236{
1238 int64_t src;
1240 int64_t dst;
1242
1250typedef struct nvtxEventBatch_v1
1251{
1258
1260 size_t size;
1261
1269 const void* events;
1270
1282 uint64_t scope;
1283
1285 uint64_t flags;
1286
1295 const void* flexData;
1296
1299
1306
1307#endif /* NVTX_PAYLOAD_TYPEDEFS_DEFERRED_V1 */
1308
1309#ifndef NVTX_PAYLOAD_API_FUNCTIONS_V1
1310#define NVTX_PAYLOAD_API_FUNCTIONS_V1
1311
1323NVTX_DECLSPEC uint64_t NVTX_API
1324nvtxPayloadSchemaRegister(nvtxDomainHandle_t domain, const nvtxPayloadSchemaAttr_t* attr);
1325
1336NVTX_DECLSPEC uint64_t NVTX_API
1337nvtxPayloadEnumRegister(nvtxDomainHandle_t domain, const nvtxPayloadEnumAttr_t* attr);
1338
1350NVTX_DECLSPEC uint64_t NVTX_API
1351nvtxScopeRegister(nvtxDomainHandle_t domain, const nvtxScopeAttr_t* attr);
1352
1363NVTX_DECLSPEC void NVTX_API
1364nvtxMarkPayload(nvtxDomainHandle_t domain, const nvtxPayloadData_t* payloadData, size_t count);
1365
1379NVTX_DECLSPEC int NVTX_API
1380nvtxRangePushPayload(nvtxDomainHandle_t domain, const nvtxPayloadData_t* payloadData, size_t count);
1381
1399NVTX_DECLSPEC int NVTX_API
1400nvtxRangePopPayload(nvtxDomainHandle_t domain, const nvtxPayloadData_t* payloadData, size_t count);
1401
1413NVTX_DECLSPEC nvtxRangeId_t NVTX_API nvtxRangeStartPayload(
1414 nvtxDomainHandle_t domain, const nvtxPayloadData_t* payloadData, size_t count);
1415
1426NVTX_DECLSPEC void NVTX_API nvtxRangeEndPayload(
1427 nvtxDomainHandle_t domain,
1428 nvtxRangeId_t id,
1429 const nvtxPayloadData_t* payloadData,
1430 size_t count);
1431
1448NVTX_DECLSPEC uint8_t NVTX_API nvtxDomainIsEnabled(nvtxDomainHandle_t domain);
1449
1450#endif /* NVTX_PAYLOAD_API_FUNCTIONS_V1 */
1451
1452#ifndef NVTX_PAYLOAD_API_FUNCTIONS_DEFERRED_V1
1453#define NVTX_PAYLOAD_API_FUNCTIONS_DEFERRED_V1
1454
1460NVTX_DECLSPEC int64_t NVTX_API nvtxTimestampGet(void);
1461
1471NVTX_DECLSPEC uint64_t NVTX_API
1472nvtxTimeDomainRegister(nvtxDomainHandle_t domain, const nvtxTimeDomainAttr_t* timeAttr);
1473
1485NVTX_DECLSPEC void NVTX_API nvtxTimerSource(
1486 nvtxDomainHandle_t domain,
1487 uint64_t timeDomainId,
1488 uint64_t flags,
1489 int64_t (*timestampProviderFn)(void));
1490
1502NVTX_DECLSPEC void NVTX_API nvtxTimerSourceWithData(
1503 nvtxDomainHandle_t domain,
1504 uint64_t timeDomainId,
1505 uint64_t flags,
1506 int64_t (*timestampProviderFn)(void* data),
1507 void* data);
1508
1523NVTX_DECLSPEC void NVTX_API nvtxTimeSyncPoint(
1524 nvtxDomainHandle_t domain,
1525 uint64_t timeDomainId1,
1526 uint64_t timeDomainId2,
1527 int64_t timestamp1,
1528 int64_t timestamp2);
1529
1541NVTX_DECLSPEC void NVTX_API nvtxTimeSyncPointTable(
1542 nvtxDomainHandle_t domain,
1543 uint64_t timeDomainIdSrc,
1544 uint64_t timeDomainIdDst,
1545 const nvtxSyncPoint_t* syncPoints,
1546 size_t count);
1547
1560NVTX_DECLSPEC void NVTX_API nvtxTimestampConversionFactor(
1561 nvtxDomainHandle_t domain,
1562 uint64_t timeDomainIdSrc,
1563 uint64_t timeDomainIdDst,
1564 double slope,
1565 int64_t timestampSrc,
1566 int64_t timestampDst);
1567
1577NVTX_DECLSPEC void NVTX_API nvtxEventSubmit(
1578 nvtxDomainHandle_t domain, const nvtxPayloadData_t* payloadData, size_t numPayloads);
1579
1586NVTX_DECLSPEC void NVTX_API
1587nvtxEventBatchSubmit(nvtxDomainHandle_t domain, const nvtxEventBatch_t* eventBatch);
1588
1589#endif /* NVTX_PAYLOAD_API_FUNCTIONS_DEFERRED_V1 */
1590
1602#ifndef NVTX_PAYLOAD_CALLBACK_ID_V1
1603#define NVTX_PAYLOAD_CALLBACK_ID_V1
1604
1605#define NVTX3EXT_CBID_nvtxPayloadSchemaRegister 0
1606#define NVTX3EXT_CBID_nvtxPayloadEnumRegister 1
1607#define NVTX3EXT_CBID_nvtxMarkPayload 2
1608#define NVTX3EXT_CBID_nvtxRangePushPayload 3
1609#define NVTX3EXT_CBID_nvtxRangePopPayload 4
1610#define NVTX3EXT_CBID_nvtxRangeStartPayload 5
1611#define NVTX3EXT_CBID_nvtxRangeEndPayload 6
1612#define NVTX3EXT_CBID_nvtxDomainIsEnabled 7
1613#define NVTX3EXT_CBID_nvtxScopeRegister 12
1614
1615#endif /* NVTX_PAYLOAD_CALLBACK_ID_V1 */
1616
1617#ifndef NVTX_PAYLOAD_CALLBACK_ID_DEFERRED_V1
1618#define NVTX_PAYLOAD_CALLBACK_ID_DEFERRED_V1
1619
1620#define NVTX3EXT_CBID_nvtxTimestampGet 8
1621#define NVTX3EXT_CBID_nvtxTimeDomainRegister 9
1622#define NVTX3EXT_CBID_nvtxTimerSource 10
1623#define NVTX3EXT_CBID_nvtxTimerSourceWithData 11
1624#define NVTX3EXT_CBID_nvtxTimeSyncPoint 13
1625#define NVTX3EXT_CBID_nvtxTimeSyncPointTable 14
1626#define NVTX3EXT_CBID_nvtxTimestampConversionFactor 15
1627#define NVTX3EXT_CBID_nvtxEventSubmit 16
1628#define NVTX3EXT_CBID_nvtxEventBatchSubmit 17
1629
1630#endif /* NVTX_PAYLOAD_CALLBACK_ID_DEFERRED_V1 */
1631
1632/*** Helper utilities ***/
1633
1635#ifndef NVTX_POINTER_AS_PAYLOAD_ULLVALUE
1636#ifdef __cplusplus
1637#define NVTX_POINTER_AS_PAYLOAD_ULLVALUE(p) static_cast<uint64_t>(reinterpret_cast<uintptr_t>(p))
1638#else
1639#define NVTX_POINTER_AS_PAYLOAD_ULLVALUE(p) \
1640 (NVTX_STATIC_CAST(uint64_t, NVTX_STATIC_CAST(uintptr_t, p)))
1641#endif
1642#endif
1643
1644#ifndef NVTX_PAYLOAD_EVTATTR_SET_DATA
1654#define NVTX_PAYLOAD_EVTATTR_SET_DATA(evtAttr, pldata_addr, schema_id, pl_addr, sz) \
1655 (pldata_addr)->schemaId = schema_id; \
1656 (pldata_addr)->size = sz; \
1657 (pldata_addr)->payload = pl_addr; \
1658 (evtAttr).payload.ullValue = NVTX_POINTER_AS_PAYLOAD_ULLVALUE(pldata_addr); \
1659 (evtAttr).payloadType = NVTX_PAYLOAD_TYPE_EXT; \
1660 (evtAttr).reserved0 = 1;
1661#endif /* NVTX_PAYLOAD_EVTATTR_SET_DATA */
1662
1663#ifndef NVTX_PAYLOAD_EVTATTR_SET_MULTIPLE
1670#define NVTX_PAYLOAD_EVTATTR_SET_MULTIPLE(evtAttr, pldata) \
1671 (evtAttr).payloadType = NVTX_PAYLOAD_TYPE_EXT; \
1672 (evtAttr).reserved0 = sizeof(pldata) / sizeof(nvtxPayloadData_t); \
1673 (evtAttr).payload.ullValue = NVTX_POINTER_AS_PAYLOAD_ULLVALUE(pldata);
1674#endif /* NVTX_PAYLOAD_EVTATTR_SET_MULTIPLE */
1675
1676#ifndef NVTX_PAYLOAD_EVTATTR_SET_MULTIPLE_N
1685#define NVTX_PAYLOAD_EVTATTR_SET_MULTIPLE_N(evtAttr, pldata, count) \
1686 (evtAttr).payloadType = NVTX_PAYLOAD_TYPE_EXT; \
1687 (evtAttr).reserved0 = NVTX_STATIC_CAST(int32_t, count); \
1688 (evtAttr).payload.ullValue = NVTX_POINTER_AS_PAYLOAD_ULLVALUE(pldata);
1689#endif /* NVTX_PAYLOAD_EVTATTR_SET_MULTIPLE_N */
1690
1691#ifndef NVTX_PAYLOAD_EVTATTR_SET
1692/*
1693 * Do not use this macro directly! It is a helper to attach a single payload to
1694 * an NVTX event attribute.
1695 * @warning The NVTX push, start, or mark call must be in the same scope.
1696 */
1697#define NVTX_PAYLOAD_EVTATTR_SET(evtAttr, schema_id, pl_addr, sz) \
1698 nvtxPayloadData_t _NVTX_PAYLOAD_DATA_VAR[] = {{schema_id, sz, pl_addr}}; \
1699 (evtAttr)->payload.ullValue = NVTX_POINTER_AS_PAYLOAD_ULLVALUE(_NVTX_PAYLOAD_DATA_VAR); \
1700 (evtAttr)->payloadType = NVTX_PAYLOAD_TYPE_EXT; \
1701 (evtAttr)->reserved0 = 1;
1702#endif /* NVTX_PAYLOAD_EVTATTR_SET */
1703
1704#ifndef nvtxPayloadRangePush
1714#define nvtxPayloadRangePush(domain, evtAttr, schemaId, plAddr, size) \
1715 do \
1716 { \
1717 NVTX_PAYLOAD_EVTATTR_SET(evtAttr, schemaId, plAddr, size) \
1718 nvtxDomainRangePushEx(domain, evtAttr); \
1719 } while (0)
1720#endif /* nvtxPayloadRangePush */
1721
1722#ifndef nvtxPayloadMark
1732#define nvtxPayloadMark(domain, evtAttr, schemaId, plAddr, size) \
1733 do \
1734 { \
1735 NVTX_PAYLOAD_EVTATTR_SET(evtAttr, schemaId, plAddr, size) \
1736 nvtxDomainMarkEx(domain, evtAttr); \
1737 } while (0)
1738#endif /* nvtxPayloadMark */
1739
1740/* Macros to create versioned symbols. */
1741#ifndef NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIERS_V1
1742#define NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIERS_V1
1743#define NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIER_L3(NAME, VERSION, COMPATID) \
1744 NAME##_v##VERSION##_bpl##COMPATID
1745#define NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIER_L2(NAME, VERSION, COMPATID) \
1746 NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIER_L3(NAME, VERSION, COMPATID)
1747#define NVTX_EXT_PAYLOAD_VERSIONED_ID(NAME) \
1748 NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIER_L2(NAME, NVTX_VERSION, NVTX_EXT_PAYLOAD_COMPATID)
1749#endif /* NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIERS_V1 */
1750
1751#ifdef __GNUC__
1752#pragma GCC visibility push(internal)
1753#endif
1754
1755/* Extension types are required for the implementation and the NVTX handler. */
1756#define NVTX_EXT_TYPES_GUARD
1757#include "nvtxDetail/nvtxExtTypes.h"
1758#undef NVTX_EXT_TYPES_GUARD
1759
1760#ifndef NVTX_NO_IMPL
1761#define NVTX_EXT_IMPL_PAYLOAD_GUARD
1762#include "nvtxDetail/nvtxExtImplPayload_v1.h"
1763#undef NVTX_EXT_IMPL_PAYLOAD_GUARD
1764#endif /* NVTX_NO_IMPL */
1765
1766#ifdef __GNUC__
1767#pragma GCC visibility pop
1768#endif
1769
1770#ifdef __cplusplus
1771}
1772#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...