Computational Process Networks is a model and a framework library for real-time high-throughput signal and image processing on symmetric multiprocessing workstations. The model combines:
- Process Networks [1], a formal, concurrent model for functional parallelism
- Bounded Scheduling [2] for realization in finite memory
- Firing Thresholds from Computation Graphs [3]
Computational Process Networks model algorithms on overlapping continuous streams of data (such as digital filters and overlap-and-save fast Fourier transforms), and provides liveness and determinate execution. Our C++ implementation provides a portable, high-performance, scalable framework using POSIX Threads.
The March 2000 issue of IEEE Transactions on Signal Processing contains a paper [4] which prototypes a 3-D sonar beamfomer using Computational Process Networks. The beamfomer sustains a real-time 4 GFLOPS on a Sun Ultra Enterprise 4000 with 12 336 MHz UltraSPARC-II processors.
The Computational Process Network source code is publicly available, under the GNU GPL.
We use jmake, an automated, multi-platform build tool. You'll need it, too.
A core component of the Computational Process Network framework is the Pthread class library. It is developed on Sun Solaris, and runs (or has run) on many other platforms. These platforms include Linux, LinuxPPC, AIX, IRIX, MercuryOS, and MacOS X DP3. Other platforms which support POSIX Pthreads should also work with minimal effort.The Computational Process Network Sample code contains the Pthread library. It contains a simple program which demonstrates the use of the Computational Process Network framework, while attempting to test it. Currently, it has only been tested on Solaris, Linux, and LinuxPPC (but may work on others).
3/29/00 - This version has had a significant rewrite, with the following features:
- improved portability
- the virtual memory manager interface has been split into its own class
- queues can have multiple channels
- queues know how to grow (but not when)
- a few performace tweaks in the queues
- some depricated APIs in the queues [ EnqueueThreshold(), DequeueThreshold() ]
- the move to the name "Computational Process Networks"
For more information contact: Greg Allen <gallen AT utexas DOT edu>