• Български
  • English

Introduction to SolidOpt

The SolidOpt Framework provides tools to facilitate the construction of optimization modules. SolidOpt also provides an environment through which optimization modules could be loaded and used. Different code representations of the target application simplify the implementation of optimization methods. The framework could be used in the development of many analysis and optimization tools such as static code analyzers, code optimizers, compilers and decompilers.


Alongside with the main objective of SolidOpt to development of mechanism, which enables the optimization of arbitrary software applications during their entire lifecycle. Important objectives are provision of:

  • Number of high-level, mid-level and low-level code models;
  • Infrastructure that simplify construction of model transformations (including optimizations);
  • Decompilation toolchain;
  • Compilation toolchain
  • Retargeting toolchain
  • Motivation

    Programming language is a notation used to describe computations to people and machines. All software for every computer is written in some programming language. Consequently, the software can be considered as "prescription", solving a concrete problem from the real world. Every prescription or algorithm, describing part of the real world is a model (or representation). One can conclude that a software program is an execution model for solving a given problem. The sequence of necessary steps for reaching an adequate solution are modeled.

    The programming languages are constantly evolving and target to be closer to the natural language. They implement different semantically-equivalent constructions (sometimes even syntactic sugar), which main goal is providing convenience and simplicity during development. I.e the main goal of these changes is to simplify the software development.

    With time the model of execution (the software program) should become more and more abstract and closer to the natural language, i.e it should be turned into a model clearer to the developer. A gap between the model clear to the developer and the model clear to the machine starts to emerge. That gap has to be filled a software system translating the abstract model into a low-level model, executable by a concrete virtual execution system (VES). This compilation process leads to loss of information about the high-level model and as a consequence to production of suboptimal code. Suboptimal compilation, usually is due to three main reasons:

    • Lack of unwell implemented optimizing modules in the compiler;
    • The capabilities of the VES and not fully used;
    • The knowledge about the domain of the high-level model is not fully used;
    • The thorough information about the high-level model if not fully used.

    As discussed, software applications can be "thought of" as model, producing more optimally-working applications. The source code remains intact and the care of the model optimality is taken by specialized software system (SolidOpt). A huge advantage of the approach is that the approach allows conceptually-different software transformation to be applied, which depend on the pursued goals. Moreover, this would allow the auxiliary optimization parts to be extracted out from the main algorithm. I.e. the high-level model should contain only the solution of the real-world problem, without any extra techniques for its optimization.

    One of SolidOpt's goals is to provide a multimodel architecture (Fig1), generalizing the transformation of the high-level model into a low-level executable model.

    Fig1: Interactions between the models


    • Mi - a level of abstraction of the model where i ∈ [0,n]. M0 is a target model i.e. M0 is the executable program;
    • TMi,T-1Mi - a transformation of the model where i ∈ [0,n]. Keeps the model's level of abstraction;
    • Ti,T-1i - a transformation between the models where i ∈ [0,n-1]. Changes the level of abstraction.

    Optimization transformation method (hereinafter an optimization method or just an optimization) in terms of the framework SolidOpt is a module that converts the software program so that it satisfies some conditions. Most often, these conditions represent a kind of metrics by which to evaluate a quality system. For example, performance metrics, metrics for energy consumption, etc.

    The scheme describes the relationship between models and ways of lowering and raising the level of abstraction. Also shows the mechanism of transformation of the model.

    Using thus determined methodology would facilitate the establishment of optimization methods, operating at different levels. This provides flexibility in the development of sophisticated optimizations such as merging of classes and the pattern removing. To achieve better results, you may need some optimization to work on several levels of abstraction of the model.

    Note that Fig1 doesn't enforce requirements on the models. It needs just a transformation from and to a given model. This allows users to build domain-specific models such as visual models.