Otawa
0.10
|
This module is dedicated to the categorisation of data cache accesses. More...
Classes | |
class | otawa::dcache::MUSTProblem |
The MUST problem provides the abstract interpretation of L1 data cache for the MUST case. More... | |
class | otawa::dcache::ACSBuilder |
This builder performs analysis of the L1 data cache and produces ACS for MUST and, according to the configuration proerties, persistence. More... | |
class | otawa::dcache::ACS |
Representation of an Abstract Cache State where each data cache block is represented by its age. More... | |
class | otawa::dcache::PERSProblem |
Problem for computing the PERS ACS of L-blocks. More... | |
class | otawa::dcache::ACSMayBuilder |
This processor computes the ACS for the MAY cache analysis. More... | |
class | otawa::dcache::BlockBuilder |
Build the list of blocks used for L1 data cache analysis and decorate each basic block with the list of performed accesses. More... | |
class | otawa::dcache::Block |
Represents a single block used by the data cache. More... | |
class | otawa::dcache::BlockCollection |
A block collections stores the list of data blocks used in a task for a specific line. More... | |
class | otawa::dcache::BlockAccess |
A block access represents a data memory access of an instruction. More... | |
class | otawa::dcache::CATBuilder |
Processor to get the categories for each block access of a data cache. More... | |
class | otawa::dcache::CatConstraintBuilder |
This processor allocates the variable to count misses of a data cache and makes the constraints for these variables. More... | |
class | otawa::dcache::CLPBlockBuilder |
Build the list of blocks used for L1 data cache analysis and decorate each basic block with the list of performed accesses, based on a CLP analysis. More... | |
Functions | |
p::feature | otawa::dcache::MUST_ACS_FEATURE ("otawa::dcache::MUST_ACS_FEATURE", new Maker< ACSBuilder >()) |
This feature ensures that the ACS (Abstract Cache State) for the MUST data cache analysis has been built. More... | |
Identifier< genstruct::Vector < ACS * > * > | otawa::dcache::MUST_ACS ("otawa::dcache::MUST_ACS", 0) |
Provide for each basic block the ACS (Abstract Cache State) of the data cache for each set of the cache. More... | |
Identifier< Vector< ACS * > * > | otawa::dcache::ENTRY_MUST_ACS ("otawa::dcache::ENTRY_MUST_ACS", 0) |
This configuration property is shared by all processor implementing the MUST_ACS_FEATURE. More... | |
Identifier< bool > | otawa::dcache::DATA_PSEUDO_UNROLLING ("otawa::dcache::PSEUDO_UNROLLING", false) |
This configuration property activates, if set to true (default), the pseudo-unrolling for the cache analysis of ACSBuilder. More... | |
Identifier< data_fmlevel_t > | otawa::dcache::DATA_FIRSTMISS_LEVEL ("otawa::dcache::FIRSTMISS_LEVEL", DFML_MULTI) |
According to its value, select the way the first-miss analysis is performed: – analysis of inner loop (average precision but costly in time),. More... | |
p::feature | otawa::dcache::PERS_ACS_FEATURE ("otawa::dcache::PERS_ACS_FEATURE", new Maker< ACSBuilder >()) |
Feature ensuring that the persistence analysis has been performed. More... | |
Identifier< genstruct::Vector < ACS * > * > | otawa::dcache::PERS_ACS ("otawa::dcache::PERS_ACS", 0) |
This identifier gives an array of ACS for the persistence analysis. More... | |
Identifier< genstruct::Vector < ACS * > * > | otawa::dcache::ENTRY_PERS_ACS ("otawa::dcache::ENTRY_PERS_ACS", 0) |
This configuration property allows to provide an non-empty ACS for the persistence analysis. More... | |
Identifier< acs_stack_table_t * > | otawa::dcache::LEVEL_PERS_ACS ("otawa::dcache::LEVEL_PERS_ACS", 0) |
This identifier allows to get an array on a stack of ACS, one entry for each set of the analyzed cache. More... | |
p::feature | otawa::dcache::MAY_ACS_FEATURE ("otawa::dcache::MAY_ACS_FEATURE", new Maker< ACSMayBuilder >()) |
This feature that the MAY analysis has been performed for the L1 data cache and that the ACS are provided at the entry of each basic block. More... | |
Identifier< Vector< ACS * > * > | otawa::dcache::MAY_ACS ("otawa::dcache::MAY_ACS", 0) |
Provide the ACS for the MAY analysis. More... | |
Identifier< Vector< ACS * > * > | otawa::dcache::ENTRY_MAY_ACS ("otawa::dcache::ENTRY_MAY_ACS", 0) |
Configuration property giving the ACS at the startup of the task. More... | |
p::feature | otawa::dcache::DATA_BLOCK_FEATURE ("otawa::dcache::DATA_BLOCK_FEATURE", new Maker< BlockBuilder >()) |
This feature ensures that information about the data cache accesses has been provided on each basic block. More... | |
Identifier< const BlockCollection * > | otawa::dcache::DATA_BLOCK_COLLECTION ("otawa::dcache::DATA_BLOCK_COLLECTION", 0) |
Gives the list of used blocks in the data cache. More... | |
Identifier< Pair< int, BlockAccess * > > | otawa::dcache::DATA_BLOCKS ("otawa::dcache::DATA_BLOCKS", pair(0,(BlockAccess *) 0)) |
Give the list of accesses to the data cache. More... | |
p::feature | otawa::dcache::CATEGORY_FEATURE ("otawa::dcache::CATEGORY_FEATURE", new Maker< CATBuilder >()) |
This features ensures that a category each data block access have received a category describing its hit/miss behavior. More... | |
Identifier< BasicBlock * > | otawa::dcache::CATEGORY_HEADER ("otawa::dcache::CATEGORY_HEADER", 0) |
When a cache access has a category of cache::FIRST_MISS, the "first" part is relative to a particular loop whose header is given by this property. More... | |
Identifier< cache::category_t > | otawa::dcache::CATEGORY ("otawa::dcache::category", cache::INVALID_CATEGORY) |
Gives the category for a data cache block access. More... | |
p::feature | otawa::dcache::CONSTRAINTS_FEATURE ("otawa::dcache::CONSTRAINTS_FEATURE", new Maker< CatConstraintBuilder >()) |
This feature ensures that the constraints associated with each data cache block categories has been translated to ILP constraints and that miss count variables are declared. More... | |
Identifier< ilp::Var * > | otawa::dcache::MISS_VAR ("otawa::dcache::MISS_VAR", 0) |
This property gives the variable counting the number of misses of a BlockAccess. More... | |
Variables | |
p::feature | otawa::dcache::MUST_ACS_FEATURE |
This feature ensures that the ACS (Abstract Cache State) for the MUST data cache analysis has been built. More... | |
Identifier< acs_table_t * > | otawa::dcache::MUST_ACS |
Provide for each basic block the ACS (Abstract Cache State) of the data cache for each set of the cache. More... | |
Identifier< acs_table_t * > | otawa::dcache::ENTRY_MUST_ACS |
This configuration property is shared by all processor implementing the MUST_ACS_FEATURE. More... | |
Identifier< bool > | otawa::dcache::DATA_PSEUDO_UNROLLING |
This configuration property activates, if set to true (default), the pseudo-unrolling for the cache analysis of ACSBuilder. More... | |
Identifier< data_fmlevel_t > | otawa::dcache::DATA_FIRSTMISS_LEVEL |
According to its value, select the way the first-miss analysis is performed: – analysis of inner loop (average precision but costly in time),. More... | |
p::feature | otawa::dcache::PERS_ACS_FEATURE |
Feature ensuring that the persistence analysis has been performed. More... | |
Identifier< acs_table_t * > | otawa::dcache::PERS_ACS |
This identifier gives an array of ACS for the persistence analysis. More... | |
Identifier< acs_table_t * > | otawa::dcache::ENTRY_PERS_ACS |
This configuration property allows to provide an non-empty ACS for the persistence analysis. More... | |
Identifier< acs_stack_table_t * > | otawa::dcache::LEVEL_PERS_ACS |
This identifier allows to get an array on a stack of ACS, one entry for each set of the analyzed cache. More... | |
p::feature | otawa::dcache::MAY_ACS_FEATURE |
This feature that the MAY analysis has been performed for the L1 data cache and that the ACS are provided at the entry of each basic block. More... | |
Identifier< Vector< ACS * > * > | otawa::dcache::MAY_ACS |
Provide the ACS for the MAY analysis. More... | |
Identifier< Vector< ACS * > * > | otawa::dcache::ENTRY_MAY_ACS |
Configuration property giving the ACS at the startup of the task. More... | |
p::feature | otawa::dcache::DATA_BLOCK_FEATURE |
This feature ensures that information about the data cache accesses has been provided on each basic block. More... | |
Identifier< const BlockCollection * > | otawa::dcache::DATA_BLOCK_COLLECTION |
Gives the list of used blocks in the data cache. More... | |
Identifier< Pair< int, BlockAccess * > > | otawa::dcache::DATA_BLOCKS |
Give the list of accesses to the data cache. More... | |
p::feature | otawa::dcache::CATEGORY_FEATURE |
This features ensures that a category each data block access have received a category describing its hit/miss behavior. More... | |
Identifier< BasicBlock * > | otawa::dcache::CATEGORY_HEADER |
When a cache access has a category of cache::FIRST_MISS, the "first" part is relative to a particular loop whose header is given by this property. More... | |
Identifier< cache::category_t > | otawa::dcache::CATEGORY |
Gives the category for a data cache block access. More... | |
p::feature | otawa::dcache::CONSTRAINTS_FEATURE |
This feature ensures that the constraints associated with each data cache block categories has been translated to ILP constraints and that miss count variables are declared. More... | |
Identifier< ilp::Var * > | otawa::dcache::MISS_VAR |
This property gives the variable counting the number of misses of a BlockAccess. More... | |
This module is dedicated to the categorisation of data cache accesses.
As for the instruction cache, four categories are handled:
The data cache description is obtained from the otawa::hard::CACHE_CONFIGURATION_FEATURE feature and the cache references are obtained from otawa::ADDRESS_ANALYSIS_FEATURE. For the time being, this feature is loosely implemented by otawa::StackAnalysis. As this module may accepts several different address provider, this processor must be runned by hand before the invocation of the processors of this module.
Basically, the following phases are performed:
Notice that the MAY is only optional and must be called by hand. In the same way, there is no persistence analysis unless the persistence level is passed at configuration.
A category computation for data cache may look like:
To use this module, pass it name to the otawa-config
utility: otawa-config –libs dcache.
Identifier<cache::category_t> otawa::dcache::CATEGORY | ( | "otawa::dcache::category" | , |
cache::INVALID_CATEGORY | |||
) |
p::feature otawa::dcache::CATEGORY_FEATURE | ( | "otawa::dcache::CATEGORY_FEATURE" | , |
new Maker< CATBuilder > | () | ||
) |
This features ensures that a category each data block access have received a category describing its hit/miss behavior.
Default
processor
Properties
Identifier<BasicBlock*> otawa::dcache::CATEGORY_HEADER | ( | "otawa::dcache::CATEGORY_HEADER" | , |
0 | |||
) |
When a cache access has a category of cache::FIRST_MISS, the "first" part is relative to a particular loop whose header is given by this property.
Hook
p::feature otawa::dcache::CONSTRAINTS_FEATURE | ( | "otawa::dcache::CONSTRAINTS_FEATURE" | , |
new Maker< CatConstraintBuilder > | () | ||
) |
This feature ensures that the constraints associated with each data cache block categories has been translated to ILP constraints and that miss count variables are declared.
Default
processor
Properties
Identifier<const BlockCollection *> otawa::dcache::DATA_BLOCK_COLLECTION | ( | "otawa::dcache::DATA_BLOCK_COLLECTION" | , |
0 | |||
) |
Gives the list of used blocks in the data cache.
Its argument is an array of block collections, one for each cache set. Therefore, the array size is equal to the number of cache sets.
Hooks
p::feature otawa::dcache::DATA_BLOCK_FEATURE | ( | "otawa::dcache::DATA_BLOCK_FEATURE" | , |
new Maker< BlockBuilder > | () | ||
) |
This feature ensures that information about the data cache accesses has been provided on each basic block.
Default
processor
Properties
Identifier<Pair<int, BlockAccess *> > otawa::dcache::DATA_BLOCKS | ( | "otawa::dcache::DATA_BLOCKS" | , |
pair(0,(BlockAccess *) 0) | |||
) |
Give the list of accesses to the data cache.
The first member of the pair represents the number of block accesses in the array whose pointer is in the second member.
Hooks
Identifier<data_fmlevel_t> otawa::dcache::DATA_FIRSTMISS_LEVEL | ( | "otawa::dcache::FIRSTMISS_LEVEL" | , |
DFML_MULTI | |||
) |
According to its value, select the way the first-miss analysis is performed: – analysis of inner loop (average precision but costly in time),.
Identifier<bool> otawa::dcache::DATA_PSEUDO_UNROLLING | ( | "otawa::dcache::PSEUDO_UNROLLING" | , |
false | |||
) |
This configuration property activates, if set to true (default), the pseudo-unrolling for the cache analysis of ACSBuilder.
This option allows to get more precise results but induces more computation time.
Identifier<Vector<ACS *> *> otawa::dcache::ENTRY_MAY_ACS | ( | "otawa::dcache::ENTRY_MAY_ACS" | , |
0 | |||
) |
Identifier<Vector<ACS *>* > otawa::dcache::ENTRY_MUST_ACS | ( | "otawa::dcache::ENTRY_MUST_ACS" | , |
0 | |||
) |
This configuration property is shared by all processor implementing the MUST_ACS_FEATURE.
It allows to provide an initial ACS value at the entry of the task. If not defined, the T (top) value is assumed.
Identifier<genstruct::Vector<ACS *> *> otawa::dcache::ENTRY_PERS_ACS | ( | "otawa::dcache::ENTRY_PERS_ACS" | , |
0 | |||
) |
This configuration property allows to provide an non-empty ACS for the persistence analysis.
Identifier<acs_stack_table_t *> otawa::dcache::LEVEL_PERS_ACS | ( | "otawa::dcache::LEVEL_PERS_ACS" | , |
0 | |||
) |
Identifier<Vector<ACS *> *> otawa::dcache::MAY_ACS | ( | "otawa::dcache::MAY_ACS" | , |
0 | |||
) |
p::feature otawa::dcache::MAY_ACS_FEATURE | ( | "otawa::dcache::MAY_ACS_FEATURE" | , |
new Maker< ACSMayBuilder > | () | ||
) |
This feature that the MAY analysis has been performed for the L1 data cache and that the ACS are provided at the entry of each basic block.
Default
processor
Properties
Configuration
Identifier<ilp::Var *> otawa::dcache::MISS_VAR | ( | "otawa::dcache::MISS_VAR" | , |
0 | |||
) |
Identifier<genstruct::Vector<ACS *>* > otawa::dcache::MUST_ACS | ( | "otawa::dcache::MUST_ACS" | , |
0 | |||
) |
Provide for each basic block the ACS (Abstract Cache State) of the data cache for each set of the cache.
Hooks
p::feature otawa::dcache::MUST_ACS_FEATURE | ( | "otawa::dcache::MUST_ACS_FEATURE" | , |
new Maker< ACSBuilder > | () | ||
) |
Identifier<genstruct::Vector<ACS *> *> otawa::dcache::PERS_ACS | ( | "otawa::dcache::PERS_ACS" | , |
0 | |||
) |
p::feature otawa::dcache::PERS_ACS_FEATURE | ( | "otawa::dcache::PERS_ACS_FEATURE" | , |
new Maker< ACSBuilder > | () | ||
) |
Identifier<cache::category_t> otawa::dcache::CATEGORY("otawa::dcache::category", cache::INVALID_CATEGORY) |
Gives the category for a data cache block access.
Hook
Referenced by otawa::dcache::CATBuilder::cleanup(), otawa::dcache::CATBuilder::processLBlockSet(), and otawa::dcache::CatConstraintBuilder::processWorkSpace().
p::feature otawa::dcache::CATEGORY_FEATURE("otawa::dcache::CATEGORY_FEATURE", new Maker< CATBuilder >()) |
This features ensures that a category each data block access have received a category describing its hit/miss behavior.
Default
processor
Properties
Identifier<BasicBlock*> otawa::dcache::CATEGORY_HEADER("otawa::dcache::CATEGORY_HEADER", 0) |
When a cache access has a category of cache::FIRST_MISS, the "first" part is relative to a particular loop whose header is given by this property.
Hook
Referenced by otawa::dcache::CATBuilder::processLBlockSet(), and otawa::dcache::CatConstraintBuilder::processWorkSpace().
p::feature otawa::dcache::CONSTRAINTS_FEATURE("otawa::dcache::CONSTRAINTS_FEATURE", new Maker< CatConstraintBuilder >()) |
This feature ensures that the constraints associated with each data cache block categories has been translated to ILP constraints and that miss count variables are declared.
Default
processor
Properties
Referenced by otawa::dcache::CatConstraintBuilder::collectStats(), and otawa::etime::StandardEventBuilder::setup().
Identifier<const BlockCollection *> otawa::dcache::DATA_BLOCK_COLLECTION("otawa::dcache::DATA_BLOCK_COLLECTION", 0) |
Gives the list of used blocks in the data cache.
Its argument is an array of block collections, one for each cache set. Therefore, the array size is equal to the number of cache sets.
Hooks
Referenced by otawa::dcache::CATBuilder::processWorkSpace(), otawa::dcache::ACSMayBuilder::processWorkSpace(), otawa::dcache::ACSBuilder::processWorkSpace(), otawa::dcache::CLPBlockBuilder::setup(), and otawa::dcache::BlockBuilder::setup().
p::feature otawa::dcache::DATA_BLOCK_FEATURE("otawa::dcache::DATA_BLOCK_FEATURE", new Maker< BlockBuilder >()) |
This feature ensures that information about the data cache accesses has been provided on each basic block.
Default
processor
Properties
Identifier<Pair<int, BlockAccess *> > otawa::dcache::DATA_BLOCKS("otawa::dcache::DATA_BLOCKS", pair(0,(BlockAccess *) 0)) |
Give the list of accesses to the data cache.
The first member of the pair represents the number of block accesses in the array whose pointer is in the second member.
Hooks
Referenced by otawa::dcache::CATBuilder::cleanup(), otawa::dcache::WCETFunctionBuilder::processBB(), otawa::dcache::CLPBlockBuilder::processBB(), otawa::etime::StandardEventBuilder::processBB(), otawa::dcache::BlockBuilder::processBB(), otawa::dcache::CATBuilder::processLBlockSet(), otawa::dcache::CatConstraintBuilder::processWorkSpace(), otawa::dcache::MUSTPERS::update(), otawa::dcache::MUSTProblem::update(), and otawa::dcache::MAYProblem::update().
Identifier<data_fmlevel_t> otawa::dcache::DATA_FIRSTMISS_LEVEL("otawa::dcache::FIRSTMISS_LEVEL", DFML_MULTI) |
According to its value, select the way the first-miss analysis is performed: – analysis of inner loop (average precision but costly in time),.
Referenced by otawa::dcache::CATBuilder::configure(), otawa::dcache::ACSBuilder::configure(), and otawa::dcache::ACSBuilder::processWorkSpace().
Identifier<bool> otawa::dcache::DATA_PSEUDO_UNROLLING("otawa::dcache::PSEUDO_UNROLLING", false) |
This configuration property activates, if set to true (default), the pseudo-unrolling for the cache analysis of ACSBuilder.
This option allows to get more precise results but induces more computation time.
Referenced by otawa::dcache::ACSMayBuilder::configure(), and otawa::dcache::ACSBuilder::configure().
Identifier<Vector<ACS *> *> otawa::dcache::ENTRY_MAY_ACS("otawa::dcache::ENTRY_MAY_ACS", 0) |
Configuration property giving the ACS at the startup of the task.
The vector contains one ACS for each cache set.
Referenced by otawa::dcache::ACSMayBuilder::configure().
Identifier<Vector<ACS *>* > otawa::dcache::ENTRY_MUST_ACS("otawa::dcache::ENTRY_MUST_ACS", 0) |
This configuration property is shared by all processor implementing the MUST_ACS_FEATURE.
It allows to provide an initial ACS value at the entry of the task. If not defined, the T (top) value is assumed.
Referenced by otawa::dcache::ACSBuilder::configure().
Identifier<genstruct::Vector<ACS *> *> otawa::dcache::ENTRY_PERS_ACS("otawa::dcache::ENTRY_PERS_ACS", 0) |
This configuration property allows to provide an non-empty ACS for the persistence analysis.
Identifier<acs_stack_table_t *> otawa::dcache::LEVEL_PERS_ACS("otawa::dcache::LEVEL_PERS_ACS", 0) |
This identifier allows to get an array on a stack of ACS, one entry for each set of the analyzed cache.
Each stack item in the stack represent the persistent analysis ACS of the loops embedding the basic block this property is hooked to.
Referenced by otawa::dcache::CATBuilder::processLBlockSet(), otawa::dcache::ACSBuilder::processLBlockSet(), and otawa::dcache::ACSBuilder::processWorkSpace().
Identifier<Vector<ACS *> *> otawa::dcache::MAY_ACS("otawa::dcache::MAY_ACS", 0) |
Provide the ACS for the MAY analysis.
The vector contains one line for each cache set.
Hook
Referenced by otawa::dcache::CATBuilder::processLBlockSet(), otawa::dcache::ACSMayBuilder::processLBlockSet(), and otawa::dcache::ACSMayBuilder::processWorkSpace().
p::feature otawa::dcache::MAY_ACS_FEATURE("otawa::dcache::MAY_ACS_FEATURE", new Maker< ACSMayBuilder >()) |
This feature that the MAY analysis has been performed for the L1 data cache and that the ACS are provided at the entry of each basic block.
Default
processor
Properties
Configuration
Identifier<ilp::Var *> otawa::dcache::MISS_VAR("otawa::dcache::MISS_VAR", 0) |
This property gives the variable counting the number of misses of a BlockAccess.
Hook
This property gives the variable counting the number of misses of a BlockAccess.
Gives the variable counting the number of misses.
Referenced by otawa::dcache::WCETFunctionBuilder::processBB(), otawa::cat::CATConstraintBuilder::processLBlockSet(), and otawa::dcache::CatConstraintBuilder::processWorkSpace().
Identifier<genstruct::Vector<ACS *>* > otawa::dcache::MUST_ACS("otawa::dcache::MUST_ACS", 0) |
Provide for each basic block the ACS (Abstract Cache State) of the data cache for each set of the cache.
Hooks
Referenced by otawa::dcache::CATBuilder::processLBlockSet(), otawa::dcache::ACSBuilder::processLBlockSet(), and otawa::dcache::ACSBuilder::processWorkSpace().
p::feature otawa::dcache::MUST_ACS_FEATURE("otawa::dcache::MUST_ACS_FEATURE", new Maker< ACSBuilder >()) |
Identifier<genstruct::Vector<ACS *> *> otawa::dcache::PERS_ACS("otawa::dcache::PERS_ACS", 0) |
This identifier gives an array of ACS for the persistence analysis.
The array contains as many ACS as set in the analyzed cache, one for each set. The blocks in the ACS have an age between -1 (not loaded in the cache) and the associativity of the cache (loaded but also wiped out).
Hooks
Referenced by otawa::dcache::CATBuilder::processLBlockSet(), otawa::dcache::ACSBuilder::processLBlockSet(), and otawa::dcache::ACSBuilder::processWorkSpace().
p::feature otawa::dcache::PERS_ACS_FEATURE("otawa::dcache::PERS_ACS_FEATURE", new Maker< ACSBuilder >()) |