diff --git a/communication_techniques/.gitignore b/communication_techniques/.gitignore index 8e16f6e..798d385 100644 --- a/communication_techniques/.gitignore +++ b/communication_techniques/.gitignore @@ -1 +1,2 @@ include/specific_comm.h +logs/* diff --git a/communication_techniques/Makefile b/communication_techniques/Makefile index 65c4781..ee50b7c 100644 --- a/communication_techniques/Makefile +++ b/communication_techniques/Makefile @@ -4,6 +4,7 @@ BINDIR=bin SRCDIR=src INCDIR=include LIBDIR=lib +LOGDIR=logs LOCALDIR=$(HOME)/local PAPIHIGHLEVELLIBDIR=lib PAPIHIGHLEVELINCDIR=include @@ -66,6 +67,9 @@ clean: rm -f $(INCDIR)/specific_comm.h rm -rf $(OBJDIR) +logclean: + rm -rf $(LOGDIR) + distclean: clean rm -rf $(BINDIR) $(LIBDIR) diff --git a/communication_techniques/lancement.sh b/communication_techniques/lancement.sh new file mode 100755 index 0000000..d6c5c06 --- /dev/null +++ b/communication_techniques/lancement.sh @@ -0,0 +1,111 @@ +#! /bin/bash + +set -u + +# Files and directories +binDir="bin" +thisScript="$0" + +# Param +binList="asm_cache_comm c_cache_comm pipe_comm shared_mem_comm shared_mem_opt_comm jikes_barrier_comm" # Type de communication +nbProdList="1" # Nombre de cores producteurs +typeProdList="none matrice" # Methode pour produire les valeurs +typeCacheList="L2 mem" # Niveau de cache partage + +# Const +nbIter="5000000" # Nb de lignes produites +sizeBuf="1" # En nombre de lignes de cache + +# Nom generique des fichiers de log +logFileName="\$perfDirName/cache_\$typeCache-nbProd_\$nbProd-typeProd_\$typeProd-nbIter_\$nbIter-\$bin" +expDirName="logs" +perfDirName="$expDirName/perfCommMulti-`date +'%F-%Hh%Mm%S'`" + +if [ -n $LD_LIBRARY_PATH ] +then + LD_LIBRARY_PATH_LEFT="${LD_LIBRARY_PATH}" + while [ -n "${LD_LIBRARY_PATH_LEFT}" ] + do + aLibDir="${LD_LIBRARY_PATH_LEFT%%:*}" + if [ -x ${aLibDir}/libpapi.so ] + then + papiLibPresent="1"; + fi + if [ -x ${aLibDir}/libpapihighlevel.so ] + then + papiHighLevelLibPresent="1"; + fi + if [ -n "${papiLibPresent}" -a -n "${papiHighLevelLibPresent}" ] + then + break + fi + LD_LIBRARY_PATH_LEFT="${LD_LIBRARY_PATH#*:}" + done + if [ -z "${papiLibPresent}" -o -z "${papiHighLevelLibPresent}" ] + then + echo "Libraries needed for this bench not accessible by \$LD_LIBRARY_PATH" > /dev/stderr # Is there a better way to display something on stderr ? + exit 1 + fi +else + echo "Libraries needed for this bench not accessible by \$LD_LIBRARY_PATH" > /dev/stderr # Is there a better way to display something on stderr ? + exit 1 +fi +unset papiLibPresent +unset papiHighLevelLibPresent +unset LD_LIBRARY_PATH_LEFT + +[ -d "$expDirName" ] || mkdir "$expDirName" +[ -d "$perfDirName" ] || mkdir "$perfDirName" + +function_run () { + case $typeProd in + "none" ) optTypeProd="" ;; + "matrice" ) optTypeProd="-c $thisScript" ;; + * ) exit 1 ;; + esac + case $typeCache in + "mem" ) optTypeCache="-s 0" ;; + "L2" ) optTypeCache="-s 2" ;; + * ) exit 1 ;; + esac + + make $binDir/$bin + echo "On lance : \"${bin##*/} $optTypeCache $optTypeProd -p $nbProd -n $nbIter\"" + beginingDate=`date +%s` + + ( $binDir/$bin $optTypeCache $optTypeProd -p $nbProd -n $nbIter || echo "echec experience" ) | eval tee $logFileName + endDate=`date +%s` + duration_sec=`expr \( $endDate - $beginingDate \) % 60` + duration_min=`expr \( $endDate - $beginingDate \) / 60` + duration_hrs=`expr $duration_min / 60` + duration_min=`expr $duration_min % 60` + + echo "Fin de l'experience : `date +'%H:%M:%S (%d/%m/%y)'`" + echo "La duree est de : ${duration_hrs}hrs ${duration_min}min ${duration_sec}sec" + echo "" +} + + + +echo -e "On commence les perfs\n" +globalBeginingDate=`date +%s` + +for nbProd in $nbProdList ; do + for typeProd in $typeProdList; do + for typeCache in $typeCacheList ; do + for bin in $binList ; do + function_run + done + done + done +done + +globalEndDate=`date +%s` +globalDuration_sec=`expr \( $globalEndDate - $globalBeginingDate \) % 60` +globalDuration_min=`expr \( $globalEndDate - $globalBeginingDate \) / 60` +globalDuration_hrs=`expr $globalDuration_min / 60` +globalDuration_min=`expr $globalDuration_min % 60` + +echo "Fin de la serie d'experience : `date +'%H:%M:%S (%d/%m/%y)'`" +echo "La duree totale est de : ${globalDuration_hrs}hrs ${globalDuration_min}min ${globalDuration_sec}sec" +