Stream Kernel to Kernel
=======================

This is a simple kernel to kernel streaming Vector Add and Vector
Multiply C Kernel that demonstrates on how to process a stream of data
for computation between two kernels.

**KEY CONCEPTS:** Read/Write Stream, Create/Release Stream

**KEYWORDS:** cl_stream, CL_STREAM_EOT, CL_STREAM_NONBLOCKING

This example demonstrates how two kernels ``kernel_stream_vadd`` and
``kernel_stream_vmult`` can communicate through a stream interface.
Rather than loading the results from producer kernel
``kernel_stream_vadd`` to global memory and then to consumer kernel
``kernel_stream_vmult`` we can use stream to transfer this data
directly. It reduces the latency of the application and also reduces the
memory utilization.

For kernel to kernel streaming transfer, kernel to kernel data transfer
ports do not need ``clSetKernelArg`` from host code.

Producer kernel ``krnl_stream_vadd`` streaming output port needs to be
connected to consumer kernel ``krnl_stream_vmult`` stream input port
during ``v++`` using ``krnl_stream_vadd_vmult.ini`` file as below:

::

   [connectivity]
   stream_connect=krnl_stream_vadd_1.output:krnl_stream_vmult_1.b

This stream connection specify that ``output`` streaming port of
``krnl_stream_vadd_1`` will be connected to ``b`` streaming port of
``krnl_stream_vmult`` during system linker run. This connectivity file
is provided to v++ command as below:

::

    --config krnl_stream_vadd_vmult.ini

EXCLUDED PLATFORMS
------------------

Platforms containing following strings in their names are not supported
for this example :

::

   zc
   xdma
   xilinx_u250_qep
   aws
   samsung

DESIGN FILES
------------

Application code is located in the src directory. Accelerator binary
files will be compiled to the xclbin directory. The xclbin directory is
required by the Makefile and its contents will be filled during
compilation. A listing of all the files in this example is shown below

::

   src/host.cpp
   src/krnl_stream_vadd.cpp
   src/krnl_stream_vmult.cpp

COMMAND LINE ARGUMENTS
----------------------

Once the environment has been configured, the application can be
executed by

::

   ./vadd_stream <krnl_stream_vadd_vmult XCLBIN>