YARDstick - custom processor development toolset

YARDstick (http://www.nkavvadias.com/yardstick ) is a design automation tool for custom processor development flows that focuces on the hard part: generating and evaluating application-specific hardware extensions. YARDstick is a powerful building block for ASIP (Application-Specific Instruction-set Processor) development, since it integrates application analysis, ultra-fast algorithms for custom instruction generation and selection with user-defined compiler intermediate representations. It integrates retargetable compiler features for the targeted IRs/architectures.

1. Features

Important features of YARDstick are as follows:

YARDstick comes along with a cross-platform GUI written in Tcl/Tk 8.5 (http://wiki.tcl.tk).

2. Aim

The ultimate goal of YARDstick is to liberate the designer's development infrastructure from compiler and simulator idiosyncrasies. With YARDstick, the ASIP designer is empowered with the freedom of specifying the target architecture of choice and adding new implementations of analyses and custom instruction generation/selection methods.

Typically, 2x to 15x speedups for benchmark applications (ANSI C optimized source code) can be fully automatically obtained by using YARDstick depending on the target architecture. Speedups are evaluated against a scalar RISC architecture.

3. Detailed look

  1. Analysis engines generating both static and dynamic statistics:
  • Data types
  • Operation-level statistics
  • Basic block statistics (ranking)
  • Performance estimations with/without custom instructions.
  1. Generation of CDFGs (Control-Data Flow Graphs).
  2. Backend engines:
  • ANSI C
  • dot (Graphviz)
  • VCG (GDL, aiSee)
  • XML (GGX for the AGG graph rewriting tool): http://www.user.tu-berlin.de/o.runge/AGG/
  • Retargetable assembly emitter for entire translation units
  • CDFG formats for various RTL synthesis tools
  1. Custom instruction engines:
  • Full-parameterized MIMO custom instruction generation algorithm
  • Fast heuristic
  • Configurable number of inputs
  • Configurable number of outputs
  1. Custom instruction selection:
  • Based on priority metrics
  1. Graph (and graph-subgraph) isomorphism features for eliminating redundant patterns. Multiple algorithms supported.
  2. Visualization of custom instructions, basic blocks, control-flow graphs and control-data flow graphs (basic block nodes expanded to their constituent instructions).
  3. Basic retargetable compiler features:
  • Code selector for MIMO instructions (tested with large cases).
  • Virtual register assignment (allocation for a VM).
  • Hard register allocator in the works.
  1. Miscellaneous features:
  • single constant multiplication optimizer
  • elimination of false data-dependences in assembly-level CDFGs.
  • beautification options for visualization
  • interfacing (co-operation) with external tools such as peephole optimizers, profilers, code generators etc.
  • features related to the custom processor architecture named ByoRISC: (http://arxiv.org/abs/1403.6632 )

4. Benchmarks

Here is a list of application benchmarks that have been tested with YARDstick:

At the YARDstick homepage (http://www.nkavvadias.com/yardstick/ ) you can find some additional materials: