How Modeling Works
==================

.. _accelerator-modeling:

Modeling calculates the energy, area, and latency of an architecture running a given
workload. This is done in three steps:

1. **Per-Component Energy, Area, and Leakage**: This step models the area and leakage
   power of each :py:class:`~fastfusion.frontend.arch.Component` in the architecture.
   It then generates *per-action energy*, which is used by later steps in the model to
   find the energy of performing hardware
   :py:class:`~fastfusion.frontend.arch.ComponentAction`\ s.

2. **Mapping the Workload onto the Accelerator**: This step generates mappings
   :py:class:`~fastfusion.frontend.mapping.Mapping`\ s that map the workload onto the
   hardware.

3. **Modeling the Energy, Area, and Latency of the Mapping**: This step looks at the
   full mapping and calculates the number of hardware actions that occur, using it to
   total the energy and area of the accelerator.

In this package, the mapping and modeling steps are connected, letting the mapper
quickly find mappings that minimize the energy and latency of the accelerator.

These steps are detailed in the following sections:

.. toctree::
   :maxdepth: 1

   modeling/component_energy_area
   modeling/accelerator_energy_latency
   modeling/mapping