The University of Adelaide Australia

Honours/Masters Projects

Evolving functions in Point-Free form using Grammatical Evolution

Problem Domain

Grammatical Evolution (GE) is a technique for evolving programs to fit a given application. Unlike traditional Genetic Programming (GP) GE is guaranteed to produce syntactically correct candidate programs. One challenging problem in GP is the evolution of programs that contain function definitions that can be called in multiple parts of the program. Some very recent research has achieved promising results by using GE to evolve functions into the grammar of the programming language along with each candidate program.

Project Description

This project aims to build on existing work by using GE to evolve functions into point-free programs. Point-free programs do not have named variables but instead, use functions to transmit data between functions that produce data and functions that consume data. In point-free programs, there are natural mechanisms for calling a function with multiple sets of data. However, the number of other choices available in the point-free grammar makes the selection of such mechanisms unlikely during a simple GE process. This project aims to tackle this problem by evolving the weights of grammar selection along with individuals to increase the likelihood of of the evolution of functions with multiple use.

Plan

This project will extend on existing work which has produced promising results for one stage of the optimiser so far. The language expressing the the optimiser is Stratego XT a rewriting language where rewrite rules are kept separate from strategies for applying them. The platform currently used for GE is GE Lib. This project will first aim to establish the minimum sized building blocks from which it is feasible to evolve the an optimiser. It also aims to extend the optimiser to tasks such as commmon sub-expression elimination. The performance of the optimiser will be benchmarked against the performance of existing hand-written optimiser code.

Meta-Analysis for Compiler Instrumentation

Problem Domain

Most compilers are quite opaque - that is - it is difficult to look inside them as they are working to see what they are doing. This lack of transparency is a disadvantage in terms of debugging for correctness and performance. This problem can be overcome if the compiler is written in terms of sequences of simple transformations. Compilers written this way can be traced through the whole sequence of transformations, making it easier to track down where improvements are needed. Unfortunately such tracing, currently, requires the addition of trace statements throughout the compiler definition which lengthens the code, making it harder to maintain and understand.

Project Description

This project is to take an existing small compiler, written in Stratego XT, and write another Stratego application to transform it so that it produces a trace. This application of meta-analysis to transform the compiler code will allow the tracing version of the compiler to keep pace easily with the development of the standard version and substantially reduce the cost of creating a tracing compiler.

Plan

The initial part of this project will work on a small version of the compiler to establish what is required of the compiler to make the addition of tracing statements easy whilst still keeping the design of the compiler elegant. The second stage of the project will apply the meta-analysis to progressively larger versions of the compiler, fine-tuning the process as the project progresses.

Honours projects

Evolving an Optimiser via Grammatical Evolution

Problem Domain

Program optimisers are difficult to build and difficult to get correct. To compound this problem, increasingly complex machines and runtime environments are making it difficult for the author of optimisers to guess the best settings for optimisation. To tackle this problem, researchers have used techniques such as iterative compilation to evolve good settings for simple, quantifiable, optimisations such as loop unrolling and loop tiling. However, because of the overriding need for correctness, there have been few attempts to evolve the actual code of an optimiser.

Project Description

This project aims to extend current experiments to evolve an optimiser for a simple language using Grammatical Evolution (GE). GE is a Genetic Programming (GP) technique where a population of candidate programs is evolved with the help of a fitness function to determine the goodness of a program. GE helps this process by ensuring that each candidate program is at least syntactically correct. In this project, the soundness of the candidate optimisers is ensured by building each optimiser out of a set of existing simple, correctness-preserving, modules and strategies for combining them.

Plan

This project will extend on existing work which has produced promising results for one stage of the optimiser so far. The language expressing the the optimiser is Stratego XT a rewriting language where rewrite rules are kept separate from strategies for applying these rules. The platform currently used for GE is GELib. This project will first aim to establish the minimum sized building blocks from which it is feasible to evolve the an optimiser. It also aims to extend the optimiser to tasks such as commmon sub-expression elimination. The performance of the optimiser will be benchmarked against the performance of existing hand-written optimiser code.

Parallelizing Point-Free Form

Problem Domain

Various design optimisations traditionally used to make sequential processors faster are starting to run into hard limits. As a result, manufacturers are now producing machines with multiple cores on each chip. For single applications, such machines can only be properly exploited by parallel code. Unfortunately, traditional languages and compilers are not particularly good at producing highly parallel code from ordinary programs. There is a need for languages and compilers that make it easy for the programmer to express parallel algorithms while handling the details of mapping the algorithm to the parallel machine.

Project Description

This project is to build part of a compiler that maps a relatively simple source language into an intermediate representation, called point-free form and, thence, on to a parallel machine. Point-free form is a programming language where the role of variables is replaced with functions for transporting data between functions that produce and consume data. Currently, a translator from the source language to point-free form and an optimiser for point-free form have been built. The task for this project is to take this optimised point-free form and map it to a highly parallel machine.

Plan

The plan for this project is to encode and extend an existing set of parallelisation rules to map sequential point-free form into parallel point-free form. After this, the second stage is to map the parallel point-free code into parallel code expressed in C and MPI. This code will then be run and benchmarked on a very fast cluster of chip multi-processors. The work will be carried out longitudinally, with a small part of the language parallelised and mapped to C-MPI at each stage. In this way, performance results can be quickly measured and the approach refined.

Mapping Point-Free Programs to Parallel Hardware

Project Description

Point-Free programs, programs consisting entirely of functions, directly link operations that produce and consume data. Very often, point-free programs are implicitly parallel. This mixture of explicit communication and parallelism makes point-free programs good potential candidates for mapping to custom parallel hardware. This project is an initial exploration of the process of mapping simple point free code into custom parallel hardware on an FPGA. Plan The initial aim of this project is to create a small range of applications on an FPGA and measure their performance. The next stage is to manually define and test hardware descriptions corresponding to the basic constructs in point-free form. The remainder of the project will be devoted progressively defining and testing automatic translations of each point-free construct to a hardware description. Since this project is new and exploratory the emphasis will be on dividing the work to generate short test cycles and evolve the research goals according to the results obtained.

Brad Alexander Jan 2008