Skip to content

Commit 6fc90bd

Browse files
committed
Cleaning up some ifdef's from the tiebreaker mechanism
1 parent 0d71939 commit 6fc90bd

File tree

1 file changed

+14
-22
lines changed

1 file changed

+14
-22
lines changed

core/tw-sched.c

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,23 @@ static inline void reset_bitfields(tw_event *revent)
1717
memset(&revent->cv, 0, sizeof(revent->cv));
1818
}
1919

20-
// To be used in `tw_sched_event_q`, `tw_scheduler_sequential`, `tw_sched_batch`, `tw_scheduler_optimistic`, and `tw_scheduler_optimistic_realtime`
20+
// To be used instead of littering the file with ifdef's all over. If this grows
21+
// far too large, there might be a need to rethink how to implement the
22+
// tie-breaker mechanism so that it can be deactivated
2123
#ifdef USE_RAND_TIEBREAKER
2224
#define PQ_MINUMUM(pe) tw_pq_minimum_sig(pe->pq).recv_ts
2325
#define CMP_KP_TO_EVENT_TIME(kp, e) tw_event_sig_compare(kp->last_sig, e->sig)
2426
#define CMP_GVT_HOOK_TO_NEXT_IN_QUEUE(pe) tw_event_sig_compare(g_tw_trigger_gvt_hook.sig_at, tw_pq_minimum_sig(pe->pq))
2527
#define TRIGGER_ROLLBACK_TO_EVENT_TIME(kp, e) tw_kp_rollback_to_sig(kp, e->sig)
2628
#define STIME_FROM_PE(pe) TW_STIME_DBL(pe->GVT_sig.recv_ts)
29+
#define STIME_FROM_KP(kp) TW_STIME_DBL(kp->last_sig.recv_ts)
2730
#else
2831
#define PQ_MINUMUM(pe) tw_pq_minimum(pe->pq)
2932
#define CMP_KP_TO_EVENT_TIME(kp, e) TW_STIME_CMP(kp->last_time, e->recv_ts)
3033
#define CMP_GVT_HOOK_TO_NEXT_IN_QUEUE(pe) (g_tw_trigger_gvt_hook.at - tw_pq_minimum(pe->pq))
3134
#define TRIGGER_ROLLBACK_TO_EVENT_TIME(kp, e) tw_kp_rollback_to(kp, e->recv_ts);
3235
#define STIME_FROM_PE(pe) TW_STIME_DBL(pe->GVT)
36+
#define STIME_FROM_KP(kp) TW_STIME_DBL(kp->last_time)
3337
#endif
3438

3539
/**
@@ -556,7 +560,7 @@ void tw_scheduler_sequential(tw_pe * me) {
556560
tw_clock const event_start = tw_clock_read();
557561
(*clp->type->event)(clp->cur_state, &cev->cv, tw_event_data(cev), clp);
558562
if (g_st_ev_trace == FULL_TRACE)
559-
st_collect_event_data(cev, tw_clock_read() / g_tw_clock_rate);
563+
st_collect_event_data(cev, (double)tw_clock_read() / g_tw_clock_rate);
560564
if (*clp->type->commit) {
561565
(*clp->type->commit)(clp->cur_state, &cev->cv, tw_event_data(cev), clp);
562566
}
@@ -617,12 +621,9 @@ void tw_scheduler_conservative(tw_pe * me) {
617621
tw_sched_event_q(me);
618622
tw_gvt_step2(me);
619623

620-
#ifdef USE_RAND_TIEBREAKER
621-
if (TW_STIME_DBL(me->GVT_sig.recv_ts) > g_tw_ts_end)
622-
#else
623-
if (TW_STIME_DBL(me->GVT) > g_tw_ts_end)
624-
#endif
624+
if (STIME_FROM_PE(me) > g_tw_ts_end) {
625625
break;
626+
}
626627

627628
// put "batch" loop directly here
628629
/* Process g_tw_mblock events, or until the PQ is empty
@@ -641,12 +642,9 @@ void tw_scheduler_conservative(tw_pe * me) {
641642
break;
642643
}
643644

644-
#ifdef USE_RAND_TIEBREAKER
645-
if(TW_STIME_DBL(tw_pq_minimum_sig(me->pq).recv_ts) >= TW_STIME_DBL(me->GVT_sig.recv_ts) + g_tw_lookahead)
646-
#else
647-
if(TW_STIME_DBL(tw_pq_minimum(me->pq)) >= TW_STIME_DBL(me->GVT) + g_tw_lookahead)
648-
#endif
645+
if(TW_STIME_DBL(PQ_MINUMUM(me)) >= STIME_FROM_PE(me) + g_tw_lookahead) {
649646
break;
647+
}
650648

651649
start = tw_clock_read();
652650
if (!(cev = tw_pq_dequeue(me->pq))) {
@@ -665,21 +663,15 @@ void tw_scheduler_conservative(tw_pe * me) {
665663
ckp = clp->kp;
666664
me->cur_event = cev;
667665

668-
#ifdef USE_RAND_TIEBREAKER
669-
if (tw_event_sig_compare(ckp->last_sig, cev->sig) > 0) {
666+
if (CMP_KP_TO_EVENT_TIME(ckp, cev) > 0) {
670667
tw_error(TW_LOC, "Found KP last time %lf > current event time %lf for LP %d, PE %lu"
671668
"src LP %lu, src PE %lu",
672-
ckp->last_sig.recv_ts, cev->recv_ts, clp->gid, clp->pe->id,
669+
STIME_FROM_KP(ckp), cev->recv_ts, clp->gid, clp->pe->id,
673670
cev->send_lp, cev->send_pe);
674671
}
672+
#ifdef USE_RAND_TIEBREAKER
675673
ckp->last_sig = cev->sig;
676674
#else
677-
if( TW_STIME_CMP(ckp->last_time, cev->recv_ts) > 0 ){
678-
tw_error(TW_LOC, "Found KP last time %lf > current event time %lf for LP %d, PE %lu"
679-
"src LP %lu, src PE %lu",
680-
ckp->last_time, cev->recv_ts, clp->gid, clp->pe->id,
681-
cev->send_lp, cev->send_pe);
682-
}
683675
ckp->last_time = cev->recv_ts;
684676
#endif
685677

@@ -1037,7 +1029,7 @@ void tw_scheduler_sequential_rollback_check(tw_pe * me) {
10371029
event_start = tw_clock_read();
10381030
(*clp->type->event)(clp->cur_state, &cev->cv, tw_event_data(cev), clp);
10391031
if (g_st_ev_trace == FULL_TRACE)
1040-
st_collect_event_data(cev, tw_clock_read() / g_tw_clock_rate);
1032+
st_collect_event_data(cev, (double)tw_clock_read() / g_tw_clock_rate);
10411033
if (*clp->type->commit) {
10421034
(*clp->type->commit)(clp->cur_state, &cev->cv, tw_event_data(cev), clp);
10431035
}

0 commit comments

Comments
 (0)