-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmpis-profile
135 lines (102 loc) · 3.15 KB
/
mpis-profile
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
#!/bin/bash
. "${MPIS_UI}"
REQUIRED=( MPIS_OUTPUT_ROOT MPIS_STDOUT_EXTENSION MPIS_STDERR_EXTENSION MPIS_USER_ID MPIS_COMPILER MPIS_SCHEDULER MACRO VALUES PROCESSES THREADS_PER_PROCESS TIME_PATTERN )
RESULTS="results.csv"
function max
{
list=""
for value in $*
do
list="$value, $list"
done
python -c "print(max([${list}]))"
}
if [ "$#" -lt 2 ]
then
log "ERROR" "usage: $( basename "$0" ) [SOURCE] [DESCRIPTION]"; exit 1
fi
if [ ! -r "$1" ]
then
log "ERROR" "'$1' is not readable"; exit 1
fi
if [ ! -r "$2" ]
then
log "ERROR" "'$2' is not readable"; exit 1
fi
. "$2"
for value in "${REQUIRED[@]}"
do
if [[ -z "${!value// }" ]]
then
log "ERROR" "'$value' has not been specified"; exit 1
fi
done
exe="$( basename "$1" )"
exe="${exe%.*}.x"
DIR="$( date +"%d_%m_%Y" )/$( date +"%H_%M_%S" )"
for value in "${VALUES[@]}"
do
if ! "$MPIS_COMPILER" "$1" "$MACRO" "$value"
then
exit 1
fi
for processes in "${PROCESSES[@]}"
do
export SCHEDULE_DIRECTORY="${DIR}/${value}/${processes}"
if ! "$MPIS_SCHEDULER" "$exe" "$processes" "$THREADS_PER_PROCESS"
then
exit 1
fi
done
while true
do
running="$( qstat | grep "$MPIS_USER_ID" )"
if [ -z "$running" ]
then
break
fi
done
done
find . -maxdepth 1 -name "*job.sh" -delete
find . -maxdepth 1 -name "*.x" -delete
for file in $(find "${MPIS_OUTPUT_ROOT}" -name "*.mpiP")
do
mv "$file" "$(dirname "$file")/mpiP.log"
done
declare -A measurements
for value in "${VALUES[@]}"
do
for processes in "${PROCESSES[@]}"
do
for file in $( find "${MPIS_OUTPUT_ROOT}/${DIR}/${value}/${processes}" -name "*.${MPIS_STDERR_EXTENSION}" | tr '\n' ' ' )
do
values="$( cat "$file" | grep -Po "$TIME_PATTERN" | tr '\n' ' ' )"
if [[ -z "${values// }" ]]
then
log "WARNING" "No matches for '${TIME_PATTERN}' in '$file'"
if [[ ! -z "${MPIS_EDITOR// }" ]] && [[ "$( command -v "$MPIS_EDITOR" )" ]]
then
"$MPIS_EDITOR" "$MPIS_EDITOR_ARGS" "$file" "${file%%.*}.${MPIS_STDERR_EXTENSION}"
fi
measurements["$value, $processes"]="-1"
else
measurements["$value, $processes"]="$( max "$values" )"
fi
done
done
done
log "MESSAGE" "Saving measurements to '${MPIS_OUTPUT_ROOT}/${DIR}/${RESULTS}'"
echo "${MACRO}, Processes, Time, Speed Up, Efficiency" > "${MPIS_OUTPUT_ROOT}/${DIR}/${RESULTS}"
for value in "${VALUES[@]}"
do
for ((processes = 1; processes <= 64; processes *= 2))
do
speedup="$( python -c "print(${measurements[$value, 1]} / ${measurements[$value, $processes]})" )"
efficiency="$( python -c "print(${speedup} / ${processes})" )"
echo "${value}, ${processes}, ${measurements[$value, $processes]}, ${speedup}, ${efficiency}"
done
done >> "${MPIS_OUTPUT_ROOT}/${DIR}/${RESULTS}"
if [[ ! -z "${MPIS_EDITOR// }" ]] && [[ "$( command -v "$MPIS_EDITOR" )" ]]
then
"$MPIS_EDITOR" "$MPIS_EDITOR_ARGS" "${MPIS_OUTPUT_ROOT}/${DIR}/${RESULTS}"
fi