Stream processing is a computer programming and computer engineering concept that can be used to design applications and hardware systems. When stream processing is used, data are organized into streams that are then fed to nodes or processors that manipulate the data in the stream, after which the data continue along the path so other nodes can manipulate them. At the end of the stream, the data are placed in memory or passed to an end-user application for use. A system or application that is using stream processing works most effectively when the stream information is being generated consistently by one or more sources, making it effective for digital signal processing (DSP), imaging and graphics, or high-bandwidth network traffic. The most widespread practical application of stream processing is in the production of computer graphics cards, in which stream processors are built into the graphics hardware to help perform multiple operations on incoming graphics data such as vertex arrays.
The basis for stream processing revolves around the concept of data as a stream. Instead of drawing information from disparate sources or intercepting messages from an interrupt mechanism, a data stream is formed when information is collated by some process into a single line called a stream. The data elements can vary, but the stream generally consists of blocks of the same types of elements that can be processed sequentially.
The processors or nodes used in stream processing accept a stream and perform a given operation on the data, after which the data can be passed to another node for more processing. For maximum efficiency, the nodes are intended to be small functions that are loaded and executed directly on the central processing unit (CPU), using registers and direct memory access (DMA) for speed. If the information within the stream can stand alone and is not reliant on the result of a single node’s operations, then multiple operations can be performed on the stream simultaneously, while also providing the program compiler with hints that can allow for very effective optimizations.
Stream processing generally is a good solution for situations in which data are consistently being generated and pushed into the stream by an application or device, such as a camera, external sensor or network connection. Many graphics cards use stream processors to quickly turn data coming in through a graphics pipeline into a rendered, rasterized image. Certain graphics cards have multiple processors or nodes built into the hardware of the card, so stream processing can occur quickly and sometimes simultaneously, as often is desirable when shaders are being used for three-dimensional (3D) graphics.