Computer Laboratory

Computer Architecture Group

Janus - Automatic Binary Parallelisation

Program performance is heavily influenced by the ability to create parallel applications consisting of multiple threads working as independently as possible. However, users of single-threaded applications where the source code is lost, unavailable or cannot easily be recompiled, are at a disadvantage: their programs cannot exploit the full performance potential of the underlying parallel computer architecture.

Within this context, parallelisation of application binaries becomes a seductive proposition. Regardless of the source languages used to create the program, or the availability of the code, an application can be restructured within its binary form to split off tasks into separate threads, and combine their results back together when required. Although almost impossible to perform effectively by hand, automatic tools have the ability to extract parallelism from sequential applications through analysis of the executable to extract multiple threads that can execute concurrently.

Janus is an open source binary modification framework that leverages static analysis and profile information to dynamically parallelise applications, extracting thread-level parallelism from program loops. Janus relies on judicious use of speculation and runtime checks to parallelise even in the presence of unknown data dependences and unknown code (for example, when performing library calls).

Janus is under active development and links to a repository for downloads (and for developers to contribute back) will be placed here upon publication of our paper.

"Janus: Statically-Driven and Profile-Guided Automatic Dynamic Binary Parallelisation". Ruoyu Zhou and Timothy M. Jones. CGO 2019.

The team developing Janus are: