  Diderot is a parallel domain-specific language for analysis and visualization
of multidimensional scientific images, such as those produced by CT and MRI
scanners. In particular, it supports algorithms where tensor fields (i.e.,
functions from 3D points to tensor values) are used to represent the underlying
physical objects that were scanned by the imaging device. Diderot supports
higher-order programming where tensor fields are first-class values and where
differential operators and lifted linear-algebra operators can be used to
express mathematical reasoning directly in the language. While such lifted
field operations are central to the definition and computation of many
scientific visualization algorithms, to date they have required extensive
manual derivations and laborious implementation.
  The challenge for the Diderot compiler is to effectively translate the
high-level mathematical concepts that are expressible in the surface language
to a low-level and efficient implementation in C. This paper describes our
approach to this challenge, which is based around the careful design of an
intermediate representation (IR), called EIN, and a number of compiler
transformations that lower the program from tensor calculus to C while avoiding
combinatorial explosion in the size of the IR. We describe the challenges in
compiling a language like Diderot, the design of EIN, and the transformation
used by the compiler. We also present an evaluation of EIN with respect to both
compiler efficiency and quality of generated code.
