forked from llnl/LULESH
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_bidir_mode_switch.sh
More file actions
158 lines (134 loc) · 4.24 KB
/
test_bidir_mode_switch.sh
File metadata and controls
158 lines (134 loc) · 4.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#!/bin/bash
#
# Comprehensive bidirectional mode switch test for PInsight
# Exercises all 6 transitions in a single LULESH execution:
#
# Phase 0: TRACING (initial, max_num_traces=50, ~4s)
# Phase 1: MONITORING (SIGUSR1, ~4s) [TRACING -> MONITORING]
# Phase 2: OFF (SIGUSR1, ~4s) [MONITORING -> OFF]
# Phase 3: MONITORING (SIGUSR1, ~4s) [OFF -> MONITORING]
# Phase 4: TRACING (SIGUSR1, max=200, ~4s) [MONITORING -> TRACING]
# Phase 5: OFF (SIGUSR1, ~4s) [TRACING -> OFF]
# Phase 6: TRACING (SIGUSR1, max=500, ~rest) [OFF -> TRACING]
#
# This covers all 6 transitions:
# TRACING->MONITORING, MONITORING->OFF, OFF->MONITORING,
# MONITORING->TRACING, TRACING->OFF, OFF->TRACING
set -e
trap '' USR1 # Parent shell ignores SIGUSR1
P=/home/yyan7/work/tools/pinsight/build/libpinsight.so
D=/home/yyan7/work/tools/pinsight/eva/LULESH
CFGFILE=/tmp/pinsight_bidir_test_config.txt
OUTFILE=/tmp/pinsight_bidir_out.txt
ERRFILE=/tmp/pinsight_bidir_err.txt
INTERVAL=4 # seconds between mode switches
echo "=========================================="
echo " PInsight Bidirectional Mode Switch Test"
echo "=========================================="
echo ""
write_config() {
local mode=$1
local max_traces=$2
local rate=$3
cat > $CFGFILE << EOF
[OpenMP.global]
trace_mode = $mode
[Lexgion.default]
trace_starts_at = 0
max_num_traces = $max_traces
tracing_rate = $rate
EOF
}
# Phase 0 config: TRACING with max_num_traces=50
write_config TRACING 50 1
echo "Phase 0: Starting LULESH in TRACING mode (max_traces=50)"
OMP_NUM_THREADS=4 \
PINSIGHT_TRACE_OPENMP=TRACING \
PINSIGHT_TRACE_CONFIG_FILE=$CFGFILE \
OMP_TOOL_LIBRARIES=$P \
$D/lulesh2.0 -s 40 > $OUTFILE 2>$ERRFILE &
PID=$!
echo " PID: $PID"
sleep 1
if ! kill -0 $PID 2>/dev/null; then
echo "ERROR: LULESH died before first switch"
cat $ERRFILE
exit 1
fi
# --- Phase 1: TRACING -> MONITORING ---
sleep $INTERVAL
echo ""
echo "Phase 1: TRACING -> MONITORING (SIGUSR1 at +${INTERVAL}s)"
write_config MONITORING 50 1
kill -USR1 $PID
# --- Phase 2: MONITORING -> OFF ---
sleep $INTERVAL
echo "Phase 2: MONITORING -> OFF (SIGUSR1 at +$((INTERVAL*2))s)"
write_config OFF 50 1
kill -USR1 $PID
# --- Phase 3: OFF -> MONITORING ---
sleep $INTERVAL
echo "Phase 3: OFF -> MONITORING (SIGUSR1 at +$((INTERVAL*3))s)"
write_config MONITORING 50 1
kill -USR1 $PID
# --- Phase 4: MONITORING -> TRACING (with increased max_traces=200) ---
sleep $INTERVAL
echo "Phase 4: MONITORING -> TRACING (max_traces=200, SIGUSR1 at +$((INTERVAL*4))s)"
write_config TRACING 200 1
kill -USR1 $PID
# --- Phase 5: TRACING -> OFF ---
sleep $INTERVAL
echo "Phase 5: TRACING -> OFF (SIGUSR1 at +$((INTERVAL*5))s)"
write_config OFF 200 1
kill -USR1 $PID
# --- Phase 6: OFF -> TRACING (with increased max_traces=500) ---
sleep $INTERVAL
echo "Phase 6: OFF -> TRACING (max_traces=500, SIGUSR1 at +$((INTERVAL*6))s)"
write_config TRACING 500 1
kill -USR1 $PID
echo ""
echo "Waiting for LULESH to complete..."
wait $PID
RC=$?
echo "LULESH exit code: $RC"
echo ""
echo "=========================================="
echo " Results Summary"
echo "=========================================="
echo ""
# Extract key metrics
echo "--- Performance ---"
grep -E 'Elapsed time|FOM|Iteration count' $OUTFILE
echo ""
echo "--- Initial Mode ---"
grep -E '# mode:' $OUTFILE | head -3
echo ""
echo "--- Auto-trigger Messages ---"
grep 'Auto-trigger' $OUTFILE || echo "(none)"
echo ""
echo "--- Trace Report (first 10 lexgions) ---"
grep -E '^[0-9]+\s' $OUTFILE | head -10
echo ""
echo "--- Trace Count Analysis ---"
echo "Lexgions with non-zero trace counts:"
grep -E '^[0-9]+\s' $OUTFILE | awk '$5 != "0(0-0)" {print}' | head -20
echo ""
echo "--- Total trace events ---"
total_traces=$(grep -E '^[0-9]+\s' $OUTFILE | awk '{
split($5, a, "(");
sum += a[1];
} END {print sum}')
echo "Total traces across all lexgions: $total_traces"
echo ""
echo "--- Stderr (mode-related) ---"
grep -iE 'mode|reload|signal|error|warning|segfault' $ERRFILE 2>/dev/null | head -10
echo ""
if [ $RC -eq 0 ]; then
echo "✅ TEST PASSED: LULESH completed successfully with all 6 mode transitions"
else
echo "❌ TEST FAILED: Exit code $RC"
fi
# Save full reports
echo ""
echo "Full stdout: $OUTFILE"
echo "Full stderr: $ERRFILE"