Under advisor Scott Baden.
The Saaz library, like many array libraries, suffers from the problem of supporting abstractions in tight loop nests. These abstractions can introduce small amounts of overhead. Taken as a whole, however, in loops which execute thousands or millions of times, even function calls can be expensive. Tettnanger is a compiler which utilizes domain-specific knowledge of the semantics of the Saaz library to optimize its operations. The most rewarding optimizations are those which inline through function pointers. More minor optimizations primarily focus on eliminating other library overheads such as caching variables on the stack, and inlining function calls.
The latest results regarding an automatic translator (compiler) have been submitted to PLDI 2012.
The Saaz project aims to create a database for scientists. The past few decades have seen lots of growth in relational databases, but this has had little impact on the scientific community. We went to bring the benefits of databases to scientific researchers whose simulations and datasets do not fit will into the relational model.
We are designing Saaz as a computational database to combine spacial data retrieval with powerful computational facilities tailored to dynamic representations of irregular time-dependent structures. The Saaz database moves computation-intensive workloads to a higher level, while still preserving flexibility. To efficiently facilitate these numerical algorithms within the database, we move away from the relational model to support an imperative style of query that conserves spacial locality. This allows scientists to focus not on their data structures, organization, or persistence, but instead on their models and computations.
The scope of Saaz was originally the entire database, but the name now applies specifically to the query engine. Tettnanger plays the roll of the query optimizer.
One of the nice features of Saaz is the ability to predicate execution of a query. This helps scientists isolate the effects of certain regions of interest.
Saaz has support for both dynamic (online) evaluation, and offline evaluation. While Saaz does not support MPI internally, it can be used easily within an MPI process. Saaz can be linked in to an existing simulator, or started as an external process which then gets attached to a running simulator. Threading for on-node parllelism is supported via pthreads, although Tettnanger uses OpenMP as well.
Saaz is a C++ class library with three primary objects:
These projects are executed as a member of the Computational Fluid Dynamics group here at UCSD.