CheckRun.sh 3.99 KB
Newer Older
1
2
3
4
5
6
7
8
9
#!/bin/bash

dir="/home/martini/malleability_benchmark/"
codeDir="Codes/"
execDir="Exec/"
ResultsDir="Results/"

ResultsDirName=$1
maxIndex=$2
10
cantidadGrupos=$3 #Contando a los padres
Iker Martín's avatar
Iker Martín committed
11
12
13
14
15
16
17
18
19
totalEjGrupo=$4 #Total de ejecuciones por grupo
maxTime=$5 #Maximo tiempo que se considera válido

if [ $# -lt 3 ]
then
  echo "Faltan argumentos"
  echo "Uso -> bash CheckRun NombreDirectorio IndiceMaximo Grupos"
  exit -1
fi
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

cd $dir$ResultsDir
if [ ! -d $ResultsDirName ]
then
  echo "La carpeta de resultados $ResultsDirName no existe. Abortando"
  exit -1
fi
cd $ResultsDirName

#Comprobar si hay errores
#Si los hay, salir
grep -i -e fatal -e error -e abort -e == */slurm* > errores2.txt
qty=$(wc -l errores2.txt | cut -d ' ' -f1)

if [ $qty -gt 0 ]
then
  echo "Se han encontrado errores de ejecución graves. Abortando"
Iker Martín's avatar
Iker Martín committed
37
  echo "Revisar archivo errores2.txt en el directorio $ResultsDirName"
38
39
40
41
  exit -2
fi
rm errores2.txt

Iker Martín's avatar
Iker Martín committed
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
#Comprobar que el número de archivos es correcto
#Pueden estar todos los archivos pero no estar los archivos
#completos -- Esto se comprueba más tarde
qtyG=$(ls R*/R*_Global.out | wc -l)
qtyG=$(($qtyG * 2))
qtyL=$(ls R*/R*_G?N*.out | wc -l)
if [ $qtyG == $qtyL ]
then
  echo "El numero de ficheros G($qtyG) y L($qtyL) coincide"
else
  #Si faltan archivos, se indican cuales faltan
  echo "Faltan ejecuciones Locales o globales"
  for ((i=1; i<$maxIndex; i++))
  do
    qtyEx=$(grep Tex -r Run$i | wc -l)
    qtyIt=$(grep Top -r Run$i | wc -l)
    qtyEx=$(($qtyEx * 2))
    if [ $qtyEx -ne $qtyIt ] 
    then
      diff=$(($totalEjGrupo-$qtyEx))
      echo "Faltan archivos en Run$i"
    fi
  done
  exit -1
fi

#grep -rn "2.\." R* TODO Testear que el tiempo teorico maximo es valido?

70
71
72
73
74
75
76
77
#Comprobar si hay runs con tiempo negativos
#Si los hay, reejecutar e informar de cuales son
grep - */R* | grep Tex > errores.txt
qty=$(wc -l errores.txt | cut -d ' ' -f1)
if [ $qty -gt 0 ]
then
  echo "Se han encontrado errores de ejecución leves. Volviendo a ejecutar"

78
  while IFS="" read -r lineRun || [ -n "$lineRun" ]
79
  do
80
    #Obtener datos de una ejecución erronea
Iker Martín's avatar
Iker Martín committed
81
    run=$(echo $lineRun | cut -d 'R' -f3 | cut -d '_' -f1)
82
    if [ $run -gt $maxIndex ]
Iker Martín's avatar
Iker Martín committed
83
    then #Indice de ejecuciones posteriores echas a mano -- FIXME Eliminar?
84
85
86
87
88
89
90
      realRun=$(($run - $maxIndex))
      index=$run
    else # Indice de las primeras ejecuciones
      realRun=$run
      index=$(($run + $maxIndex))
    fi

91
    echo "Run $run"
92
93
94
95
96
97
98
99
100
    cd Run$realRun

    #Arreglar ejecuccion

    #1 - Borrar lineas erroneas
    qty=$(grep -n - R* | grep Tex | wc -l)
    for ((i=0; i<qty; i++))
    do 
      fin=$(grep -n - R* | grep Tex | cut -d ':' -f2 | head -n1)
Iker Martín's avatar
Iker Martín committed
101
      init=$(($fin - 7))
102
103
      sed -i ''$init','$fin'd' R${realRun}_Global.out

Iker Martín's avatar
Iker Martín committed
104
105
      #Se borran las lineas de los ficheros locales asociados
      aux=$(($fin / 8)) #Utilizado para saber de entre las ejecuciones del fichero, cual es la erronea
106
      fin=$(($aux * 5))
Iker Martín's avatar
Iker Martín committed
107
      init=$(($fin - 4))
108
109
110
111
112
113
      for ((j=0; j<cantidadGrupos; j++)); do
        sed -i ''$init','$fin'd' R${realRun}_G${j}*
      done
    done

    #2 - Reelanzar ejecucion
Iker Martín's avatar
Iker Martín committed
114
115
116
117
118
119
120
121
122
123
124
125
    proc_list=$(grep Procs R${realRun}_Global.out | cut -d '=' -f3 | cut -d ',' -f1)
    proc_parents=$(echo $proc_list | cut -d ' ' -f1)
    proc_children=$(echo $proc_list | cut -d ' ' -f2)
    nodes=8 # Maximo actual
    if [ $proc_parents -gt $proc_children ]
    then
      nodes=$(($proc_parents / 20))
    else
      nodes=$(($proc_children / 20))
    fi

    sbatch -N $nodes $dir$execDir./singleRun.sh config$realRun.ini $index
126
127
    cd $dir$ResultsDir$ResultsDirName

128
  done < errores.txt
Iker Martín's avatar
Iker Martín committed
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
  exit 0
fi

#Comprobar que todas las ejecuciones tienen todas las ejecucciones que tocan
#Solo es necesario comprobar el global.
qty_missing=0
cd $dir$ResultsDir$ResultsDirName
for ((i=1; i<$maxIndex; i++))
do
  qtyEx=$(grep Tex -r Run$i | wc -l)
  if [ $qtyEx -ne $totalEjGrupo ]
  then
    diff=$(($totalEjGrupo-$qtyEx))
    qty_missing=$(($qty_missing+1))
    echo "Faltan en $i, $diff ejecuciones"
  fi
done

if [ $qty_missing -eq 0 ]
then
  echo "Todos los archivos tienen $totalEjGrupo ejecuciones"
150
fi