  When designing modern embedded computing systems, most software programmers
choose to use multicore processors, possibly in combination with
general-purpose graphics processing units (GPGPUs) and/or hardware
accelerators. They also often use an embedded Linux O/S and run
multi-application workloads that may even be multi-threaded. Modern FPGAs are
large enough to combine multicore hard/soft processors with multiple hardware
accelerators as custom compute units, enabling entire embedded compute systems
to be implemented on a single FPGA. Furthermore, the large FPGA vendors also
support embedded Linux kernels for both their soft and embedded processors.
When combined with high-level synthesis to generate hardware accelerators using
a C-to-gates flows, the necessary primitives for a framework that can enable
software designers to use FPGAs as their custom compute platform now exist.
However, in order to ensure that computing resources are integrated and shared
effectively, software developers need to be able to monitor and debug the
runtime performance of the applications in their workload. This paper describes
ABACUS, a performance-monitoring framework that can be used to debug the
execution behaviours and interactions of multi-application workloads on
multicore systems. We also discuss how this framework is extensible for use
with hardware accelerators in heterogeneous systems.
