A "stream" is simply a set of records that require similar computation. Streams provide data parallelism. "Kernels" are the functions that are applied to each element in the stream. In the GPUs, "vertices" and "fragments" are the elements in streams and vertex and fragment shaders are the kernels to be run on them. For each element we can only read from the input, perform operations on it, and write to the output. It is permissible to have multiple inputs and multiple outputs, but never a piece of memory that is both readable and writable.