Sun Sep 27 15:28:46 CEST 2009

DSP: the problem

Looking back at the last couple of years, I'm not sure if I really got
much closer to solving my initial problem: ``higher level description
of DSP applications which allows (dynamic) rapid prototyping and
compilation to optimized (static) structure.''

I think I have a good idea now about the dynamic side of things.
Tools like Pure Data and Simulink help a lot, though they require a
huge library of tools to be useful.  These tools tend to be specific
and tied to the framework.

It would be better if the prototyping environment and the
specification language for efficient compilation are actually the same
thing.  The granularity is still too coarse, and the implementation
too specific..

In the last couple of years I learned a bit about staging and partial
evaluation.  The thing that still puzzles me is sequencing and
combinator transformations: conversion of high level operations to
somewhat optimally sequenced code (vs. CPU feed rate and memory

This book[1] might bring some more insight in currently used
methods. (``Embedded Computing: A VLIW Approach to Architecture,
Compilers and Tools'').

Chapter 10, programming languages talks about extensions to C as:
  - restricted pointers (aliasing)
  - fixed point arithmetic
  - circular addressing
  - matrix referencing and operators (FORTRAN style)

Remarks on writing for ILP:
  - avoid irregular loop kernels
  - write code for predication (avoid mem ref in if-statements)
  - provide aliasing hints (`restricted')
  - localize variables
  - eliminate redundant loads
  - enable prefetching and exploit locality properties
  - specialize code
  - LUTs and memoization

[1] isbn://1558607668