-
Clément Delafargue // Divarvel
Un petit script pour faire du Benchmark
Dans le cadre d'un travail demandé en cours de Théorie des Graphes, je devais regarder l'évolution du temps d'exécution d'un programme en fonction d'un paramètre. (Pour les curieux, c'est la k-Coloration d'un Graphe à n Sommets)
Je me suis bricolé un petit script qui fait ça tout seul, et génère un graphe (via l'excellent GnuPlot) (ou affiche les temps d'exécution)
C'est la première fois que je fais un vrai script en Bash (ie un script qui n'est pas 3 commandes mises à la suite), du coup, pour la structure, je me suis inspiré d'un petit script de P4bl0.
Le nom du programme à tester est hard coded, mais ce n'est pas très dur à modifier.
N'hésitez pas à vous en servir si ça vous est utile ;-), de même que toutes les critiques sont les bienvenues (je n'y connais pas grand chose (pour ne pas dire que dalle) en scripts Bash)
L'usage, c'est $[...]:~> ./bench.sh [-i n] p n1 n2 itv graphe.png
n1 valeur de départ du paramètre
n2 valeur finale du paramètre
itv variation du paramètre à chaque pas
graphe.png nom du fichier généré
Pour le -i n, n est le nombre d'exécutions du programme pour chaque point (par défaut, 10)#!/bin/sh
if [ "$1" = "-i" ]; then
ITER="$2"
shift
shift
else
ITER="10"
fi
_bench_usage() {
cat <<USAGE
Usage: bench disp n1 n2 interval : Affiche le temps pris pour traiter des graphes de n sommets, n variant de n1 à n2 par pas de interval.
bench plot n1 n2 interval file: Crée le fichier file, un graphique PNG affichant le temps pris pour traiter des graphes de n sommets,
n variant de n1 à n2 par pas de interval.
bench help: Affiche cette page d'aide.
La première lettre de chaque commande peut être utilisée
Le flag -i permet de spécifier combien de fois un graphe à n sommets doit être calculé.
Valeur par défaut : 10
USAGE
}
_bench_disp() {
i=$1
while [ $i -le $2 ]; do
START=$(date +%s)
_bench_run
STOP=$(date +%s)
echo "Graphe à" $i "sommets :" $[$STOP-$START] "secondes"
i=$[i + $3]
done
}
_bench_plot() {
# Création d'un fichier temporaire contenant les données à afficher
i=$1
echo "# Temps de calcul pour des graphes de "$1" à "$2" sommets (par pas de "$3")" > plot.dat
while [ $i -lt $2 ]; do
START=$(date +%s)
_bench_run
STOP=$(date +%s)
echo $i $[$STOP-$START] >> plot.dat
i=$[i + $3]
done
# Génération du graphe
gnuplot<<EOF
set xlabel 'Nombre de Sommets du graphe'
set ylabel 'Temps de calcul (s)'
set xrange [*:*]
set yrange [*:*]
set grid
set nokey
set output "${4}"
set terminal png small
plot "plot.dat" with linespoints
EOF
# Suppression du fichier temporaire
rm -f plot.dat
}
_bench_run() {
j="0"
while [ $j -lt $ITER ]; do
../source/coloration -r $i -v 1>>coloration.log 2>> error.log
echo "">>coloration.log
echo "">>error.log
j=$[j + 1]
done
}
_bench() {
local ACTION="$1"
shift
case $ACTION in
d|disp) _bench_disp "$@" ;;
p|plot) _bench_plot "$@" ;;
h|help|*) _bench_usage >&2 ;;
esac
}
_bench "$@"
echo
exit 0
C'est facilement modifiable pour faire un comparatif entre deux programmes, à condition de regarder un peu la doc de GnuPlot.
4 commentaires
Un peu de Conky
J'avais déjà parlé de Conky sur ce blog, un outil très geek et très sympa.
Je me suis rebricolé une config hier (pendant que je je faisais un peu de benchmarking), à partir de ce super article
Je n'ai pas encore fini, il faut que je tweake le script qui va chercher les tweets pour le mettre un peu plus joliement en forme, et que je mette la météo.
À part ces deux trois trucs à finir, je suis vraiment content du résultat.
J'ai fait une version plus light pour mon EEE, qui rend vraiment bien niveau sobriété (ça se marie bien à OpenBox)
La prochaine étape, générer des graphes un peu plus complets avec GnuPlot (temps de latence de différents serveurs, le temps que je passe sur l'ordi, le cours du Yen, tout ça...)
aucun commentaire
Algorithmique et Programmation en LaTeX

Cette année, j'ai des cours d'algorithmique et de programmation, du coup je fais mes rapports en LaTeX. Un de mes collègues m'a passé de quoi intégrer du code et des algorithmes dans vos rapports, et ce proprement et joliment.
Listings de Programmation
Pour afficher des bouts de code, rien de bien compliqué. On commence par charger l'environnement listing.
\usepackage{listings}Ensuite, on le configure un peu.
\lstset{
language=C,
keywordstyle=bfseriesttfamilycolor[rgb]{0,0,1},
identifierstyle=ttfamily,
commentstyle=color[rgb]{0.133,0.545,0.133},
stringstyle=ttfamilycolor[rgb]{0.627,0.126,0.941},
showstringspaces=false,
basicstyle=footnotesize,
numberstyle=footnotesize,
numbers=left,
stepnumber=1,
numbersep=10pt,
tabsize=2,
breaklines=true,
breakatwhitespace=false,
aboveskip={1.5baselineskip},
columns=fixed,
upquote=true,
extendedchars=true,
}Rien de bien sorcier dans la config, en bidouillant un peu, on peut obtenir ce que l'on veut (langage, espacements, etc...) Il suffit ensuite d'encapsuler le bout de code qu'on veut afficher dans un environnement lstlisting
\begin{lstlisting}
#include <stdio.h>
int main(){
printf("Hello World");
return 0;
}
\end{lstlisting}Algoritmique
Pour afficher des algorithmes dans vos documents LaTeX, rien de bien compliqué non plus, sauf qu'on va franciser un peu les packages dont on se sert (personnellement je trouve ça affreux, mais on est obligés de faire comme ça en cours :/). On commence par charger les packages.
\usepackage{algorithm,algorithmic};On redéfinit ensuiteles commandes des packages algorithmic et algorithm.
% Francisation des algorithmes
\renewcommand{algorithmicrequire} {textbf{textsc{Entrées:}}}
\renewcommand{algorithmicensure} {textbf{textsc{Sorties:}}}
\renewcommand{algorithmicwhile} {textbf{tant que}}
\renewcommand{algorithmicdo} {textbf{faire}}
\renewcommand{algorithmicendwhile}{textbf{fin tant que}}
\renewcommand{algorithmicend} {textbf{fin}}
\renewcommand{algorithmicif} {textbf{si}}
\renewcommand{algorithmicendif} {textbf{fin si}}
\renewcommand{algorithmicelse} {textbf{sinon}}
\renewcommand{algorithmicthen} {textbf{alors}}
\renewcommand{algorithmicfor} {textbf{pour}}
\renewcommand{algorithmicforall} {textbf{pour tout}}
\renewcommand{algorithmicdo} {textbf{faire}}
\renewcommand{algorithmicendfor} {textbf{fin pour}}
\renewcommand{algorithmicloop} {textbf{boucler}}
\renewcommand{algorithmicendloop} {textbf{fin boucle}}
\renewcommand{algorithmicrepeat} {textbf{répéter}}
\renewcommand{algorithmicuntil} {textbf{jusqu'à}}
\renewcommand{algorithmiccomment} {STATE //}
\newcommand{BEGIN}{STATE fbox{Début}}
\newcommand{END}{STATE fbox{Fin}}
\floatname{algorithm}{Algorithme}Pour intégrer un algo dans son document LaTeX, il ne reste plus qu'à faire comme ceci :
\begin{algorithm}
\caption{Algo de test}
\begin{algorithmic}
\require entiers a, b
\ensure entier d
\begin
\state d $leftarrow (a+b)$
\end
\end{algorithmic}
\end{algorithm}Normalement, vous devriez avoir tout ce qu'il faut pour impressionn^Wfaire plaisir à votre prof d'Algo - Programmation préféré(e). Bon courage et bonne programmation !
Merci à Julien pour m'avoir passé ces bouts de code !
3 commentaires
Victoire !
Les Rats d'Arts ont été élus au BDA de Centrale Nantes dès le premier tour, avec 66% des suffrages. Du coup ça nous évite une journée de travail inutile.
Merci à tous ceux qui nous ont soutenu, encore bravo aux deux autres listes BDA, et bon courage aux deux listes BDS encore en lice.
1 commentaire
Le premier tour est demain
La consécration de ces semaines de folie, c'est demain. Enfin tout à l'heure. Il est même pas 1h du matin, dans mon nouveau référentiel, 1h du matin, c'est tout juste le début de la soirée. 1h du matin, ça veut dire qu'il reste minimum 3 à 4h de boulot avant de se coucher. Aujourd'hui, à 1h du matin, je n'ai plus rien à faire pour les listes. Je peux glander, aller me coucher, whatever. La folie que je viens de traverser s'arrête d'un coup. Plus de nuit blanches, plus de lever à 5h30 du matin pour aller donner des croissants, ou faire des inventaires. Plus de course contre la montre pour trouver le temps de manger, de bosser un peu ses cours ou de lire un bouquin.
Le film de liste BDA a été diffusé aujourd'hui aux élèves de Centrale, celui des listes BDS il y a quelques jours. Les deux ont été appréciés, ça fait plaisir. C'est con à dire, mais malgré tous les efforts déployés pour la Comm', la promotion de notre programme, et pour l'organisation d'événements au sein de l'école, une partie non négligeable des Centraliens va nous juger sur deux choses : Le film de Liste, et les Crêpes. Tant pis pour eux. J'espère juste que c'est pas pour une question de finesse de pâte à crêpes qu'une Liste vaincra une autre.
Sur ce magnifique craquage, je vais rejoindre le lit de camp dans lequel je dors depuis que mon matelas est posé contre un mur, à côté d'un lit trop encombré pour qu'on puisse y poser la moindre chose.
Pour ceux qui veulent jeter un coup d'œil aux films, contactez-moi par DM sur Eklablog ou Twitter ou Facebook ou Whatever.
En attendant, vous pouvez visiter le site des Rats D'arts
1 commentaire
[1] 2 3 4 5 6 ...
Suivre le flux RSS des articles
Suivre le flux RSS des commentaires






Haut de page