Difference between revisions of "Synchronization"

From NaplesPU Documentation
Jump to: navigation, search
Line 15: Line 15:
 
[[File:SynchronizationMessages.png|600px]]  
 
[[File:SynchronizationMessages.png|600px]]  
  
The size of each message is of 1 flit (64 bit), and the field size of message change with number of Barrier supported.
+
The size of each message is of 1 ''flit'' (64 bit), and the field size of message change with number of Barrier supported.
 
We have these fields in the messages:
 
We have these fields in the messages:
 
*'''Type''': It specifies the type of message: '00'(Setup_Message), '01'(Account_Message), '10'(Release_message). The size is 2 bits;
 
*'''Type''': It specifies the type of message: '00'(Setup_Message), '01'(Account_Message), '10'(Release_message). The size is 2 bits;
*'''Counter'''': It specifies the number of ''Hardware Threads'' that takes part in the Barrier Synchronization. The size is on N bits, where N is log2 of total number of ''Hardware Threads'' in the manycore;
+
*'''Counter''': It specifies the number of ''Hardware Threads'' that takes part in the Barrier Synchronization. The size is on N bits, where N is log2 of total number of ''Hardware Threads'' in the manycore;
 
*'''Barrier ID''': It identifies the Barrier. The size si on M bits, where M is the log2 of total number of Barrier supported by architecture; it is defined in the file('''indicare il file''').  
 
*'''Barrier ID''': It identifies the Barrier. The size si on M bits, where M is the log2 of total number of Barrier supported by architecture; it is defined in the file('''indicare il file''').  
 
*'''Tile Source''': It specifies the ID of Tile Source of Barrier. We use it for destination multicast of Release Message. The size is T and it is log2 of total number of tiles in the manycore.
 
*'''Tile Source''': It specifies the ID of Tile Source of Barrier. We use it for destination multicast of Release Message. The size is T and it is log2 of total number of tiles in the manycore.
  
 
=== Example of Barrier ===
 
=== Example of Barrier ===
 +
For explaining the protocol of Barrier Synchronization, we describe the example in Figure(below). In this example we have 8 tiles nu+, with two different groups of thread and one Barrier Synchronization for each group. In the group 1 we have the threads between tile 0 to tile 3, and in the group 2 the other tiles. For group 1 we have the Barrier with the ID number 26, whereas about group 2 we have Barrier with the ID number 43
  
 
== Barrier Synchronization Architecture ==
 
== Barrier Synchronization Architecture ==

Revision as of 15:13, 8 November 2017

Per Daniele

The nu+ manycore supports an hardware mechanism for Synchronization. The mechanism of synchronization is based on Barrier primitive. A barrier for a group of threads in the source code means any thread must stop at this point and cannot proceed until all other threads reach this barrier. The mechanism of Barrier Synchronization implemented in this system is based on master-slave architecture, with master distributed on tiles. We support more independent barriers in parallel execution on manycore in each time. For identifying the different barriers we have an ID for each Barrier. Each Synchronization Core Master handles a range of Barrier in manycore.

Barrier Synchronization Protocol

The Barrier protocol is based on a message passing. We have three type of message:

  • Setup_Message: It configures the struct of Barrier in Synchronization Core;
  • Account_Message: It notifies to Synchronization Core that the thread is arrived to point of Barrier;
  • Release_Message: It notifies from Synchronization Core to Barrier Core that all threads are arrived to point of Synchronization, so the Barrier can end.

In this protocol the Setup_Message and Account_Message are out-order and we use an enable bit for managing the Setup. The size of message change with number of Barrier Synchronization supported, as view in figure:

SynchronizationMessages.png

The size of each message is of 1 flit (64 bit), and the field size of message change with number of Barrier supported. We have these fields in the messages:

  • Type: It specifies the type of message: '00'(Setup_Message), '01'(Account_Message), '10'(Release_message). The size is 2 bits;
  • Counter: It specifies the number of Hardware Threads that takes part in the Barrier Synchronization. The size is on N bits, where N is log2 of total number of Hardware Threads in the manycore;
  • Barrier ID: It identifies the Barrier. The size si on M bits, where M is the log2 of total number of Barrier supported by architecture; it is defined in the file(indicare il file).
  • Tile Source: It specifies the ID of Tile Source of Barrier. We use it for destination multicast of Release Message. The size is T and it is log2 of total number of tiles in the manycore.

Example of Barrier

For explaining the protocol of Barrier Synchronization, we describe the example in Figure(below). In this example we have 8 tiles nu+, with two different groups of thread and one Barrier Synchronization for each group. In the group 1 we have the threads between tile 0 to tile 3, and in the group 2 the other tiles. For group 1 we have the Barrier with the ID number 26, whereas about group 2 we have Barrier with the ID number 43

Barrier Synchronization Architecture

Boot Setup

Barrier Core

Synchronization Core