NVTX C API Reference v3
NVIDIA Tools Extension Library
Loading...
Searching...
No Matches
nvToolsExtMem.h
1/*
2 * SPDX-FileCopyrightText: Copyright (c) 2009-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#ifdef __cplusplus
34extern "C" {
35#endif /* __cplusplus */
36
37#ifndef NVTX_EXT_MODULEID_MEM
38#define NVTX_EXT_MODULEID_MEM 1
39#endif
40
41/* \cond SHOW_HIDDEN
42 * \brief A compatibility ID value used in structures and initialization to
43 * identify version differences.
44 */
45#ifndef NVTX_EXT_COMPATID_MEM
46#define NVTX_EXT_COMPATID_MEM 0x0102
47#endif
48/* \endcond
49 */
50
51#ifndef NVTX_MEM_CONTENTS_V1
52#define NVTX_MEM_CONTENTS_V1
53
54/* \cond SHOW_HIDDEN
55 * \brief This value is returned by functions that return `nvtxMemHeapHandle_t`,
56 * if a tool is not attached.
57 */
58#define NVTX_MEM_HEAP_HANDLE_NO_TOOL (NVTX_STATIC_CAST(nvtxMemHeapHandle_t, NVTX_STATIC_CAST(intptr_t, -1)))
59/* \endcond
60 */
61
62/* \cond SHOW_HIDDEN
63 * \brief This value is returned by functions that return `nvtxMemRegionHandle_t`
64 * if a tool is not attached.
65 */
66#define NVTX_MEM_REGION_HANDLE_NO_TOOL (NVTX_STATIC_CAST(nvtxMemRegionHandle_t, NVTX_STATIC_CAST(intptr_t, -1)))
67/* \endcond
68 */
69
70/* \cond SHOW_HIDDEN
71 * \brief This value is returned by functions that return `nvtxMemPermissionsHandle_t`
72 * if a tool is not attached.
73 */
74#define NVTX_MEM_PERMISSIONS_HANDLE_NO_TOOL (NVTX_STATIC_CAST(nvtxMemPermissionsHandle_t, -1))
75/* \endcond
76 */
77
78
79/* \cond SHOW_HIDDEN
80 * \brief This should not be used and is considered an error but defined to
81 * detect an accidental use of zero or NULL.
82 */
83#define NVTX_MEM_HEAP_USAGE_UNKNOWN 0x0
84/* \endcond
85 */
86
87
88/* \cond SHOW_HIDDEN
89 * \brief This should not be used and is considered an error but defined to
90 * detect an accidental use of zero or NULL.
91 */
92#define NVTX_MEM_TYPE_UNKNOWN 0x0
93/* \endcond
94 */
95
96
97/* ------------------------------------------------------------------------- */
110#define NVTX_MEM_HEAP_HANDLE_PROCESS_WIDE (NVTX_STATIC_CAST(nvtxMemHeapHandle_t, 0))
111
117#define NVTX_MEM_HEAP_USAGE_TYPE_SUB_ALLOCATOR 0x1
118
134#define NVTX_MEM_HEAP_USAGE_TYPE_LAYOUT 0x2
135
136
147#define NVTX_MEM_TYPE_VIRTUAL_ADDRESS 0x1
148
149
156#define NVTX_MEM_PERMISSIONS_HANDLE_PROCESS_WIDE (NVTX_STATIC_CAST(nvtxMemPermissionsHandle_t, 0))
157
158#define NVTX_MEM_PERMISSIONS_CREATE_FLAGS_NONE 0x0
159#define NVTX_MEM_PERMISSIONS_CREATE_FLAGS_EXCLUDE_GLOBAL_READ 0x1
160#define NVTX_MEM_PERMISSIONS_CREATE_FLAGS_EXCLUDE_GLOBAL_WRITE 0x2
161#define NVTX_MEM_PERMISSIONS_CREATE_FLAGS_EXCLUDE_GLOBAL_ATOMIC 0x4
162
163
164/* \cond SHOW_HIDDEN
165 * \brief Forward declaration of opaque memory heap structure.
166 */
167struct nvtxMemHeap_v1;
168typedef struct nvtxMemHeap_v1 nvtxMemHeap_t;
169/* \endcond
170 */
171
173typedef nvtxMemHeap_t* nvtxMemHeapHandle_t;
174
175/* \cond SHOW_HIDDEN
176 * \brief Forward declaration of opaque memory heap structure.
177 */
178struct nvtxMemRegion_v1;
179typedef struct nvtxMemRegion_v1 nvtxMemRegion_t;
180/* \endcond
181 */
182
184typedef nvtxMemRegion_t* nvtxMemRegionHandle_t;
185
190{
191 void const* pointer;
194
195/* \cond SHOW_HIDDEN
196 * \brief Forward declaration of opaque memory permissions structure
197 */
198struct nvtxMemPermissions_v1;
199typedef struct nvtxMemPermissions_v1 nvtxMemPermissions_t;
200/* \endcond
201 */
202
204typedef nvtxMemPermissions_t* nvtxMemPermissionsHandle_t;
205
206
208{
209 size_t size;
210 void const* ptr;
213
214
216typedef struct nvtxMemHeapDesc_v1
217{
218 uint16_t extCompatID; /* Set to NVTX_EXT_COMPATID_MEM */
219 uint16_t structSize; /* Size of the structure. */
220 uint32_t reserved0;
221
231 uint32_t usage;
232
250 uint32_t type;
251
257
267 void const* typeSpecificDesc;
268
279 uint32_t category;
280
288 uint32_t messageType; /* nvtxMessageType_t */
289
295
298
313 nvtxDomainHandle_t domain,
314 nvtxMemHeapDesc_t const* desc);
315
317NVTX_DECLSPEC void NVTX_API nvtxMemHeapUnregister(
318 nvtxDomainHandle_t domain,
319 nvtxMemHeapHandle_t heap);/* NVTX_MEM_HEAP_HANDLE_PROCESS_WIDE is not supported */
320
326NVTX_DECLSPEC void NVTX_API nvtxMemHeapReset(
327 nvtxDomainHandle_t domain,
328 nvtxMemHeapHandle_t heap); /* NVTX_MEM_HEAP_HANDLE_PROCESS_WIDE is supported */
329
349{
350 uint16_t extCompatID; /* Set to NVTX_EXT_COMPATID_MEM */
351 uint16_t structSize; /* Size of the structure. */
352
353 uint32_t regionType; /* NVTX_MEM_TYPE_* */
354
356
357 size_t regionCount;
358 size_t regionDescElementSize;
359 void const* regionDescElements; /* This will also become the handle for this region. */
360 nvtxMemRegionHandle_t* regionHandleElementsOut; /* This will also become the handle for this region. */
361
364
367NVTX_DECLSPEC void NVTX_API nvtxMemRegionsRegister(
368 nvtxDomainHandle_t domain,
370
371
372
391{
392 uint16_t extCompatID; /* Set to NVTX_EXT_COMPATID_MEM */
393 uint16_t structSize; /* Size of the structure. */
394
395 uint32_t regionType; /* NVTX_MEM_TYPE_* */
396
397 size_t regionDescCount;
398 size_t regionDescElementSize;
399 void const* regionDescElements; /* This will also become the handle for this region. */
400
403
406NVTX_DECLSPEC void NVTX_API nvtxMemRegionsResize(
407 nvtxDomainHandle_t domain,
408 nvtxMemRegionsResizeBatch_t const* desc);
409
410
411#define NVTX_MEM_REGION_REF_TYPE_UNKNOWN 0x0
412#define NVTX_MEM_REGION_REF_TYPE_POINTER 0x1
413#define NVTX_MEM_REGION_REF_TYPE_HANDLE 0x2
414
434{
435 uint16_t extCompatID; /* Set to NVTX_EXT_COMPATID_MEM */
436 uint16_t structSize; /* Size of the structure. */
437
438 uint32_t refType; /* NVTX_MEM_REGION_REF_TYPE_* */
439
440 size_t refCount; /* count of elements in refArray */
441 size_t refElementSize;
442 nvtxMemRegionRef_t const* refElements; /* This will also become the handle for this region. */
443
446
453NVTX_DECLSPEC void NVTX_API nvtxMemRegionsUnregister(
454 nvtxDomainHandle_t domain,
456
458{
459 uint32_t regionRefType; /* NVTX_MEM_REGION_REF_TYPE_* */
460 uint32_t nameType; /* nvtxMessageType_t */
461
462 nvtxMemRegionRef_t region;
464
465 uint32_t category;
466 uint32_t reserved0;
469
470
472{
473 uint16_t extCompatID; /* Set to NVTX_EXT_COMPATID_MEM */
474 uint16_t structSize; /* Size of the structure. */
475
476 uint32_t reserved0;
477
478 size_t regionCount;
479 size_t regionElementSize;
480 nvtxMemRegionNameDesc_t const* regionElements;
481 size_t reserved1;
484
485
487NVTX_DECLSPEC void NVTX_API nvtxMemRegionsName(
488 nvtxDomainHandle_t domain,
489 nvtxMemRegionsNameBatch_t const* desc);
490
492#define NVTX_MEM_PERMISSIONS_REGION_FLAGS_NONE 0x0
493
495#define NVTX_MEM_PERMISSIONS_REGION_FLAGS_READ 0x1
496
498#define NVTX_MEM_PERMISSIONS_REGION_FLAGS_WRITE 0x2
499
501#define NVTX_MEM_PERMISSIONS_REGION_FLAGS_ATOMIC 0x4
502
511#define NVTX_MEM_PERMISSIONS_REGION_FLAGS_RESET 0x8
512
513
515{
516 uint32_t flags; /* NVTX_MEM_PERMISSIONS_REGION_FLAGS_* */
517 uint32_t regionRefType; /* NVTX_MEM_REGION_REF_TYPE_* */
518 nvtxMemRegionRef_t region;
519
522
523
525{
526 uint16_t extCompatID; /* Set to NVTX_EXT_COMPATID_MEM */
527 uint16_t structSize; /* Size of the structure. */
528
529 uint32_t reserved0;
530
531 nvtxMemPermissionsHandle_t permissions;
532
533 size_t regionCount;
534 size_t regionElementSize;
535 nvtxMemPermissionsAssignRegionDesc_t const* regionElements;
536
537 size_t reserved1;
540
541
543NVTX_DECLSPEC void NVTX_API nvtxMemPermissionsAssign(
544 nvtxDomainHandle_t domain,
546
547
570 nvtxDomainHandle_t domain,
571 int32_t creationflags); /* NVTX_MEM_PERMISSIONS_CREATE_FLAGS_* */
572
578NVTX_DECLSPEC void NVTX_API nvtxMemPermissionsDestroy(
579 nvtxDomainHandle_t domain,
580 nvtxMemPermissionsHandle_t permissionsHandle); /* only supported on objects from nvtxMemPermissionsCreate */
581
583NVTX_DECLSPEC void NVTX_API nvtxMemPermissionsReset(
584 nvtxDomainHandle_t domain,
585 nvtxMemPermissionsHandle_t permissionsHandle);
586/* NVTX_MEM_PERMISSIONS_HANDLE_PROCESS_WIDE and other special handles are supported */
587
588
589#define NVTX_MEM_PERMISSIONS_BIND_FLAGS_NONE 0x0
590
596#define NVTX_MEM_PERMISSIONS_BIND_FLAGS_STRICT_WRITE 0x2
597
603#define NVTX_MEM_PERMISSIONS_BIND_FLAGS_STRICT_READ 0x1
604
612#define NVTX_MEM_PERMISSIONS_BIND_FLAGS_STRICT_ATOMIC 0x4
613
614
615#define NVTX_MEM_PERMISSIONS_BIND_SCOPE_UNKNOWN 0x0
616
624#define NVTX_MEM_PERMISSIONS_BIND_SCOPE_CPU_THREAD 0x1
625
644#define NVTX_MEM_PERMISSIONS_BIND_SCOPE_CUDA_STREAM 0x2
645
646
671NVTX_DECLSPEC void NVTX_API nvtxMemPermissionsBind(
672 nvtxDomainHandle_t domain,
673 nvtxMemPermissionsHandle_t permissions, /* special object like NVTX_MEM_PERMISSIONS_HANDLE_PROCESS_WIDE are not supported */
674 uint32_t bindScope, /* NVTX_MEM_PERMISSIONS_BIND_SCOPE_* */
675 uint32_t bindFlags); /* NVTX_MEM_PERMISSIONS_BIND_FLAGS_* */
676
683NVTX_DECLSPEC void NVTX_API nvtxMemPermissionsUnbind(
684 nvtxDomainHandle_t domain,
685 uint32_t bindScope);
686
689#endif /* NVTX_MEM_CONTENTS_V1 */
690
691#ifndef NVTX_MEM_CALLBACK_ID_V1
692#define NVTX_MEM_CALLBACK_ID_V1
693
694#define NVTX3EXT_CBID_nvtxMemHeapRegister 0
695#define NVTX3EXT_CBID_nvtxMemHeapUnregister 1
696#define NVTX3EXT_CBID_nvtxMemHeapReset 2
697#define NVTX3EXT_CBID_nvtxMemRegionsRegister 3
698#define NVTX3EXT_CBID_nvtxMemRegionsResize 4
699#define NVTX3EXT_CBID_nvtxMemRegionsUnregister 5
700#define NVTX3EXT_CBID_nvtxMemRegionsName 6
701#define NVTX3EXT_CBID_nvtxMemPermissionsAssign 7
702#define NVTX3EXT_CBID_nvtxMemPermissionsCreate 8
703#define NVTX3EXT_CBID_nvtxMemPermissionsDestroy 9
704#define NVTX3EXT_CBID_nvtxMemPermissionsReset 10
705#define NVTX3EXT_CBID_nvtxMemPermissionsBind 11
706#define NVTX3EXT_CBID_nvtxMemPermissionsUnbind 12
707
708/* 13-16 in nvtxExtImplMemCudaRt_v1.h */
709#define NVTX3EXT_CBID_nvtxMemCudaGetProcessWidePermissions 13
710#define NVTX3EXT_CBID_nvtxMemCudaGetDeviceWidePermissions 14
711#define NVTX3EXT_CBID_nvtxMemCudaSetPeerAccess 15
712#define NVTX3EXT_CBID_nvtxMemCudaMarkInitialized 16
713
714#endif /* NVTX_MEM_CALLBACK_ID_V1 */
715
716/* Macros to create versioned symbols. */
717#ifndef NVTX_EXT_MEM_VERSIONED_IDENTIFIERS_V1
718#define NVTX_EXT_MEM_VERSIONED_IDENTIFIERS_V1
719#define NVTX_EXT_MEM_VERSIONED_IDENTIFIER_L3(NAME, VERSION, COMPATID) \
720 NAME##_v##VERSION##_mem##COMPATID
721#define NVTX_EXT_MEM_VERSIONED_IDENTIFIER_L2(NAME, VERSION, COMPATID) \
722 NVTX_EXT_MEM_VERSIONED_IDENTIFIER_L3(NAME, VERSION, COMPATID)
723#define NVTX_EXT_MEM_VERSIONED_ID(NAME) \
724 NVTX_EXT_MEM_VERSIONED_IDENTIFIER_L2(NAME, NVTX_VERSION, NVTX_EXT_COMPATID_MEM)
725#endif /* NVTX_EXT_MEM_VERSIONED_IDENTIFIERS_V1 */
726
727#ifdef __GNUC__
728#pragma GCC visibility push(internal)
729#endif
730
731/* Extension types are required for the implementation and the NVTX handler. */
732#define NVTX_EXT_TYPES_GUARD /* Ensure other headers cannot be included directly */
733#include "nvtxDetail/nvtxExtTypes.h"
734#undef NVTX_EXT_TYPES_GUARD
735
736#ifndef NVTX_NO_IMPL
737/* Ensure other headers cannot be included directly */
738#define NVTX_EXT_IMPL_MEM_GUARD
739#include "nvtxDetail/nvtxExtImplMem_v1.h"
740#undef NVTX_EXT_IMPL_MEM_GUARD
741#endif /*NVTX_NO_IMPL*/
742
743#ifdef __GNUC__
744#pragma GCC visibility pop
745#endif
746
747#ifdef __cplusplus
748}
749#endif /* __cplusplus */
NVTX_DECLSPEC void NVTX_API nvtxMemRegionsUnregister(nvtxDomainHandle_t domain, nvtxMemRegionsUnregisterBatch_t const *desc)
Unregistration for regions of process virtual memory.
NVTX_DECLSPEC void NVTX_API nvtxMemRegionsResize(nvtxDomainHandle_t domain, nvtxMemRegionsResizeBatch_t const *desc)
Register a region of memory inside of a heap of linear process virtual memory.
NVTX_DECLSPEC nvtxMemPermissionsHandle_t NVTX_API nvtxMemPermissionsCreate(nvtxDomainHandle_t domain, int32_t creationflags)
Create a permissions object for fine grain thread-local control in multi-threading scenarios.
NVTX_DECLSPEC void NVTX_API nvtxMemRegionsRegister(nvtxDomainHandle_t domain, nvtxMemRegionsRegisterBatch_t const *desc)
Register a region of memory inside of a heap of linear process virtual memory.
NVTX_DECLSPEC void NVTX_API nvtxMemHeapReset(nvtxDomainHandle_t domain, nvtxMemHeapHandle_t heap)
Reset the memory heap wipes out any changes, as if it were a fresh heap.
nvtxMemPermissions_t * nvtxMemPermissionsHandle_t
A handle returned by a tool to represent a memory permissions mask.
NVTX_DECLSPEC void NVTX_API nvtxMemPermissionsBind(nvtxDomainHandle_t domain, nvtxMemPermissionsHandle_t permissions, uint32_t bindScope, uint32_t bindFlags)
Bind the permissions object into a particular scope on the caller thread.
NVTX_DECLSPEC nvtxMemHeapHandle_t NVTX_API nvtxMemHeapRegister(nvtxDomainHandle_t domain, nvtxMemHeapDesc_t const *desc)
Create a memory heap to represent a object or range of memory that will be further sub-divided into r...
NVTX_DECLSPEC void NVTX_API nvtxMemPermissionsDestroy(nvtxDomainHandle_t domain, nvtxMemPermissionsHandle_t permissionsHandle)
Destroy the permissions object.
nvtxMemHeap_t * nvtxMemHeapHandle_t
A handle returned by a tool to represent a memory heap.
NVTX_DECLSPEC void NVTX_API nvtxMemPermissionsReset(nvtxDomainHandle_t domain, nvtxMemPermissionsHandle_t permissionsHandle)
Reset the permissions object back to its created state.
NVTX_DECLSPEC void NVTX_API nvtxMemHeapUnregister(nvtxDomainHandle_t domain, nvtxMemHeapHandle_t heap)
Destroy a memory heap.
NVTX_DECLSPEC void NVTX_API nvtxMemRegionsName(nvtxDomainHandle_t domain, nvtxMemRegionsNameBatch_t const *desc)
Name or rename a region.
nvtxMemRegion_t * nvtxMemRegionHandle_t
A handle returned by a tool to represent a memory region.
NVTX_DECLSPEC void NVTX_API nvtxMemPermissionsAssign(nvtxDomainHandle_t domain, nvtxMemPermissionsAssignBatch_t const *desc)
Change the permissions of a region of process virtual memory.
NVTX_DECLSPEC void NVTX_API nvtxMemPermissionsUnbind(nvtxDomainHandle_t domain, uint32_t bindScope)
Unbind the permissions object bound to the caller thread.
structure to describe a heap in process virtual memory.
uint32_t type
Memory type characteristics of the heap.
uint32_t category
ID of the category the event is assigned to.
uint32_t messageType
Message type specified in this attribute structure.
void const * typeSpecificDesc
Pointer to the heap memory descriptor.
uint32_t usage
Usage characteristics of the heap.
nvtxMessageValue_t message
Message assigned to this attribute structure..
size_t typeSpecificDescSize
size of the heap memory descriptor pointed to by typeSpecificDesc
Register a region of memory inside of a heap.
Register a region of memory inside of a heap.
Register a region of memory inside of a heap.
A reference to a memory region (by pointer or handle). Which member of the union will be determined b...