Line data Source code
1 1 : /** 2 : * @file gvt/gvt.h 3 : * 4 : * @brief Global Virtual Time 5 : * 6 : * SPDX-FileCopyrightText: 2008-2021 HPDCS Group <rootsim@googlegroups.com> 7 : * SPDX-License-Identifier: GPL-3.0-only 8 : */ 9 : #pragma once 10 : 11 : #include <core/core.h> 12 : #include <lp/msg.h> 13 : 14 : #include <stdalign.h> 15 : 16 0 : extern void gvt_global_init(void); 17 0 : extern simtime_t gvt_phase_run(void); 18 0 : extern void gvt_on_msg_extraction(simtime_t msg_t); 19 : 20 0 : extern __thread _Bool gvt_phase; 21 0 : extern _Thread_local uint32_t remote_msg_seq[2][MAX_NODES]; 22 0 : extern _Thread_local uint32_t remote_msg_received[2]; 23 : 24 1 : extern void gvt_start_processing(void); 25 1 : extern void gvt_on_done_ctrl_msg(void); 26 : 27 0 : inline void gvt_remote_msg_send(struct lp_msg *msg, nid_t dest_nid) 28 : { 29 : msg->m_seq = (remote_msg_seq[gvt_phase][dest_nid]++ << 1) | gvt_phase; 30 : msg->raw_flags = (nid << (MAX_THREADS_EXP + 2)) | ((rid + 1) << 2) | 31 : gvt_phase; 32 : } 33 : 34 0 : inline void gvt_remote_anti_msg_send(struct lp_msg *msg, nid_t dest_nid) 35 : { 36 : ++remote_msg_seq[gvt_phase][dest_nid]; 37 : msg->raw_flags |= gvt_phase << 1U; 38 : } 39 : 40 0 : inline void gvt_remote_msg_receive(struct lp_msg *msg) 41 : { 42 : ++remote_msg_received[msg->raw_flags & 1U]; 43 : msg->raw_flags &= ~((uint32_t)3U); 44 : } 45 : 46 0 : inline void gvt_remote_anti_msg_receive(struct lp_msg *msg) 47 : { 48 : ++remote_msg_received[(msg->raw_flags >> 1U) & 1U]; 49 : msg->raw_flags &= ~((uint32_t)3U); 50 : msg->raw_flags |= MSG_FLAG_ANTI; 51 : } 52 :