OpenASIP 2.2
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | Private Types | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
ExecutionPipelineResourceTable Class Reference

#include <ExecutionPipelineResourceTable.hh>

Collaboration diagram for ExecutionPipelineResourceTable:
Collaboration graph

Public Member Functions

unsigned int numberOfResources () const
 
unsigned int pipelineSize () const
 
unsigned int maximalLatency () const
 
bool operationPipeline (int op, int cycle, int res) const
 
int operationIndex (const std::string &opName) const
 
bool hasOperation (const std::string &opName) const
 
const std::map< int, int > & operationLatency (unsigned int operationIndex) const
 
const std::string & name () const
 

Static Public Member Functions

static const ExecutionPipelineResourceTableresourceTable (const TTAMachine::FunctionUnit &fu)
 
static void finalize ()
 

Private Types

typedef std::vector< bool > ResourceVector
 Type for resource vector, represents one cycle of use.
 
typedef std::vector< ResourceVectorResourceTable
 Type for resource reservation table, resource vector x latency.
 
typedef std::map< const TTAMachine::FunctionUnit *, ExecutionPipelineResourceTable * > ResourceTableMap
 

Private Member Functions

 ExecutionPipelineResourceTable (const TTAMachine::FunctionUnit &fu)
 
void setLatency (const std::string &opName, const int output, const int latency)
 
void setResourceUse (const std::string &opName, const int cycle, const int resIndex)
 

Private Attributes

std::string name_
 
int numberOfResources_
 Resource and ports vector width, depends on particular FU.
 
unsigned int maximalLatency_
 Maximal latency of operation in FU.
 
std::map< std::string, int > operationSupported_
 Operations supported, name - index to operation pipeline vector.
 
std::vector< std::map< int, int > > operationLatencies_
 
std::vector< ResourceTableoperationPipelines_
 Pipelines for operations.
 

Static Private Attributes

static ResourceTableMap allResourceTables_
 Contains these tables for all FU's.
 

Detailed Description

Definition at line 44 of file ExecutionPipelineResourceTable.hh.

Member Typedef Documentation

◆ ResourceTable

Type for resource reservation table, resource vector x latency.

Definition at line 83 of file ExecutionPipelineResourceTable.hh.

◆ ResourceTableMap

Definition at line 86 of file ExecutionPipelineResourceTable.hh.

◆ ResourceVector

typedef std::vector<bool> ExecutionPipelineResourceTable::ResourceVector
private

Type for resource vector, represents one cycle of use.

Definition at line 80 of file ExecutionPipelineResourceTable.hh.

Constructor & Destructor Documentation

◆ ExecutionPipelineResourceTable()

ExecutionPipelineResourceTable::ExecutionPipelineResourceTable ( const TTAMachine::FunctionUnit fu)
private

Definition at line 50 of file ExecutionPipelineResourceTable.cc.

51 :
52 name_(fu.name()),
55
56 for (int j = 0; j < fu.operationCount(); j++) {
57 HWOperation& hwop = *fu.operation(j);
58 ExecutionPipeline* ep = hwop.pipeline();
59 std::string opName = StringTools::stringToUpper(
60 fu.operation(j)->name());
61
62 for (int l = 0; l < ep->latency(); l++ ) {
63 for (int k = 0; k < fu.pipelineElementCount(); k++) {
65 if (ep->isResourceUsed(pe->name(),l)){
66 setResourceUse(opName, l, k);
67 }
68 }
69 for (int k = 0; k < fu.operationPortCount(); k++) {
70 TTAMachine::FUPort* fuPort = fu.operationPort(k);
71 if (ep->isPortWritten(*fuPort,l)) {
73 opName, l,fu.pipelineElementCount()+k);
74 }
75 if (ep->isPortRead(*fuPort,l)) {
77 opName, -1, fu.pipelineElementCount()+k);
78 }
79 }
80 }
81
82 // set operation latencies
83 ExecutionPipeline::OperandSet writes = ep->writtenOperands();
84 for (ExecutionPipeline::OperandSet::iterator iter =
85 writes.begin(); iter != writes.end(); iter++) {
86 int index = *iter;
87 int latency = hwop.latency(index);
88 setLatency(opName, index, latency);
89 }
90 }
91}
void setLatency(const std::string &opName, const int output, const int latency)
void setResourceUse(const std::string &opName, const int cycle, const int resIndex)
int numberOfResources_
Resource and ports vector width, depends on particular FU.
unsigned int maximalLatency_
Maximal latency of operation in FU.
static std::string stringToUpper(const std::string &source)
virtual TCEString name() const
OperandSet writtenOperands(int cycle) const
bool isPortWritten(const FUPort &port, int cycle) const
bool isPortRead(const FUPort &port, int cycle) const
bool isResourceUsed(const std::string &name, int cycle) const
virtual int pipelineElementCount() const
virtual HWOperation * operation(const std::string &name) const
virtual int operationCount() const
virtual int maxLatency() const
virtual FUPort * operationPort(const std::string &name) const
virtual PipelineElement * pipelineElement(int index) const
virtual int operationPortCount() const
ExecutionPipeline * pipeline() const
const std::string & name() const
const std::string & name() const

