![]() |
ROOT-Sim core
3.0.0-rc.2
A General-Purpose Multi-threaded Parallel/Distributed Simulation Library
|
LP state management functions. More...
#include <lp/process.h>#include <arch/timer.h>#include <datatypes/msg_queue.h>#include <distributed/mpi.h>#include <gvt/fossil.h>#include <gvt/gvt.h>#include <log/stats.h>#include <lp/common.h>#include <lp/lp.h>#include <mm/auto_ckpt.h>#include <mm/msg_allocator.h>#include <serial/serial.h>
Macros | |
| #define | mark_msg_remote(msg_p) ((struct lp_msg *)(((uintptr_t)(msg_p)) | 2U)) |
| #define | mark_msg_sent(msg_p) ((struct lp_msg *)(((uintptr_t)(msg_p)) | 1U)) |
| #define | unmark_msg_remote(msg_p) ((struct lp_msg *)(((uintptr_t)(msg_p)) - 2U)) |
| #define | unmark_msg_sent(msg_p) ((struct lp_msg *)(((uintptr_t)(msg_p)) - 1U)) |
Functions | |
| void | ScheduleNewEvent (lp_id_t receiver, simtime_t timestamp, unsigned event_type, const void *payload, unsigned payload_size) |
| API to inject a new event in the simulation. More... | |
| static void | checkpoint_take (struct lp_ctx *lp) |
| Take a checkpoint of the state of a LP. More... | |
| void | process_lp_init (struct lp_ctx *lp) |
| Initializes the processing module in the current LP. | |
| void | process_lp_fini (struct lp_ctx *lp) |
| Finalize the processing module in the current LP. | |
| static void | silent_execution (const struct lp_ctx *lp, array_count_t last_i, array_count_t past_i) |
| Perform silent execution of events. More... | |
| static void | send_anti_messages (struct process_ctx *proc_p, array_count_t past_i) |
| Send anti-messages. More... | |
| static void | do_rollback (struct lp_ctx *lp, array_count_t past_i) |
| Perform a rollback. More... | |
| static array_count_t | match_straggler_msg (const struct process_ctx *proc_p, const struct lp_msg *s_msg) |
| Find the last valid processed message with respect to a straggler message. More... | |
| static array_count_t | match_anti_msg (const struct process_ctx *proc_p, const struct lp_msg *a_msg) |
| Find the last valid processed message with respect to a received anti-message. More... | |
| static void | handle_remote_anti_msg (struct lp_ctx *lp, struct lp_msg *a_msg) |
| Handle the reception of a remote anti-message. More... | |
| static bool | check_early_anti_messages (struct process_ctx *proc_p, struct lp_msg *msg) |
| Check if a remote message has already been invalidated by an early remote anti-message. More... | |
| static void | handle_anti_msg (struct lp_ctx *lp, struct lp_msg *msg, uint32_t last_flags) |
| Handle the reception of an anti-message. More... | |
| static void | handle_straggler_msg (struct lp_ctx *lp, struct lp_msg *msg) |
| Handle the reception of a straggler message. More... | |
| void | process_msg (void) |
| Extract and process a message, if available. More... | |
Variables | |
| static __thread bool | silent_processing = false |
| The flag used in ScheduleNewEvent() to keep track of silent execution. | |
| static __thread struct lp_msg * | current_msg |
| The currently processed message. More... | |
LP state management functions.
This module contains the main logic for the parallel simulation runtime
|
inlinestatic |
Check if a remote message has already been invalidated by an early remote anti-message.
| proc_p | the message processing data of the current LP |
| a_msg | the remote message to check |
|
inlinestatic |
Take a checkpoint of the state of a LP.
| lp | the LP to checkpoint |
The actual checkpoint operation is delegated to the model memory allocator.
|
static |
Perform a rollback.
| proc_p | the message processing data for the LP that has to rollback |
| past_i | the index in proc_p of the last validly processed message |
Handle the reception of an anti-message.
| lp | the processing context of the current LP |
| msg | the received anti-message |
| last_flags | the original value of the message flags before being modified by the current process_msg() call |
Handle the reception of a remote anti-message.
| proc_p | the message processing data for the LP that has to handle the anti-message |
| a_msg | the remote anti-message |
Handle the reception of a straggler message.
| lp | the processing context of the current LP |
| msg | the received straggler message |
|
inlinestatic |
Find the last valid processed message with respect to a received anti-message.
| proc_p | the message processing data for the LP |
| a_msg | the anti-message |
|
inlinestatic |
Find the last valid processed message with respect to a straggler message.
| proc_p | the message processing data for the LP |
| s_msg | the straggler message |
| void process_msg | ( | void | ) |
Extract and process a message, if available.
This function encloses most of the actual parallel/distributed simulation logic.
| void ScheduleNewEvent | ( | lp_id_t | receiver, |
| simtime_t | timestamp, | ||
| unsigned | event_type, | ||
| const void * | event_content, | ||
| unsigned | event_size | ||
| ) |
API to inject a new event in the simulation.
This is a function pointer that is setup at simulation startup to point to either ScheduleNewEvent_parallel() in case of a parallel/distributed simulation, or to ScheduleNewEvent_serial() in case of a serial simulation.
| receiver | The ID of the LP that should receive the newly-injected message |
| timestamp | The simulation time at which the event should be delivered at the recipient LP |
| event_type | Numerical event type to be passed to the model's dispatcher |
| event_content | The event content |
| event_size | The size (in bytes) of the event content |
|
inlinestatic |
Send anti-messages.
| proc_p | the message processing data for the LP that has to send anti-messages |
| past_i | the index in proc_p of the last validly processed message |
|
inlinestatic |
Perform silent execution of events.
| proc_p | the message processing data for the LP that has to coast forward |
| last_i | the index in proc_p of the last processed message in the current LP state |
| past_i | the target index in proc_p of the message to reach with the silent execution operation |
This function implements the coasting forward operation done after a checkpoint has been restored.
|
static |
The currently processed message.
This is not necessary for normal operation, but it's useful in debug