YAPI improves system design flows by separating application modeling from other system design activities such as architecture modeling, mapping, and performance analysis. It provides a means for structured design and modeling of signal processing applications by explicitly exposing parallelism and communication, and it speeds up system design because the platform independent programmer's interface enables re-use .
YAPI is a C++ library with a set of rules for modeling signal processing applications as a process network consisting of processes that are interconnected by directed first-in-first-out channels called fifos. Communication is based on the Kahn Process Network model with blocking reads on theoretically unbounded fifos . In practice, fifos are bounded so that writes can also suspend process execution. Processes have a private state space which is not accessible by other processes. They communicate with their environment through input and output ports which are the formal arguments of processes. Fifos connect output ports to input ports; they are the actual arguments of processes. Each port is connected to precisely one fifo. Processes can read from their input ports and write to their output ports. The read method blocks if the corresponding fifo is empty. The write method blocks if the corresponding fifo is full, which avoids data loss during communication. Ports and fifos are typed which means that they can handle data of one type only. The structure of process networks, i.e., the binding of fifos to ports, is static; it is known at compile time and does not change at run time .