---------------------------
FFTW-GEL SIMD Vectorization
---------------------------

This package illustrates the automatic 2-way SIMD-vectorization
process done in the codelet-generator of FFTW-GEL (URL
http://www.complang.tuwien.ac.at/skral/fftwgel.html), a 2-way
SIMD-vectorized variant of FFTW (URL http://www.fftw.org).

The actual vectorization engine of FFTW-GEL is implemented in
Objective CAML (ocaml), a statically-typed functional programming
language.

Unfortunately, the ocaml-code is not suitable for presentation because
of a number of reasons.
  (1) The ocaml-code is quite long (more than 700 lines of core-code
      plus several hundred lines of auxiliary code, not counting the
      code of the standard library).
  (2) The ocaml-code makes extensive use of higher-order
      constructs and monads to hide the backtracking process needed
      for the vectorization search.
  (3) The use of side-effects in the code poses an obstacle to the
      comprehension of the actual meaning of the code.

Hence, I tried to find a better level of representation for the
vectorization process. Specifically, my goals were the following.
  (1) The code should be as compact as pseudo-code.
  (2) The code should be executable.
  (3) The package should include all code used 
      (the standard-library is _not_ used).
  (4) Performance of the code should be acceptable.

The first prototype of the vectorization engine was crafted in
Prolog. So I decided to use a monotone, pure subset of Prolog 
for this task.

The package consists of the following files:
  COPYING
	the GNU General Public License (GPL) Version 2
  demo.pl
	a little demo showing how to use the vectorization engine
  fftw_isdefinitions.pl
	definition of scalar instructions
  fftwgel_isdefinitions.pl
	definition of SIMD instructions
  fftw_codelet.pl
	a selection of codelets produced by genfft
  fftwgel_auxcode.pl
	some auxiliary code for working with lists
  fftwgel_simdvectorization_isdefinitions.pl
	definition of vectorization-items
  fftwgel_simdvectorization_basics.pl
	basics predicates used in the vectorization
  fftwgel_simdvectorization_core.pl
	the SIMD vectorization engine
  fftwgel_simdvectorization_verification.pl
	some code for refuting a solution of the vectorization process

Example usage:
  $ sicstus -l demo.pl
  SICStus 3.7: Fri Feb 07 12:34:37 CET 2003
  Licensed to complang.tuwien.ac.at
  {...}
  | ?- codeletname_vectorized(fn_8, Vs).

History:
  Feb 21st, 2003: initial release (version 1.0)

Stefan Kral
