NVTX C API Reference v3
NVIDIA Tools Extension Library
Loading...
Searching...
No Matches
nvToolsExtPayload.h
1/*
2 * SPDX-FileCopyrightText: Copyright (c) 2021-2025 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
31#include "nvToolsExt.h"
32
33/* Optionally include helper macros. */
34/* #include "nvToolsExtPayloadHelper.h" */
35
43#ifndef NVTX_EXT_PAYLOAD_COMPATID
44#define NVTX_EXT_PAYLOAD_COMPATID 0x0104
45#endif
46
51#ifndef NVTX_EXT_PAYLOAD_MODULEID
52#define NVTX_EXT_PAYLOAD_MODULEID 2
53#endif
54
58#ifndef NVTX_PAYLOAD_TYPE_EXT
59#define NVTX_PAYLOAD_TYPE_EXT (NVTX_STATIC_CAST(int32_t, 0xDFBD0009))
60#endif
61
65#ifndef NVTX_PAYLOAD_ENTRY_FLAGS_V1
66#define NVTX_PAYLOAD_ENTRY_FLAGS_V1
67
68#define NVTX_PAYLOAD_ENTRY_FLAG_UNUSED 0
69
73#define NVTX_PAYLOAD_ENTRY_FLAG_POINTER (1 << 1)
74
78#define NVTX_PAYLOAD_ENTRY_FLAG_OFFSET_FROM_BASE (1 << 2)
79
83#define NVTX_PAYLOAD_ENTRY_FLAG_OFFSET_FROM_HERE (1 << 3)
84
88#define NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_FIXED_SIZE (1 << 4)
89
93#define NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_ZERO_TERMINATED (2 << 4)
94
109#define NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_LENGTH_INDEX (3 << 4)
110
118#define NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_LENGTH_PAYLOAD_INDEX (4 << 4)
119
127#define NVTX_PAYLOAD_ENTRY_FLAG_DEEP_COPY (1 << 8)
128
132#define NVTX_PAYLOAD_ENTRY_FLAG_HIDE (1 << 9)
133
137#define NVTX_PAYLOAD_ENTRY_FLAG_EVENT_MESSAGE (1 << 10)
138
145#define NVTX_PAYLOAD_ENTRY_FLAG_TIMESTAMP (2 << 10)
146
150#define NVTX_PAYLOAD_ENTRY_FLAG_RANGE_BEGIN (1 << 12)
151#define NVTX_PAYLOAD_ENTRY_FLAG_RANGE_END (2 << 12)
152#define NVTX_PAYLOAD_ENTRY_FLAG_MARK (3 << 12)
153#define NVTX_PAYLOAD_ENTRY_FLAG_COUNTER (4 << 12)
154
155#endif /* NVTX_PAYLOAD_ENTRY_FLAGS_V1 */
170/* Helper macro to check if an entry represents an array. */
171#define NVTX_PAYLOAD_ENTRY_FLAG_IS_ARRAY (\
172 NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_FIXED_SIZE | \
173 NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_ZERO_TERMINATED | \
174 NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_LENGTH_INDEX)
175
176#define NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_TYPE(F) \
177 ((F) & NVTX_PAYLOAD_ENTRY_FLAG_IS_ARRAY)
178
179
192#ifndef NVTX_PAYLOAD_ENTRY_TYPES_V1
193#define NVTX_PAYLOAD_ENTRY_TYPES_V1
194
195#define NVTX_PAYLOAD_ENTRY_TYPE_INVALID 0
196
200#define NVTX_PAYLOAD_ENTRY_TYPE_CHAR 1
201#define NVTX_PAYLOAD_ENTRY_TYPE_UCHAR 2
202#define NVTX_PAYLOAD_ENTRY_TYPE_SHORT 3
203#define NVTX_PAYLOAD_ENTRY_TYPE_USHORT 4
204#define NVTX_PAYLOAD_ENTRY_TYPE_INT 5
205#define NVTX_PAYLOAD_ENTRY_TYPE_UINT 6
206#define NVTX_PAYLOAD_ENTRY_TYPE_LONG 7
207#define NVTX_PAYLOAD_ENTRY_TYPE_ULONG 8
208#define NVTX_PAYLOAD_ENTRY_TYPE_LONGLONG 9
209#define NVTX_PAYLOAD_ENTRY_TYPE_ULONGLONG 10
210
214#define NVTX_PAYLOAD_ENTRY_TYPE_INT8 11
215#define NVTX_PAYLOAD_ENTRY_TYPE_UINT8 12
216#define NVTX_PAYLOAD_ENTRY_TYPE_INT16 13
217#define NVTX_PAYLOAD_ENTRY_TYPE_UINT16 14
218#define NVTX_PAYLOAD_ENTRY_TYPE_INT32 15
219#define NVTX_PAYLOAD_ENTRY_TYPE_UINT32 16
220#define NVTX_PAYLOAD_ENTRY_TYPE_INT64 17
221#define NVTX_PAYLOAD_ENTRY_TYPE_UINT64 18
222
226#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT 19
227#define NVTX_PAYLOAD_ENTRY_TYPE_DOUBLE 20
228#define NVTX_PAYLOAD_ENTRY_TYPE_LONGDOUBLE 21
229
233#define NVTX_PAYLOAD_ENTRY_TYPE_SIZE 22
234
239#define NVTX_PAYLOAD_ENTRY_TYPE_ADDRESS 23
240
244#define NVTX_PAYLOAD_ENTRY_TYPE_WCHAR 24 /* wide character (since C90) */
245#define NVTX_PAYLOAD_ENTRY_TYPE_CHAR8 25 /* since C2x and C++20 */
246#define NVTX_PAYLOAD_ENTRY_TYPE_CHAR16 26
247#define NVTX_PAYLOAD_ENTRY_TYPE_CHAR32 27
248
252#define NVTX_PAYLOAD_ENTRY_TYPE_INFO_ARRAY_SIZE (NVTX_PAYLOAD_ENTRY_TYPE_CHAR32 + 1)
253
258#define NVTX_PAYLOAD_ENTRY_TYPE_BYTE 32
259
266#define NVTX_PAYLOAD_ENTRY_TYPE_INT128 33
267#define NVTX_PAYLOAD_ENTRY_TYPE_UINT128 34
268
269#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT16 42
270#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT32 43
271#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT64 44
272#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT128 45
273
274#define NVTX_PAYLOAD_ENTRY_TYPE_BF16 50
275#define NVTX_PAYLOAD_ENTRY_TYPE_TF32 52
276
280#define NVTX_PAYLOAD_ENTRY_TYPE_CATEGORY 68 /* uint32_t */
281#define NVTX_PAYLOAD_ENTRY_TYPE_COLOR_ARGB 69 /* uint32_t */
282
286#define NVTX_PAYLOAD_ENTRY_TYPE_SCOPE_ID 70 /* uint64_t */
287
291#define NVTX_PAYLOAD_ENTRY_TYPE_PID_UINT32 71
292#define NVTX_PAYLOAD_ENTRY_TYPE_PID_UINT64 72
293
297#define NVTX_PAYLOAD_ENTRY_TYPE_TID_UINT32 73
298#define NVTX_PAYLOAD_ENTRY_TYPE_TID_UINT64 74
299
315#define NVTX_PAYLOAD_ENTRY_TYPE_CSTRING 75 /* `char*`, system LOCALE */
316#define NVTX_PAYLOAD_ENTRY_TYPE_CSTRING_UTF8 76
317#define NVTX_PAYLOAD_ENTRY_TYPE_CSTRING_UTF16 77
318#define NVTX_PAYLOAD_ENTRY_TYPE_CSTRING_UTF32 78
319
324#define NVTX_PAYLOAD_ENTRY_TYPE_NVTX_REGISTERED_STRING_HANDLE 80
325
331#define NVTX_PAYLOAD_ENTRY_TYPE_UNION_SELECTOR 100
332
342#define NVTX_TYPE_PAYLOAD_SCHEMA_REFERENCED 1022
343
351#define NVTX_TYPE_PAYLOAD_SCHEMA_RAW 1023
352
353/* Custom (static) schema IDs. */
354#define NVTX_PAYLOAD_SCHEMA_ID_STATIC_START (1 << 24)
355
356/* Dynamic schema IDs (generated by the tool) start here. */
357#define NVTX_PAYLOAD_SCHEMA_ID_DYNAMIC_START (NVTX_STATIC_CAST(uint64_t, 1) << 32)
358
359#endif /* NVTX_PAYLOAD_ENTRY_TYPES_V1 */
365#ifndef NVTX_PAYLOAD_SCHEMA_TYPES_V1
366#define NVTX_PAYLOAD_SCHEMA_TYPES_V1
367
374#define NVTX_PAYLOAD_SCHEMA_TYPE_INVALID 0
375#define NVTX_PAYLOAD_SCHEMA_TYPE_STATIC 1
376#define NVTX_PAYLOAD_SCHEMA_TYPE_DYNAMIC 2
377#define NVTX_PAYLOAD_SCHEMA_TYPE_UNION 3
378#define NVTX_PAYLOAD_SCHEMA_TYPE_UNION_WITH_INTERNAL_SELECTOR 4
379
380#endif /* NVTX_PAYLOAD_SCHEMA_TYPES_V1 */
381
382
383#ifndef NVTX_PAYLOAD_SCHEMA_FLAGS_V1
384#define NVTX_PAYLOAD_SCHEMA_FLAGS_V1
385
391#define NVTX_PAYLOAD_SCHEMA_FLAG_NONE 0
392
397#define NVTX_PAYLOAD_SCHEMA_FLAG_DEEP_COPY (1 << 1)
398
405#define NVTX_PAYLOAD_SCHEMA_FLAG_REFERENCED (1 << 2)
406
411#define NVTX_PAYLOAD_SCHEMA_FLAG_COUNTER_GROUP (1 << 3)
412
417#define NVTX_PAYLOAD_SCHEMA_FLAG_RANGE_PUSHPOP (2 << 3)
418#define NVTX_PAYLOAD_SCHEMA_FLAG_RANGE_STARTEND (3 << 3)
419#define NVTX_PAYLOAD_SCHEMA_FLAG_MARK (4 << 3)
420
421#endif /* NVTX_PAYLOAD_SCHEMA_FLAGS_V1 */
422
423
424#ifndef NVTX_PAYLOAD_SCHEMA_ATTR_FIELDS_V1
425#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELDS_V1
426
431#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_NAME (1 << 1)
432#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_TYPE (1 << 2)
433#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_FLAGS (1 << 3)
434#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_ENTRIES (1 << 4)
435#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_NUM_ENTRIES (1 << 5)
436#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_STATIC_SIZE (1 << 6)
437#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_ALIGNMENT (1 << 7)
438#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_SCHEMA_ID (1 << 8)
439#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_EXTENSION (1 << 9)
440
441#endif /* NVTX_PAYLOAD_SCHEMA_ATTR_FIELDS_V1 */
442
443
444#ifndef NVTX_PAYLOAD_ENUM_ATTR_FIELDS_V1
445#define NVTX_PAYLOAD_ENUM_ATTR_FIELDS_V1
446
451#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_NAME (1 << 1)
452#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_ENTRIES (1 << 2)
453#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_NUM_ENTRIES (1 << 3)
454#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_SIZE (1 << 4)
455#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_SCHEMA_ID (1 << 5)
456#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_EXTENSION (1 << 6)
457
458#endif /* NVTX_PAYLOAD_ENUM_ATTR_FIELDS_V1 */
459
464#ifndef NVTX_SCOPES_V1
465#define NVTX_SCOPES_V1
466
467#define NVTX_SCOPE_NONE 0 /* No scope specified. */
468#define NVTX_SCOPE_ROOT 1 /* The root in a hierarchy. */
469
470/* Hardware events */
471#define NVTX_SCOPE_CURRENT_HW_MACHINE 2 /* Node/machine name */
472#define NVTX_SCOPE_CURRENT_HW_SOCKET 3
473#define NVTX_SCOPE_CURRENT_HW_CPU_PHYSICAL 4 /* Physical CPU core */
474#define NVTX_SCOPE_CURRENT_HW_CPU_LOGICAL 5 /* Logical CPU core */
475/* Innermost HW execution context */
476#define NVTX_SCOPE_CURRENT_HW_INNERMOST 15
477
478/* Virtualized hardware, virtual machines */
479#define NVTX_SCOPE_CURRENT_HYPERVISOR 16
480#define NVTX_SCOPE_CURRENT_VM 17
481#define NVTX_SCOPE_CURRENT_KERNEL 18
482#define NVTX_SCOPE_CURRENT_CONTAINER 19
483#define NVTX_SCOPE_CURRENT_OS 20
484
485/* Software scopes */
486#define NVTX_SCOPE_CURRENT_SW_PROCESS 21 /* Process scope */
487#define NVTX_SCOPE_CURRENT_SW_THREAD 22 /* Thread scope */
488/* Innermost SW execution context */
489#define NVTX_SCOPE_CURRENT_SW_INNERMOST 31
490
492#define NVTX_SCOPE_ID_STATIC_START (1 << 24)
493
494/* Dynamically (tool) generated scope IDs */
495#define NVTX_SCOPE_ID_DYNAMIC_START (NVTX_STATIC_CAST(uint64_t, 1) << 32)
496
497#endif /* NVTX_SCOPES_V1 */
498
499#ifndef NVTX_TIME_V1
500#define NVTX_TIME_V1
501
507#define NVTX_TIMESTAMP_TYPE_NONE 0
508
510#define NVTX_TIMESTAMP_TYPE_TOOL_PROVIDED 1
511
513#define NVTX_TIMESTAMP_TYPE_CPU_TSC /* RDTSC on x86, CNTVCT on ARM */ 10
514#define NVTX_TIMESTAMP_TYPE_CPU_TSC_NONVIRTUALIZED /* CNTPCT on ARM */ 11
515#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_REALTIME 12
516#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_REALTIME_COARSE 13
517#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_MONOTONIC 14
518#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_MONOTONIC_RAW 15
519#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_MONOTONIC_COARSE 16
520#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_BOOTTIME 17
521#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_PROCESS_CPUTIME_ID 18
522#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_THREAD_CPUTIME_ID 19
523
524#define NVTX_TIMESTAMP_TYPE_WIN_QPC 30
525#define NVTX_TIMESTAMP_TYPE_WIN_GSTAFT 31
526#define NVTX_TIMESTAMP_TYPE_WIN_GSTAFTP 32
527
528#define NVTX_TIMESTAMP_TYPE_C_TIME 40
529#define NVTX_TIMESTAMP_TYPE_C_CLOCK 41
530#define NVTX_TIMESTAMP_TYPE_C_TIMESPEC_GET 42
531
532#define NVTX_TIMESTAMP_TYPE_CPP_STEADY_CLOCK 50
533#define NVTX_TIMESTAMP_TYPE_CPP_HIGH_RESOLUTION_CLOCK 51
534#define NVTX_TIMESTAMP_TYPE_CPP_SYSTEM_CLOCK 52
535#define NVTX_TIMESTAMP_TYPE_CPP_UTC_CLOCK 53
536#define NVTX_TIMESTAMP_TYPE_CPP_TAI_CLOCK 54
537#define NVTX_TIMESTAMP_TYPE_CPP_GPS_CLOCK 55
538#define NVTX_TIMESTAMP_TYPE_CPP_FILE_CLOCK 56
539
541#define NVTX_TIMESTAMP_TYPE_GPU_GLOBALTIMER 80 /* e.g. PTIMER */
542
544#define NVTX_TIME_DOMAIN_ID_NONE 0
545
547#define NVTX_TIME_DOMAIN_ID_STATIC_START (1 << 24)
548
549/* Dynamically (tool) generated time domain IDs */
550#define NVTX_TIME_DOMAIN_ID_DYNAMIC_START (NVTX_STATIC_CAST(uint64_t, 1) << 32)
551
553#define NVTX_TIMER_FLAG_NONE 0
554#define NVTX_TIMER_FLAG_CLOCK_MONOTONIC (1 << 1)
555#define NVTX_TIMER_FLAG_CLOCK_STEADY (1 << 2)
556
558#define NVTX_TIMER_START_UNKNOWN 0
559#define NVTX_TIMER_START_SYSTEM_BOOT 1
560#define NVTX_TIMER_START_VM_BOOT 2
561#define NVTX_TIMER_START_UNIX_EPOCH 3 /* 1 January 1970 */
562#define NVTX_TIMER_START_WIN_FILETIME 4 /* 1 January 1601 */
563
568#define NVTX_TIMER_SOURCE_SAFE_CALL_AFTER_PROCESS_TEARDOWN 0
569#define NVTX_TIMER_SOURCE_UNSAFE_CALL_AFTER_PROCESS_TEARDOWN 1
570
571#endif /* NVTX_TIME_V1 */
572
573#ifndef NVTX_BATCH_FLAGS_V1
574#define NVTX_BATCH_FLAGS_V1
575
581#define NVTX_BATCH_FLAG_TIME_SORTED 0
582#define NVTX_BATCH_FLAG_TIME_SORTED_PARTIALLY (1 << 1)
583#define NVTX_BATCH_FLAG_TIME_SORTED_PER_SCOPE (2 << 1)
584#define NVTX_BATCH_FLAG_UNSORTED (3 << 1)
585
586#endif /* NVTX_BATCH_FLAGS_V1 */
587
588#ifdef __cplusplus
589extern "C" {
590#endif /* __cplusplus */
591
592#ifndef NVTX_PAYLOAD_TYPEDEFS_V1
593#define NVTX_PAYLOAD_TYPEDEFS_V1
594
602typedef struct nvtxPayloadEntryTypeInfo_v1
603{
604 uint16_t size;
605 uint16_t align;
607
624typedef struct nvtxPayloadData_v1
625{
629 uint64_t schemaId;
630
635 size_t size;
636
640 const void* payload;
642
643
651typedef struct nvtxSemanticsHeader_v1
652{
653 uint32_t structSize;
654 uint16_t semanticId;
655 uint16_t version;
656 const struct nvtxSemanticsHeader_v1* next;
657 /* Additional fields are defined by the specific semantic extension. */
659
675typedef struct nvtxPayloadSchemaEntry_v1
676{
683 uint64_t flags;
684
691 uint64_t type;
692
698 const char* name;
699
705 const char* description;
706
725
739 uint64_t offset;
740
748
752 const void* reserved;
754
758typedef struct nvtxPayloadSchemaAttr_v1
759{
765 uint64_t fieldMask;
766
770 const char* name;
771
777 uint64_t type;
778
785 uint64_t flags;
786
794
801
811
819 size_t packAlign;
820
826 uint64_t schemaId;
827
834
846typedef struct nvtxPayloadEnum_v1
847{
851 const char* name;
852
856 uint64_t value;
857
862 int8_t isFlag;
864
870typedef struct nvtxPayloadEnumAttr_v1
871{
875 uint64_t fieldMask;
876
880 const char* name;
881
886
891
896
902 uint64_t schemaId;
903
910
911typedef struct nvtxScopeAttr_v1
912{
913 size_t structSize;
914
934 const char* path;
935
937 uint64_t parentScope;
938
944 uint64_t scopeId;
946
947#endif /* NVTX_PAYLOAD_TYPEDEFS_V1 */
948
949#ifndef NVTX_PAYLOAD_TYPEDEFS_DEFERRED_V1
950#define NVTX_PAYLOAD_TYPEDEFS_DEFERRED_V1
951
953typedef struct nvtxTimeDomainAttr_v1
954{
956 uint64_t scopeId;
957
960
966 uint64_t timeDomainId;
967
969 uint64_t timerFlags;
970
973
975 uint64_t timerStart;
977
979typedef struct nvtxSyncPoint_v1
980{
981 int64_t src;
982 int64_t dst;
984
992typedef struct nvtxEventBatch_v1
993{
1002
1004 size_t size;
1005
1007 const void* events;
1008
1010 uint64_t scope;
1011
1013 uint64_t flags;
1014
1016 const void* flexData;
1017
1020
1027
1028#endif /* NVTX_PAYLOAD_TYPEDEFS_DEFERRED_V1 */
1029
1030#ifndef NVTX_PAYLOAD_API_FUNCTIONS_V1
1031#define NVTX_PAYLOAD_API_FUNCTIONS_V1
1032
1039NVTX_DECLSPEC uint64_t NVTX_API nvtxPayloadSchemaRegister(
1040 nvtxDomainHandle_t domain,
1041 const nvtxPayloadSchemaAttr_t* attr);
1042
1049NVTX_DECLSPEC uint64_t NVTX_API nvtxPayloadEnumRegister(
1050 nvtxDomainHandle_t domain,
1051 const nvtxPayloadEnumAttr_t* attr);
1052
1062NVTX_DECLSPEC uint64_t NVTX_API nvtxScopeRegister(
1063 nvtxDomainHandle_t domain,
1064 const nvtxScopeAttr_t* attr);
1065
1077NVTX_DECLSPEC void NVTX_API nvtxMarkPayload(
1078 nvtxDomainHandle_t domain,
1079 const nvtxPayloadData_t* payloadData,
1080 size_t count);
1081
1093NVTX_DECLSPEC int NVTX_API nvtxRangePushPayload(
1094 nvtxDomainHandle_t domain,
1095 const nvtxPayloadData_t* payloadData,
1096 size_t count);
1097
1112NVTX_DECLSPEC int NVTX_API nvtxRangePopPayload(
1113 nvtxDomainHandle_t domain,
1114 const nvtxPayloadData_t* payloadData,
1115 size_t count);
1116
1127NVTX_DECLSPEC nvtxRangeId_t NVTX_API nvtxRangeStartPayload(
1128 nvtxDomainHandle_t domain,
1129 const nvtxPayloadData_t* payloadData,
1130 size_t count);
1131
1144NVTX_DECLSPEC void NVTX_API nvtxRangeEndPayload(
1145 nvtxDomainHandle_t domain,
1146 nvtxRangeId_t id,
1147 const nvtxPayloadData_t* payloadData,
1148 size_t count);
1149
1166NVTX_DECLSPEC uint8_t NVTX_API nvtxDomainIsEnabled(
1167 nvtxDomainHandle_t domain);
1168
1169#endif /* NVTX_PAYLOAD_API_FUNCTIONS_V1 */
1170
1171#ifndef NVTX_PAYLOAD_API_FUNCTIONS_DEFERRED_V1
1172#define NVTX_PAYLOAD_API_FUNCTIONS_DEFERRED_V1
1173
1179NVTX_DECLSPEC int64_t NVTX_API nvtxTimestampGet(void);
1180
1190NVTX_DECLSPEC uint64_t NVTX_API nvtxTimeDomainRegister(
1191 nvtxDomainHandle_t domain,
1192 const nvtxTimeDomainAttr_t* timeAttr);
1193
1205NVTX_DECLSPEC void NVTX_API nvtxTimerSource(
1206 nvtxDomainHandle_t domain,
1207 uint64_t timeDomainId,
1208 uint64_t flags,
1209 int64_t (*timestampProviderFn)(void));
1210
1222NVTX_DECLSPEC void NVTX_API nvtxTimerSourceWithData(
1223 nvtxDomainHandle_t domain,
1224 uint64_t timeDomainId,
1225 uint64_t flags,
1226 int64_t (*timestampProviderFn)(void* data),
1227 void* data);
1228
1243NVTX_DECLSPEC void NVTX_API nvtxTimeSyncPoint(
1244 nvtxDomainHandle_t domain,
1245 uint64_t timeDomainId1,
1246 uint64_t timeDomainId2,
1247 int64_t timestamp1,
1248 int64_t timestamp2);
1249
1261NVTX_DECLSPEC void NVTX_API nvtxTimeSyncPointTable(
1262 nvtxDomainHandle_t domain,
1263 uint64_t timeDomainIdSrc,
1264 uint64_t timeDomainIdDst,
1265 const nvtxSyncPoint_t* syncPoints,
1266 size_t count);
1267
1280NVTX_DECLSPEC void NVTX_API nvtxTimestampConversionFactor(
1281 nvtxDomainHandle_t domain,
1282 uint64_t timeDomainIdSrc,
1283 uint64_t timeDomainIdDst,
1284 double slope,
1285 int64_t timestampSrc,
1286 int64_t timestampDst);
1287
1295NVTX_DECLSPEC void NVTX_API nvtxEventSubmit(
1296 nvtxDomainHandle_t domain,
1297 const nvtxPayloadData_t* payloadData,
1298 size_t numPayloads);
1299
1306NVTX_DECLSPEC void NVTX_API nvtxEventBatchSubmit(
1307 nvtxDomainHandle_t domain,
1308 const nvtxEventBatch_t* eventBatch);
1309
1310#endif /* NVTX_PAYLOAD_API_FUNCTIONS_DEFERRED_V1 */
1311
1323#ifndef NVTX_PAYLOAD_CALLBACK_ID_V1
1324#define NVTX_PAYLOAD_CALLBACK_ID_V1
1325
1326#define NVTX3EXT_CBID_nvtxPayloadSchemaRegister 0
1327#define NVTX3EXT_CBID_nvtxPayloadEnumRegister 1
1328#define NVTX3EXT_CBID_nvtxMarkPayload 2
1329#define NVTX3EXT_CBID_nvtxRangePushPayload 3
1330#define NVTX3EXT_CBID_nvtxRangePopPayload 4
1331#define NVTX3EXT_CBID_nvtxRangeStartPayload 5
1332#define NVTX3EXT_CBID_nvtxRangeEndPayload 6
1333#define NVTX3EXT_CBID_nvtxDomainIsEnabled 7
1334#define NVTX3EXT_CBID_nvtxScopeRegister 12
1335
1336#endif /* NVTX_PAYLOAD_CALLBACK_ID_V1 */
1337
1338#ifndef NVTX_PAYLOAD_CALLBACK_ID_DEFERRED_V1
1339#define NVTX_PAYLOAD_CALLBACK_ID_DEFERRED_V1
1340
1341#define NVTX3EXT_CBID_nvtxTimestampGet 8
1342#define NVTX3EXT_CBID_nvtxTimeDomainRegister 9
1343#define NVTX3EXT_CBID_nvtxTimerSource 10
1344#define NVTX3EXT_CBID_nvtxTimerSourceWithData 11
1345#define NVTX3EXT_CBID_nvtxTimeSyncPoint 13
1346#define NVTX3EXT_CBID_nvtxTimeSyncPointTable 14
1347#define NVTX3EXT_CBID_nvtxTimestampConversionFactor 15
1348#define NVTX3EXT_CBID_nvtxEventSubmit 16
1349#define NVTX3EXT_CBID_nvtxEventBatchSubmit 17
1350
1351#endif /* NVTX_PAYLOAD_CALLBACK_ID_DEFERRED_V1 */
1352
1353/*** Helper utilities ***/
1354
1356#ifndef NVTX_POINTER_AS_PAYLOAD_ULLVALUE
1357# ifdef __cplusplus
1358# define NVTX_POINTER_AS_PAYLOAD_ULLVALUE(p) \
1359 static_cast<uint64_t>(reinterpret_cast<uintptr_t>(p))
1360# else
1361#define NVTX_POINTER_AS_PAYLOAD_ULLVALUE(p) (NVTX_STATIC_CAST(uint64_t, NVTX_STATIC_CAST(uintptr_t, p))
1362# endif
1363#endif
1364
1365#ifndef NVTX_PAYLOAD_EVTATTR_SET_DATA
1375#define NVTX_PAYLOAD_EVTATTR_SET_DATA(evtAttr, pldata_addr, schema_id, pl_addr, sz) \
1376 (pldata_addr)->schemaId = schema_id; \
1377 (pldata_addr)->size = sz; \
1378 (pldata_addr)->payload = pl_addr; \
1379 (evtAttr).payload.ullValue = NVTX_POINTER_AS_PAYLOAD_ULLVALUE(pldata_addr); \
1380 (evtAttr).payloadType = NVTX_PAYLOAD_TYPE_EXT; \
1381 (evtAttr).reserved0 = 1;
1382#endif /* NVTX_PAYLOAD_EVTATTR_SET_DATA */
1383
1384#ifndef NVTX_PAYLOAD_EVTATTR_SET_MULTIPLE
1391#define NVTX_PAYLOAD_EVTATTR_SET_MULTIPLE(evtAttr, pldata) \
1392 (evtAttr).payloadType = NVTX_PAYLOAD_TYPE_EXT; \
1393 (evtAttr).reserved0 = sizeof(pldata)/sizeof(nvtxPayloadData_t); \
1394 (evtAttr).payload.ullValue = NVTX_POINTER_AS_PAYLOAD_ULLVALUE(pldata);
1395#endif /* NVTX_PAYLOAD_EVTATTR_SET_MULTIPLE */
1396
1397#ifndef NVTX_PAYLOAD_EVTATTR_SET
1398/*
1399 * Do not use this macro directly! It is a helper to attach a single payload to
1400 * an NVTX event attribute.
1401 * @warning The NVTX push, start or mark operation must not be in an outer scope.
1402 */
1403#define NVTX_PAYLOAD_EVTATTR_SET(evtAttr, schema_id, pl_addr, sz) \
1404 nvtxPayloadData_t _NVTX_PAYLOAD_DATA_VAR[] = \
1405 {{schema_id, sz, pl_addr}}; \
1406 (evtAttr)->payload.ullValue = \
1407 NVTX_POINTER_AS_PAYLOAD_ULLVALUE(_NVTX_PAYLOAD_DATA_VAR); \
1408 (evtAttr)->payloadType = NVTX_PAYLOAD_TYPE_EXT; \
1409 (evtAttr)->reserved0 = 1;
1410#endif /* NVTX_PAYLOAD_EVTATTR_SET */
1411
1412#ifndef nvtxPayloadRangePush
1422#define nvtxPayloadRangePush(domain, evtAttr, schemaId, plAddr, size) \
1423do { \
1424 NVTX_PAYLOAD_EVTATTR_SET(evtAttr, schemaId, plAddr, size) \
1425 nvtxDomainRangePushEx(domain, evtAttr); \
1426} while (0)
1427#endif /* nvtxPayloadRangePush */
1428
1429#ifndef nvtxPayloadMark
1439#define nvtxPayloadMark(domain, evtAttr, schemaId, plAddr, size) \
1440do { \
1441 NVTX_PAYLOAD_EVTATTR_SET(evtAttr, schemaId, plAddr, size) \
1442 nvtxDomainMarkEx(domain, evtAttr); \
1443} while (0)
1444#endif /* nvtxPayloadMark */
1445
1446/* Macros to create versioned symbols. */
1447#ifndef NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIERS_V1
1448#define NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIERS_V1
1449#define NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIER_L3(NAME, VERSION, COMPATID) \
1450 NAME##_v##VERSION##_bpl##COMPATID
1451#define NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIER_L2(NAME, VERSION, COMPATID) \
1452 NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIER_L3(NAME, VERSION, COMPATID)
1453#define NVTX_EXT_PAYLOAD_VERSIONED_ID(NAME) \
1454 NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIER_L2(NAME, NVTX_VERSION, NVTX_EXT_PAYLOAD_COMPATID)
1455#endif /* NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIERS_V1 */
1456
1457#ifdef __GNUC__
1458#pragma GCC visibility push(internal)
1459#endif
1460
1461/* Extension types are required for the implementation and the NVTX handler. */
1462#define NVTX_EXT_TYPES_GUARD
1463#include "nvtxDetail/nvtxExtTypes.h"
1464#undef NVTX_EXT_TYPES_GUARD
1465
1466#ifndef NVTX_NO_IMPL
1467#define NVTX_EXT_IMPL_PAYLOAD_GUARD
1468#include "nvtxDetail/nvtxExtImplPayload_v1.h"
1469#undef NVTX_EXT_IMPL_PAYLOAD_GUARD
1470#endif /* NVTX_NO_IMPL */
1471
1472#ifdef __GNUC__
1473#pragma GCC visibility pop
1474#endif
1475
1476#ifdef __cplusplus
1477}
1478#endif /* __cplusplus */
Helper struct to submit a batch of events (marks or ranges).
Binary payload data, size and decoding information.
Size and alignment information for predefined payload entry types.
This type is used to describe an enumeration.
NVTX payload enumeration type attributes.
const nvtxPayloadEnum_t * entries
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 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 or custom 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. Do not use it!
uint64_t flags
Flags to augment the basic type.
Header of the payload entry's semantic field.