Otawa  0.10
Data Cache

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...
 

Detailed Description

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:

using namespace otawa;
void process(WorkSpace *ws) {
PropList props;
if(i_want_may_analysis)
if(i_want_persistence_analysis)
}

To use this module, pass it name to the otawa-config utility: otawa-config –libs dcache.

Function Documentation

Identifier<cache::category_t> otawa::dcache::CATEGORY ( "otawa::dcache::category"  ,
cache::INVALID_CATEGORY   
)

Gives the category for a data cache block access.

Hook

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"  ,
 
)

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"  ,
 
)

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),.

  • DFML_OUTER – analysis of outer loop (very few precise)
  • DFML_MULTI – analysis of all loop level (very precise but costly)
  • DFML_NONE – no first miss analysis.
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"  ,
 
)

Configuration property giving the ACS at the startup of the task.

The vector contains one ACS for each cache set.

Identifier<Vector<ACS *>* > otawa::dcache::ENTRY_MUST_ACS ( "otawa::dcache::ENTRY_MUST_ACS"  ,
 
)

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"  ,
 
)

This configuration property allows to provide an non-empty ACS for the persistence analysis.

Feature

Identifier<acs_stack_table_t *> otawa::dcache::LEVEL_PERS_ACS ( "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.

Each stack item in the stack represent the persistent analysis ACS of the loops embedding the basic block this property is hooked to.

Identifier<Vector<ACS *> *> otawa::dcache::MAY_ACS ( "otawa::dcache::MAY_ACS"  ,
 
)

Provide the ACS for the MAY analysis.

The vector contains one line for each cache set.

Hook

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"  ,
 
)

This property gives the variable counting the number of misses of a BlockAccess.

Hook

Identifier<genstruct::Vector<ACS *>* > otawa::dcache::MUST_ACS ( "otawa::dcache::MUST_ACS"  ,
 
)

Provide for each basic block the ACS (Abstract Cache State) of the data cache for each set of the cache.

Hooks

Feature

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.

Usually, the ACS are used to derivate the categories of each data cache access.

Default Processor

Properties

Configuration

Identifier<genstruct::Vector<ACS *> *> otawa::dcache::PERS_ACS ( "otawa::dcache::PERS_ACS"  ,
 
)

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).

Feature

Hooks

p::feature otawa::dcache::PERS_ACS_FEATURE ( "otawa::dcache::PERS_ACS_FEATURE"  ,
new Maker< ACSBuilder >  () 
)

Feature ensuring that the persistence analysis has been performed.

Configuration

Properties

Variable Documentation

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

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))
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),.

  • DFML_OUTER – analysis of outer loop (very few precise)
  • DFML_MULTI – analysis of all loop level (very precise but costly)
  • DFML_NONE – no first miss analysis.

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.

Feature

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.

Hook
Feature

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

Feature

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 >())

This feature ensures that the ACS (Abstract Cache State) for the MUST data cache analysis has been built.

Usually, the ACS are used to derivate the categories of each data cache access.

Default Processor

Properties

Configuration

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).

Feature

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 >())

Feature ensuring that the persistence analysis has been performed.

Configuration

Properties