Meta-Programming and Policy-Based Design as a Technique of Architecting Modular and Efficient DSP Algorithm Implementations

Meta-programming paradigm and policy-based design are less known programming techniques in Digital Signal Processing (DSP) community, used to coding in pure C or assembly language. Major software components, like C++ STL, have proven usefulness of such paradigms in providing top performance of highly optimised native code, along with abstraction and modularity necessary in complex software projects. This paper describes composition of DSP code using these techniques, bringing as an example implementation of Feedback Delay Network (FDN) artificial reverberation algorithm. The proposed approach was proven to be practical, especially in case of prototyping computationally intense algorithms. To provide further performance insight, we discuss the techniques in context of other optimisation methods, like Single Instruction Multiple Data (SIMD) instruction sets usage and exploitation of superscalar architecture capabilities.

[1]  Gerhard Fettweis,et al.  Implementation of recursive digital filters into vector SIMD DSP architectures , 2004, 2004 IEEE International Conference on Acoustics, Speech, and Signal Processing.

[2]  Edward A. Lee,et al.  Direct synthesis of optimized DSP assembly code from signal flow block diagrams , 1992, [Proceedings] ICASSP-92: 1992 IEEE International Conference on Acoustics, Speech, and Signal Processing.

[3]  Steven G. Johnson,et al.  FFTW: an adaptive software architecture for the FFT , 1998, Proceedings of the 1998 IEEE International Conference on Acoustics, Speech and Signal Processing, ICASSP '98 (Cat. No.98CH36181).

[4]  Perry R. Cook,et al.  ChucK: A Concurrent, On-the-fly, Audio Programming Language , 2003, ICMC.

[5]  E. Stewart,et al.  Intel Integrated Performance Primitives: How to Optimize Software Applications Using Intel IPP , 2004 .

[6]  Bjarne Stroustrup,et al.  The Design and Evolution of C , 1994 .

[7]  Ben Juurlink,et al.  Efficient Vectorization of the FIR Filter Asadollah , 2005 .

[8]  Jean-Marc Jot,et al.  Digital Delay Networks for Designing Artificial Reverberators , 1991 .

[9]  Franz Franchetti,et al.  SPIRAL: Code Generation for DSP Transforms , 2005, Proceedings of the IEEE.

[10]  Andrei Alexandrescu,et al.  Modern C++ design: generic programming and design patterns applied , 2001 .

[11]  Lizy Kurian John,et al.  Exploiting SIMD parallelism in DSP and multimedia algorithms using the AltiVec technology , 1999, ICS '99.

[12]  Ralph Johnson,et al.  design patterns elements of reusable object oriented software , 2019 .

[13]  James McCartney,et al.  Rethinking the Computer Music Language: SuperCollider , 2002, Computer Music Journal.

[14]  Ireneusz Gawlik,et al.  Efficient vectorized architecture for Feedback Delay Network reverberator with policy based design , 2015, 2015 Signal Processing: Algorithms, Architectures, Arrangements, and Applications (SPA).

[15]  Steven G. Johnson,et al.  The Design and Implementation of FFTW3 , 2005, Proceedings of the IEEE.

[16]  Stéphan Jourdan,et al.  Haswell: The Fourth-Generation Intel Core Processor , 2014, IEEE Micro.

[17]  Wonyong Sung,et al.  H.264 decoder optimization exploiting SIMD instructions , 2004, The 2004 IEEE Asia-Pacific Conference on Circuits and Systems, 2004. Proceedings..

[18]  Todd L. Veldhuizen,et al.  Expression templates , 1996 .

[19]  B. Wess,et al.  Optimized DSP assembly code generation starting from homogeneous atomic data flow graphs , 1995, 38th Midwest Symposium on Circuits and Systems. Proceedings.

[20]  Davide Rocchesso,et al.  Circulant and elliptic feedback delay networks for artificial reverberation , 1997, IEEE Trans. Speech Audio Process..

[21]  이호균 Standard Template Library(STL)를 이용한 Track Manager 설계 , 2012 .

[22]  Karel Driesen,et al.  The direct cost of virtual function calls in C++ , 1996, OOPSLA '96.

[23]  Mikael Laurson,et al.  KRONOS - A VECTORIZING COMPILER FOR MUSIC DSP , 2009 .

[24]  Dominique Fober,et al.  FAUST : an Efficient Functional Approach to DSP Programming , 2009 .

[25]  Jie Chen,et al.  Automatic Offloading C++ Expression Templates to CUDA Enabled GPUs , 2012, 2012 IEEE 26th International Parallel and Distributed Processing Symposium Workshops & PhD Forum.

[26]  Nihar R. Mahapatra,et al.  The processor-memory bottleneck: problems and solutions , 1999, CROS.

[27]  N. Burrus,et al.  A Static C++ Object-Oriented Programming (SCOOP) Paradigm , 2003 .

[28]  Ge Wang,et al.  The chuck audio programming language. a strongly-timed and on-the-fly environ/mentality , 2008 .

[29]  Bjarne Stroustrup Foundations of C++ , 2012, ESOP.