References TTAMachine::ExecutionPipeline::isPortRead(), TTAMachine::ExecutionPipeline::isPortWritten(), TTAMachine::ExecutionPipeline::isResourceUsed(), TTAMachine::ExecutionPipeline::latency(), TTAMachine::HWOperation::latency(), TTAMachine::HWOperation::name(), TTAMachine::PipelineElement::name(), TTAMachine::FunctionUnit::operation(), TTAMachine::FunctionUnit::operationCount(), TTAMachine::FunctionUnit::operationPort(), TTAMachine::FunctionUnit::operationPortCount(), TTAMachine::HWOperation::pipeline(), TTAMachine::FunctionUnit::pipelineElement(), TTAMachine::FunctionUnit::pipelineElementCount(), setLatency(), setResourceUse(), StringTools::stringToUpper(), and TTAMachine::ExecutionPipeline::writtenOperands().

Here is the call graph for this function:

Member Function Documentation

◆ finalize()

void ExecutionPipelineResourceTable::finalize ( )
static

Delete all the resource tables. This can be called after scheduling is done, when resource managers are longer used.

Definition at line 185 of file ExecutionPipelineResourceTable.cc.

185 {
187}
static ResourceTableMap allResourceTables_
Contains these tables for all FU's.
static void deleteAllValues(MapType &aMap)

References allResourceTables_, and MapTools::deleteAllValues().

Referenced by SimpleResourceManager::disposeRM().

Here is the call graph for this function:

◆ hasOperation()

bool ExecutionPipelineResourceTable::hasOperation ( const std::string &  opName) const
inline

◆ maximalLatency()

unsigned int ExecutionPipelineResourceTable::maximalLatency ( ) const
inline

◆ name()

const std::string & ExecutionPipelineResourceTable::name ( ) const
inline

◆ numberOfResources()

unsigned int ExecutionPipelineResourceTable::numberOfResources ( ) const
inline

◆ operationIndex()

int ExecutionPipelineResourceTable::operationIndex ( const std::string &  opName) const
inline

◆ operationLatency()

const std::map< int, int > & ExecutionPipelineResourceTable::operationLatency ( unsigned int  operationIndex) const
inline

◆ operationPipeline()

bool ExecutionPipelineResourceTable::operationPipeline ( int  op,
int  cycle,
int  res 
) const
inline

◆ pipelineSize()

unsigned int ExecutionPipelineResourceTable::pipelineSize ( ) const
inline

◆ resourceTable()

const ExecutionPipelineResourceTable & ExecutionPipelineResourceTable::resourceTable ( const TTAMachine::FunctionUnit fu)
static

Gives an resource table for given FU. If no existing found, creates a new one.

Parameters
fufunction unit whose resource table we are asking for.

Definition at line 164 of file ExecutionPipelineResourceTable.cc.

165 {
166
167 ResourceTableMap::iterator i = allResourceTables_.find(&fu);
168
169 if (i != allResourceTables_.end()) {
170 return *i->second;
171 }
172
175 allResourceTables_[&fu] = newTable;
176 return *newTable;
177}

References allResourceTables_.

◆ setLatency()

void ExecutionPipelineResourceTable::setLatency ( const std::string &  opName,
const int  output,
const int  latency 
)
private

Sets latency of an output of an operation. The resource usage of the operation has to be set before calling this.

Parameters
opNameoperation to set the latency
outputindex of the output operand(stating from numberofinputoperand, not 0/1)
latencylatency of the output of the operation

Definition at line 139 of file ExecutionPipelineResourceTable.cc.

