What is VArchC?
VArchC is a framework specially designed to represent computer architectures subjected to Approximate Computing. VArchC works as an extension to the ArchC Architecture Description Language, enabling its tools to automatically generate processor models that implement approximation techniques. Using VArchC, all a designer needs to inject approximations in a target architecture is an ArchC CPU model, specific high-level software models of the desired approximation behaviors, and a high-level configuration file that links them. This configuration file is written using the ADeLe language.
How does it work?
Architecture simulation using VArchC is based on a set of models. These models are pieces of high-level software that define how the architecture behaves when operating, be it in its normal, not approximate state (the CPU model) or a state at which approximations are injected (the approximation models). VArchC then uses a configuration file written in the ADeLe language to join all the pieces together: the original CPU model is augmented to include each approximation behavior, generating one single simulator that implements all the represented approximations.
A VArchC-generated simulator can run binaries compiled to its target architecture, applying the defined behaviors for each instruction. The modeled approximations are seen as states of the architecture, similarly to power states of modern processors. These states are controled using a memory-maped hardware register, so the guest application can define itself under certain approximations by writing and reading from this register. When a simulator is generated, a C library, in form of a header file, is also automatically written. This library defines the communication interface between the guest application and the host simulator. Regardless of the activation of such interface, the simulator is still able to run applications, only not giving them control over the approximate states.
How do I obtain VArchC?
VArchC source code is freely available from our repository.
How do I obtain models?
VArchC uses ArchC CPU models to represent the behavior of target architectures. Some of the models may need some slight modification to run under VArchC, however. In our repository you can find CPU models that were already adapted to work with VArchC. Refer to our documentation on CPU models to know more about what changes are needed to make an ArchC model run under VArchC. Refer to the ArchC documentation to know more about how to build your own CPU models.
VArchC also uses approximation models to dictate the behavior under approximated states. Our documentation shows how these models are written and used, so you can write your own models for a given approximation technique. Moreover, we are working towards releasing pre-tested models of approximation techniques available in the literature. These will be available in our repository.
Who is responsible for VArchC?
VArchC is developed and maintained at the Computer Systems Laboratory, part of the Institute of Computing of the University of Campinas. Both VArchC and the ADeLe language were conceptualized and built as part of the masters thesis of Isaías B. Felzmann, advised by Prof. Dr. Lucas Wanner.
How can I help VArchC?
If you use VArchC in your academic work, please cite us. We are more than happy to reference your work in our website.
If you want to contribute with developing VArchC, we are happy to receive your pull request in our repository.