# 3. Library support

CUPTI can be used to profile CUDA applications, as well as applications that use CUDA via NVIDIA or third-party libraries. For most such libraries, the behavior is expected to be identical to applications using CUDA directly. However, for certain libraries, CUPTI has certain restrictions, or alternate behavior.

## 3.1. OptiX

CUPTI supports profiling of OptiX applications, but with certain restrictions.

Tracing

- Internal Kernels

    Kernels launched by OptiX that contain no user-defined code are given the generic name NVIDIA internal. CUPTI provides the tracing information for these kernels.

- User Kernels

    Kernels launched by OptiX can contain user-defined code. OptiX identifies these kernels with a custom name. This name starts with raygen__ (for “ray generation”). These kernels can be traced.

Profiling

CUPTI can profile both internal and user kernels using the Profiling APIs. In the auto range mode, range names will be numeric values starting from 0 to total number of kernels including internal and user defined kernels or maximum number of range set while calling set config API, whichever is minimum.

It is suggested to create the profiling session and enable the profiling at resource allocation time (e.g. context creation) and disable the profiling at the context destruction time.

Limitations

- CUPTI doesn’t issue any driver or runtime API callback for user kernels.

- Event, Metric and PC sampling APIs are not supported for OptiX applications.