142 {
143
145 ResourceTable newOp(maximalLatency_, std::vector<bool>(0, false));
146 operationPipelines_.push_back(newOp);
147 operationSupported_[opName] = operationPipelines_.size() - 1;
148 }
149
151 while (static_cast<int>(operationLatencies_.size()) <= pIndex) {
152 operationLatencies_.push_back(std::map<int,int>());
153 }
154 operationLatencies_[pIndex][output] = latency;
155}
std::map< std::string, int > operationSupported_
Operations supported, name - index to operation pipeline vector.
std::vector< ResourceVector > ResourceTable
Type for resource reservation table, resource vector x latency.
std::vector< std::map< int, int > > operationLatencies_
std::vector< ResourceTable > operationPipelines_
Pipelines for operations.
static KeyType keyForValue(const MapType &aMap, const ValueType &aValue)
static bool containsKey(const MapType &aMap, const KeyType &aKey)

References MapTools::containsKey(), MapTools::keyForValue(), maximalLatency_, operationLatencies_, operationPipelines_, and operationSupported_.

Referenced by ExecutionPipelineResourceTable().

Here is the call graph for this function:

◆ setResourceUse()

void ExecutionPipelineResourceTable::setResourceUse ( const std::string &  opName,
const int  cycle,
const int  resIndex 
)
private

Sets usage of resource/port to true for given cycle and resource number and particular pipeline.

Parameters
opNameName of operation to set resource for
cycleCycle in which to set usage
indexIndex of resource/port in resource vector

Definition at line 102 of file ExecutionPipelineResourceTable.cc.

105 {
106
107 if (cycle > (signed)maximalLatency_) {
108 throw InvalidData(__FILE__, __LINE__, __func__,
109 "Trying to set resource use to cycle out of scope of "
110 "FU pipeline!");
111 }
112 if (resIndex >= numberOfResources_ || resIndex < 0){
113 throw InvalidData(__FILE__, __LINE__, __func__,
114 "Trying to set resource use for resource out of scope of "
115 "FU pipeline!");
116 }
117
119 ResourceTable newOp(
120 maximalLatency_, std::vector<bool>(numberOfResources_, false));
121 operationPipelines_.push_back(newOp);
122 operationSupported_[opName] = operationPipelines_.size() - 1;
123 }
125 if(cycle > -1) {
126 operationPipelines_[pIndex][cycle][resIndex] = true;
127 }
128}
#define __func__

References __func__, MapTools::containsKey(), MapTools::keyForValue(), maximalLatency_, numberOfResources_, operationPipelines_, and operationSupported_.

Referenced by ExecutionPipelineResourceTable().

Here is the call graph for this function:

Member Data Documentation

◆ allResourceTables_

ExecutionPipelineResourceTable::ResourceTableMap ExecutionPipelineResourceTable::allResourceTables_
staticprivate

Contains these tables for all FU's.

Definition at line 100 of file ExecutionPipelineResourceTable.hh.

Referenced by finalize(), and resourceTable().

◆ maximalLatency_

unsigned int ExecutionPipelineResourceTable::maximalLatency_
private

Maximal latency of operation in FU.

Definition at line 91 of file ExecutionPipelineResourceTable.hh.

Referenced by setLatency(), and setResourceUse().

◆ name_

std::string ExecutionPipelineResourceTable::name_
private

Definition at line 77 of file ExecutionPipelineResourceTable.hh.

◆ numberOfResources_

int ExecutionPipelineResourceTable::numberOfResources_
private

Resource and ports vector width, depends on particular FU.

Definition at line 89 of file ExecutionPipelineResourceTable.hh.

Referenced by setResourceUse().

◆ operationLatencies_

std::vector<std::map<int,int> > ExecutionPipelineResourceTable::operationLatencies_
private

Definition at line 95 of file ExecutionPipelineResourceTable.hh.

Referenced by setLatency().

◆ operationPipelines_

std::vector<ResourceTable> ExecutionPipelineResourceTable::operationPipelines_
private

Pipelines for operations.

Definition at line 97 of file ExecutionPipelineResourceTable.hh.

Referenced by setLatency(), and setResourceUse().

◆ operationSupported_

std::map<std::string, int> ExecutionPipelineResourceTable::operationSupported_
private

Operations supported, name - index to operation pipeline vector.

Definition at line 93 of file ExecutionPipelineResourceTable.hh.

Referenced by setLatency(), and setResourceUse().


The documentation for this class was generated from the following files: