The NVIDIA SDK provides several different libraries (NvMedia, CUDA, OpenGL) for generating and processing various types of images and higher dimensional data. The interfaces used by these libraries were written independently to serve different needs, and each has its own means of representing memory and synchronization resources. There is no direct way to exchange data between them. Furthermore, most of the details of how and when resources used by these libraries are allocated is hidden from the application(s).

The NvStreams libraries serve two primary purposes:

  • They allow resources to be allocated up front, with access restrictions defined by the application(s), and with details of their overall requirements well understood. This is vital for safety-critical systems that must ensure the availability of resources and proper encapsulation of information.
  • They allow resources to be exchanged between libraries that otherwise do not have knowledge of each other.

This document describes three libraries. NvSciBuf allows applications to allocate and exchange buffers in memory. NvSciSync allows applications to manage synchronization objects that coordinate when sequence of operations begin and end. NvSciStream layers on NvSciBuf and NvSciSync to provide utilities for streaming sequences of data packets between multiple application modules to support a wide variety of use cases. These libraries also make use of NvSciIpc for inter-process/partition/system communication. This library is described in a separate chapter.