The Diderot project is an effort to design and implement a Parallel Domain-specific Language (PDSL) for image analysis and visualization. We are particularly interested in a class of algorithms that are programmed in terms of continuous scalar, vector, and tensor fields that are reconstructed from the image data. Our goals are to provide a high-level mathematical programming model for these algorithms, while also providing high-performance implementations on a variety of parallel hardware platforms.
The following is an overview of our current preliminary design for Diderot. We are building a compiler for this design and expect that the design will evolve as we get experience with the implementation. Also, the design is conservative, in that it does not provide all of the features that we plan to provide (e.g., actor-actor interactions).
The main type of computational value in Diderot is a tensor, which includes reals (0-order tensors), vectors, and matrices. In addition, Diderot provides booleans, integers, and strings. Diderot also has three abstract types:
A Diderot program is organized into three logical sections:
An actor represents a mostly autonomous computation with local state, which includes their position in world space. An actor definition consists of declared state variables and methods. All actors must have an update method and may optionally have a stabilize method.
The Diderot execution model is bulk synchronous. At each iteration, the update methods of all active actors are invoked, resulting in a new configuration.
We have a prototype language design that can handle simple examples, such as volume rendering, and we are working on a baseline compiler for the design. This compiler will generate CUDA or OpenCL code for running on GPUs.