This class implements the autonomous grid point functionality: it is a communicating GridPoint. The communication interface is implemented in scIGPMessage_if.
It has its associated inter-gridpoint communication facilities and communicates autonomously with its immediate neighbors and cluster members via sending and receiving messages of form scIGPMessage.
An scGridPoint must implement both slave and master interfaces: the sending scGridPoint is the master, and the receiving scGridPoint is the slave. The messages are always 'write' scIGPMessage messages; the sender sends the message in 'burst' mode, and the slave reads it uninterrupted, and after reading makes the corresponding action.
* |GridPoint
* |--/scGridPoint
* |..../AbstractCore
* |....../XXCore
* |..../NeurerCore
*
The classes subclassed from scGridPoint comprise two cooperating layers. The top layer is responsible for the computing and morphing, implemented in subclasses (such as a processor core or a neurer, under the supervision of the processor) and this bottom layer is responsible for the communication between modules having interface scIGPMessage_if (and works in essentially unchanged form in the subclassed modules). The bottom layer can receive ready-made messages it can deliver to the destination using its own connections, it can recognize if a message is for its top layer, and it can prepare the message content in a buffer for the top layer and signal the arrival of the message. The two layers share the tasks as follows.
This bottom layer may receive packages (for one of its scHThread objects)
- i) from its own top layer
- ii) from one of its immediate neighbors
- iii) through the inter-cluster bus from the external world
This bottom layer can send packages (for an scHThread object)
- i) to its own top layer (if the own address is recognized)
- ii) to one of its immediate neighbors
- iii) through the inter-cluster bus to the external world
The top layer makes the payload work and can utilize the services provided by this bottom layer.
For efficiency,
- i) only the cluster heads have access to the inter-cluster bus
- ii) the "2nd neighbor" gridpoints can also be accessed directly, using 2 "hops" (independently of whether they belong to the same cluster)
The top layer receives a task (a stream of machine instructions) from the memory: it receives an instruction pointer and initates the execution of the instruction the instuction points to in the memory and for operating them typically needs memory data pointed out by a memory pointer. Accessing instruction/data may take some time, as well as the delivery of the returned information corresponding to instruction and/or data. As the excution of the next instruction is only possible when all previous instructions terminated (this status is or-ing the results status of the finished streams). Then a core picks a new pointer value from the instruction or data pointer unit. If all conditions are meet, that is i.e. the instruction is ready to proceed with execution and both data and instruction are available, the execution of a machine instruction begins and no action interrupts processing of the instruction.
- See also
- scIGPMessage
-
AbstractCore
-
AbstractNeuron
|
void | AddDefaultAliasNames (void) |
|
void | AddHThread (unsigned int H, scHThread *P) |
| < Add a HW thread to the scGridPoint
|
|
core_cooperationmode_t | CooperationMode_Get (void) |
| Send a notification to the thread that the requested memory content is available.
|
|
scIGPMessage * | CreateQtCreateMessageTo (scGridPoint *To, SC_ADDRESS_TYPE PC, SC_GRIDPOINT_MASK_TYPE Mask, SC_GRIDPOINT_MASK_TYPE BackMask) |
| scGridPoint::CreateQtCreateMessageTo It can be needed to pass a QT message for Q_CREATE and Q_KILL More...
|
|
virtual void | CreateThreads (void) |
| < Create threads for HThreads sharing this processing unit More...
|
|
virtual bool | doExecInstruction (scHThread *H) |
| Send a message.
|
|
virtual bool | doFetchInstruction (scHThread *H) |
| doFetchInstruction The actual fetching is done in the subclassed routine Here it imitates the action with a 10 ns wait
|
|
virtual void | doSetQTAddresses (scGridPoint *Parent) |
| doSetQTAddresses More...
|
|
void | EXEC_thread () |
| EXEC_thread makes the actual "instruction exec".
|
|
void | FETCH_thread () |
| FETCH_thread makes the actual "instruction fetch".
|
|
bool | HThreadAllocatedBit_Get (SC_HTHREAD_ID_TYPE H) |
| < Return if HThread is active
|
|
void | HThreadAllocatedBit_Set (SC_HTHREAD_ID_TYPE H, bool B) |
| < Set thread H either active or inactive
|
|
scHThread * | HThreadExec_Get (void) |
| < Return the executing thread
|
|
scHThread * | HThreadFetch_Get (void) |
| < Return the fetching thread
|
|
scHThread * | HThreadReceive_Get (void) |
| < Return the fetching thread
|
|
scHThread * | HThreadSend_Get (void) |
| < Return the fetching thread
|
|
SC_GRIDPOINT_ID_TYPE | ID_Get () |
| < Return the unique ID of the scGridPoint
|
|
SC_GRIDPOINT_MASK_TYPE | IDMask_Get (void) |
| < Return the mask form of the ID
|
|
scIGPCB * | IGPCB_Get (ClusterNeighbor index) |
| < Get address of the communication block
|
|
string | Name_Get (void) |
| < Return the SC name of the module
|
|
void | ObservedHThreadBit_Set (SC_HTHREAD_MASK_TYPE M, bool B) |
| Set if HThread M is observed. More...
|
|
void | PreAllocatedMaskBit_Set (scGridPoint *C, bool V=true) |
| Get the mask of allocating cores.
|
|
scGridPoint * | PreAllocateFor (scGridPoint *Parent) |
| Allocate this core for running a QT.
|
|
| scGridPoint (sc_core::sc_module_name nm, scProcessor *Processor, const GridPoint GP, bool StandAlone) |
| scGridPoint Creates an GP for Processor scGridPoint at position, with name nm More...
|
|
void | SEND_thread () |
| SEND_thread Send the actual message.
|
|
void | SIGNAL_method (void) |
| ClusterHead_Get. More...
|
|
string | StringOfClusterAddress_Get (void) |
|
string | StringOfMemoryAddress_Get (void) |
| ! Removed temporarily, until NEXT in AbstractCore fully implemented
|
|
ClusterAddress_t | ClusterAddress_Get (void) |
| < Return the cluster address of the gridpoint, stored in the matrix
|
|
void | ClusterAddress_Set (ClusterAddress_t CA) |
| Set the cluster address of the gridpoint.
|
|
void | ClusterAddressHThread_Set (int H) |
| Set the cluster address of the gridpoint.
|
|
ClusterStatus | ClusterStatus_Get (void) |
| Return the status of the gridpoint.
|
|
void | ClusterStatus_Set (ClusterStatus CS) |
| Set the cstatus of the gridpoint.
|
|
bool | Is2ndNeighborOf (GridPoint *GP) |
| Return true if we are a second neighbor of GP. More...
|
|
bool | IsInTheSameClusterAs (GridPoint *GP) |
| Return true if we and GridPoint GP are in the same cluster. More...
|
|
bool | IsNeighborOf (GridPoint *GP) |
| Return true if we are an immediate neighbor of GP. More...
|
|
bool | IsTheSameAs (GridPoint *GP) |
| Return true if GridPoint GP is identical with us. More...
|
|
string | StringOfClusterAddressName_Get (void) |
| Return the string form of our cluster address. More...
|
|
string | StringOfThread_Get () |
| Return the string describing the actual thread. More...
|
|