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
931 const char* path;
932
934 uint64_t parentScope;
935
941 uint64_t scopeId;
943
944#endif /* NVTX_PAYLOAD_TYPEDEFS_V1 */
945
946#ifndef NVTX_PAYLOAD_TYPEDEFS_DEFERRED_V1
947#define NVTX_PAYLOAD_TYPEDEFS_DEFERRED_V1
948
950typedef struct nvtxTimeDomainAttr_v1
951{
953 uint64_t scopeId;
954
957
963 uint64_t timeDomainId;
964
966 uint64_t timerFlags;
967
970
972 uint64_t timerStart;
974
976typedef struct nvtxSyncPoint_v1
977{
978 int64_t src;
979 int64_t dst;
981
989typedef struct nvtxEventBatch_v1
990{
999
1001 size_t size;
1002
1004 const void* events;
1005
1007 uint64_t scope;
1008
1010 uint64_t flags;
1011
1013 const void* flexData;
1014
1017
1024
1025#endif /* NVTX_PAYLOAD_TYPEDEFS_DEFERRED_V1 */
1026
1027#ifndef NVTX_PAYLOAD_API_FUNCTIONS_V1
1028#define NVTX_PAYLOAD_API_FUNCTIONS_V1
1029
1036NVTX_DECLSPEC uint64_t NVTX_API nvtxPayloadSchemaRegister(
1037 nvtxDomainHandle_t domain,
1038 const nvtxPayloadSchemaAttr_t* attr);
1039
1046NVTX_DECLSPEC uint64_t NVTX_API nvtxPayloadEnumRegister(
1047 nvtxDomainHandle_t domain,
1048 const nvtxPayloadEnumAttr_t* attr);
1049
1059NVTX_DECLSPEC uint64_t NVTX_API nvtxScopeRegister(
1060 nvtxDomainHandle_t domain,
1061 const nvtxScopeAttr_t* attr);
1062
1074NVTX_DECLSPEC void NVTX_API nvtxMarkPayload(
1075 nvtxDomainHandle_t domain,
1076 const nvtxPayloadData_t* payloadData,
1077 size_t count);
1078
1090NVTX_DECLSPEC int NVTX_API nvtxRangePushPayload(
1091 nvtxDomainHandle_t domain,
1092 const nvtxPayloadData_t* payloadData,
1093 size_t count);
1094
1109NVTX_DECLSPEC int NVTX_API nvtxRangePopPayload(
1110 nvtxDomainHandle_t domain,
1111 const nvtxPayloadData_t* payloadData,
1112 size_t count);
1113
1124NVTX_DECLSPEC nvtxRangeId_t NVTX_API nvtxRangeStartPayload(
1125 nvtxDomainHandle_t domain,
1126 const nvtxPayloadData_t* payloadData,
1127 size_t count);
1128
1141NVTX_DECLSPEC void NVTX_API nvtxRangeEndPayload(
1142 nvtxDomainHandle_t domain,
1143 nvtxRangeId_t id,
1144 const nvtxPayloadData_t* payloadData,
1145 size_t count);
1146
1153NVTX_DECLSPEC uint8_t NVTX_API nvtxDomainIsEnabled(
1154 nvtxDomainHandle_t domain);
1155
1156#endif /* NVTX_PAYLOAD_API_FUNCTIONS_V1 */
1157
1158#ifndef NVTX_PAYLOAD_API_FUNCTIONS_DEFERRED_V1
1159#define NVTX_PAYLOAD_API_FUNCTIONS_DEFERRED_V1
1160
1166NVTX_DECLSPEC int64_t NVTX_API nvtxTimestampGet(void);
1167
1177NVTX_DECLSPEC uint64_t NVTX_API nvtxTimeDomainRegister(
1178 nvtxDomainHandle_t domain,
1179 const nvtxTimeDomainAttr_t* timeAttr);
1180
1192NVTX_DECLSPEC void NVTX_API nvtxTimerSource(
1193 nvtxDomainHandle_t domain,
1194 uint64_t timeDomainId,
1195 uint64_t flags,
1196 int64_t (*timestampProviderFn)(void));
1197
1209NVTX_DECLSPEC void NVTX_API nvtxTimerSourceWithData(
1210 nvtxDomainHandle_t domain,
1211 uint64_t timeDomainId,
1212 uint64_t flags,
1213 int64_t (*timestampProviderFn)(void* data),
1214 void* data);
1215
1230NVTX_DECLSPEC void NVTX_API nvtxTimeSyncPoint(
1231 nvtxDomainHandle_t domain,
1232 uint64_t timeDomainId1,
1233 uint64_t timeDomainId2,
1234 int64_t timestamp1,
1235 int64_t timestamp2);
1236
1248NVTX_DECLSPEC void NVTX_API nvtxTimeSyncPointTable(
1249 nvtxDomainHandle_t domain,
1250 uint64_t timeDomainIdSrc,
1251 uint64_t timeDomainIdDst,
1252 const nvtxSyncPoint_t* syncPoints,
1253 size_t count);
1254
1267NVTX_DECLSPEC void NVTX_API nvtxTimestampConversionFactor(
1268 nvtxDomainHandle_t domain,
1269 uint64_t timeDomainIdSrc,
1270 uint64_t timeDomainIdDst,
1271 double slope,
1272 int64_t timestampSrc,
1273 int64_t timestampDst);
1274
1282NVTX_DECLSPEC void NVTX_API nvtxEventSubmit(
1283 nvtxDomainHandle_t domain,
1284 const nvtxPayloadData_t* payloadData,
1285 size_t numPayloads);
1286
1293NVTX_DECLSPEC void NVTX_API nvtxEventBatchSubmit(
1294 nvtxDomainHandle_t domain,
1295 const nvtxEventBatch_t* eventBatch);
1296
1297#endif /* NVTX_PAYLOAD_API_FUNCTIONS_DEFERRED_V1 */
1298
1310#ifndef NVTX_PAYLOAD_CALLBACK_ID_V1
1311#define NVTX_PAYLOAD_CALLBACK_ID_V1
1312
1313#define NVTX3EXT_CBID_nvtxPayloadSchemaRegister 0
1314#define NVTX3EXT_CBID_nvtxPayloadEnumRegister 1
1315#define NVTX3EXT_CBID_nvtxMarkPayload 2
1316#define NVTX3EXT_CBID_nvtxRangePushPayload 3
1317#define NVTX3EXT_CBID_nvtxRangePopPayload 4
1318#define NVTX3EXT_CBID_nvtxRangeStartPayload 5
1319#define NVTX3EXT_CBID_nvtxRangeEndPayload 6
1320#define NVTX3EXT_CBID_nvtxDomainIsEnabled 7
1321#define NVTX3EXT_CBID_nvtxScopeRegister 12
1322
1323#endif /* NVTX_PAYLOAD_CALLBACK_ID_V1 */
1324
1325#ifndef NVTX_PAYLOAD_CALLBACK_ID_DEFERRED_V1
1326#define NVTX_PAYLOAD_CALLBACK_ID_DEFERRED_V1
1327
1328#define NVTX3EXT_CBID_nvtxTimestampGet 8
1329#define NVTX3EXT_CBID_nvtxTimeDomainRegister 9
1330#define NVTX3EXT_CBID_nvtxTimerSource 10
1331#define NVTX3EXT_CBID_nvtxTimerSourceWithData 11
1332#define NVTX3EXT_CBID_nvtxTimeSyncPoint 13
1333#define NVTX3EXT_CBID_nvtxTimeSyncPointTable 14
1334#define NVTX3EXT_CBID_nvtxTimestampConversionFactor 15
1335#define NVTX3EXT_CBID_nvtxEventSubmit 16
1336#define NVTX3EXT_CBID_nvtxEventBatchSubmit 17
1337
1338#endif /* NVTX_PAYLOAD_CALLBACK_ID_DEFERRED_V1 */
1339
1340/*** Helper utilities ***/
1341
1343#ifndef NVTX_POINTER_AS_PAYLOAD_ULLVALUE
1344# ifdef __cplusplus
1345# define NVTX_POINTER_AS_PAYLOAD_ULLVALUE(p) \
1346 static_cast<uint64_t>(reinterpret_cast<uintptr_t>(p))
1347# else
1348#define NVTX_POINTER_AS_PAYLOAD_ULLVALUE(p) (NVTX_STATIC_CAST(uint64_t, NVTX_STATIC_CAST(uintptr_t, p))
1349# endif
1350#endif
1351
1352#ifndef NVTX_PAYLOAD_EVTATTR_SET_DATA
1362#define NVTX_PAYLOAD_EVTATTR_SET_DATA(evtAttr, pldata_addr, schema_id, pl_addr, sz) \
1363 (pldata_addr)->schemaId = schema_id; \
1364 (pldata_addr)->size = sz; \
1365 (pldata_addr)->payload = pl_addr; \
1366 (evtAttr).payload.ullValue = NVTX_POINTER_AS_PAYLOAD_ULLVALUE(pldata_addr); \
1367 (evtAttr).payloadType = NVTX_PAYLOAD_TYPE_EXT; \
1368 (evtAttr).reserved0 = 1;
1369#endif /* NVTX_PAYLOAD_EVTATTR_SET_DATA */
1370
1371#ifndef NVTX_PAYLOAD_EVTATTR_SET_MULTIPLE
1378#define NVTX_PAYLOAD_EVTATTR_SET_MULTIPLE(evtAttr, pldata) \
1379 (evtAttr).payloadType = NVTX_PAYLOAD_TYPE_EXT; \
1380 (evtAttr).reserved0 = sizeof(pldata)/sizeof(nvtxPayloadData_t); \
1381 (evtAttr).payload.ullValue = NVTX_POINTER_AS_PAYLOAD_ULLVALUE(pldata);
1382#endif /* NVTX_PAYLOAD_EVTATTR_SET_MULTIPLE */
1383
1384#ifndef NVTX_PAYLOAD_EVTATTR_SET
1385/*
1386 * Do not use this macro directly! It is a helper to attach a single payload to
1387 * an NVTX event attribute.
1388 * @warning The NVTX push, start or mark operation must not be in an outer scope.
1389 */
1390#define NVTX_PAYLOAD_EVTATTR_SET(evtAttr, schema_id, pl_addr, sz) \
1391 nvtxPayloadData_t _NVTX_PAYLOAD_DATA_VAR[] = \
1392 {{schema_id, sz, pl_addr}}; \
1393 (evtAttr)->payload.ullValue = \
1394 NVTX_POINTER_AS_PAYLOAD_ULLVALUE(_NVTX_PAYLOAD_DATA_VAR); \
1395 (evtAttr)->payloadType = NVTX_PAYLOAD_TYPE_EXT; \
1396 (evtAttr)->reserved0 = 1;
1397#endif /* NVTX_PAYLOAD_EVTATTR_SET */
1398
1399#ifndef nvtxPayloadRangePush
1409#define nvtxPayloadRangePush(domain, evtAttr, schemaId, plAddr, size) \
1410do { \
1411 NVTX_PAYLOAD_EVTATTR_SET(evtAttr, schemaId, plAddr, size) \
1412 nvtxDomainRangePushEx(domain, evtAttr); \
1413} while (0)
1414#endif /* nvtxPayloadRangePush */
1415
1416#ifndef nvtxPayloadMark
1426#define nvtxPayloadMark(domain, evtAttr, schemaId, plAddr, size) \
1427do { \
1428 NVTX_PAYLOAD_EVTATTR_SET(evtAttr, schemaId, plAddr, size) \
1429 nvtxDomainMarkEx(domain, evtAttr); \
1430} while (0)
1431#endif /* nvtxPayloadMark */
1432
1433/* Macros to create versioned symbols. */
1434#ifndef NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIERS_V1
1435#define NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIERS_V1
1436#define NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIER_L3(NAME, VERSION, COMPATID) \
1437 NAME##_v##VERSION##_bpl##COMPATID
1438#define NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIER_L2(NAME, VERSION, COMPATID) \
1439 NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIER_L3(NAME, VERSION, COMPATID)
1440#define NVTX_EXT_PAYLOAD_VERSIONED_ID(NAME) \
1441 NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIER_L2(NAME, NVTX_VERSION, NVTX_EXT_PAYLOAD_COMPATID)
1442#endif /* NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIERS_V1 */
1443
1444#ifdef __GNUC__
1445#pragma GCC visibility push(internal)
1446#endif
1447
1448/* Extension types are required for the implementation and the NVTX handler. */
1449#define NVTX_EXT_TYPES_GUARD
1450#include "nvtxDetail/nvtxExtTypes.h"
1451#undef NVTX_EXT_TYPES_GUARD
1452
1453#ifndef NVTX_NO_IMPL
1454#define NVTX_EXT_IMPL_PAYLOAD_GUARD
1455#include "nvtxDetail/nvtxExtImplPayload_v1.h"
1456#undef NVTX_EXT_IMPL_PAYLOAD_GUARD
1457#endif /* NVTX_NO_IMPL */
1458
1459#ifdef __GNUC__
1460#pragma GCC visibility pop
1461#endif
1462
1463#ifdef __cplusplus
1464}
1465#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.