Thursday, July 8, 2010

Script usado na aula de MC723. Exemplo de uso do Dialog (janelas modo texto para linux).

#!/bin/bash


if [ "$1" = '' ];
then
resposta=$(dialog --stdout \
--backtitle 'MC723 - Laboratório de projetos de sistemas computacionais' \
--title 'Lab 2 - Otimizacao GCC' --menu 'Escolha uma opcao' 0 0 0 \
c 'Compilar arquivo unico' \
c2 'Compilar separado' \
t 'Testar Otimizacao Genérica' \
tm 'Testar Otimizacao Mtune' \
ts 'Testar Compilacao Separada' \
tn 'Testar numero de primos de 1 a N' \
tp 'Testar utilizando OpenMP' \
d 'Remover Executaveis' );
else
resposta=$1;
fi


TIMEFORMAT=$' %U ';
MARCH=$'core2';

#case $1 in
case $resposta in

c) gcc primo.c -o primo
gcc primon.c -mtune=$MARCH -O3 -o primon
gcc primoi.c -pg -mtune=$MARCH -O3 -o primoi
gcc primop.c -march=$MARCH -fopenmp -o primop
gcc primop.c -march=$MARCH -o primosmp
progress=0;
(for t in 0 1 2 3; do
gcc -O$t primo.c -o primo_u_o_$t
gcc -O$t -mtune=$MARCH primo.c -o primo_u_o_m$t
progress=`expr $progress + 25`
echo $progress
done) | dialog \
--backtitle 'MC723 - Laboratório de projetos de sistemas computacionais' \
--title 'Lab 2 - Otimizacao GCC' --gauge 'Compilando arquivos fontes' 6 40 0
;;

c2) clear
OPTFLAGS="-O1"
export OPTFLAGS;
make -e
echo "Compilado separadamente em 2 com a melhor otimizacao";;

t)
if [ -e primo ]; then
clear
echo "Tempos de execução";
printf "Sem otimização, Otimizacao O1, Otimizacao 02, Otimizacao 03\n";
for i in $(seq 10); do
{ time ./primo_u_o_0 > /dev/null ; \
time ./primo_u_o_1 > /dev/null ; \
time ./primo_u_o_2 > /dev/null ; \
time ./primo_u_o_3 > /dev/null ; \
} 2> /dev/stdout | sed 'N;s/\n/\,/;N;s/\n/\,/;N;s/\n/\,/';
done
else
dialog --backtitle 'MC723 - Laboratório de projetos de sistemas computacionais' \
--title 'Lab 2 - Otimizacao GCC' --infobox 'Compile os fonte usando compila.sh c' 3 43
fi;;

tm)
if [ -e primo_u_o_m0 ]; then
clear
echo "Tempos de execução utilizando Mtune";
printf "Sem otimização, Otimizacao O1, Otimizacao 02, Otimizacao 03\n";
for i in $(seq 10); do
{ time ./primo_u_o_m0 > /dev/null ; \
time ./primo_u_o_m1 > /dev/null ; \
time ./primo_u_o_m2 > /dev/null ; \
time ./primo_u_o_m3 > /dev/null ;\
} 2> /dev/stdout | sed 'N;s/\n/\,/;N;s/\n/\,/;N;s/\n/\,/';
done
else
dialog --backtitle 'MC723 - Laboratório de projetos de sistemas computacionais' \
--title 'Lab 2 - Otimizacao GCC' --infobox 'Compile os fonte usando compila.sh c' 3 43
fi;;

ts)
if [ -e primo_separado ]; then
clear;
echo "Tempos de execucao compilado em arquivos separados com 03 mtune=native";
for i in $(seq 10); do
time ./primo_separado > /dev/null
done
else
dialog --backtitle 'MC723 - Laboratório de projetos de sistemas computacionais' \
--title 'Lab 2 - Otimizacao GCC' --infobox 'Compile os fonte usando compila.sh c2' 3 43
fi;;

tn)
if [ -e primon ]; then
clear
TIMEFORMAT=$' %U';
# N=104395301;
N=80000;
echo "Tempos [ Numero de primos ] ";
printf "Junto, Separado, Impares, Separado Impares\n";
for i in $(seq 10); do
{ time ./primon $N > /dev/null ; \
time ./primon_separado $N > /dev/null ; \
time ./primoi $N > /dev/null ; \
time ./primoi_separado $N > /dev/null ; \
} 2> /dev/stdout | sed 'N;s/\n/\,/;N;s/\n/\,/;N;s/\n/\,/';
done
else
dialog --backtitle 'MC723 - Laboratório de projetos de sistemas computacionais' \
--title 'Lab 2 - Otimizacao GCC' --infobox 'Compile os fonte usando compila.sh c' 3 43
fi;;

tp)
#if [-e primop]; then
clear
TIMEFORMAT=$' %U , %R ';
printf "Junto User, Junto Real, Junto User, Junto Real, Separado User, Separado Real, Separado User, Separado Real\n";
for i in $(seq 10); do
{ time ( ./primop 80000 > /dev/null ) ; \
time ( ./primosmp 80000 > /dev/null ) ; \
time ( ./primoi_separadoMP 80000 > /dev/null ) ;\
time ( ./primoi_separadoSMP 80000 > /dev/null ) ;\
} 2> /dev/stdout | sed 'N;s/\n/\ ,/;N;s/\n/\,/;N;s/\n/\,/';
done
#else
# dialog --backtitle 'MC723 - Laboratório de projetos de sistemas computacionais' \
# --title 'Lab 2 - Otimizacao GCC' --infobox 'Compile os fonte usando compila.sh c' 3 43
#fi ;;
;;

d)
if [ -e primo ] || [ -e primo_separado ]; then
dialog --stdout \
--backtitle 'MC723 - Laboratório de projetos de sistemas computacionais' \
--title 'Lab 2 - Otimizacao GCC' --yesno 'Tem certeza que deseja remover os arquivos ?' \
0 0 && resp=1 || resp=0
if [ $resp = 1 ]; then
rm -f primo;
rm -f primon;
rm -f primoi;
rm -f primop;

make clean
echo "Removendo arquivo primo"
progress=0;
(for t in 0 1 2 3; do
rm -f primo_u_o_$t;
rm -f primo_u_o_m$t
progress=`expr $progress + 25`;
echo $progress;
done) | dialog --backtitle 'MC723 - Laboratório de projetos de sistemas computacionais' \
--title 'Lab 2 - Otimizacao GCC' --gauge 'Apagando os arquivos' 6 40 0
fi
else
dialog --backtitle 'MC723 - Laboratório de projetos de sistemas computacionais' \
--title 'Lab 2 - Otimizacao GCC' --infobox 'Nao foram encontrado executaveis' 3 43
fi;;
esac


# for t in 0 1 2 3; do
# printf "O%d / mtune (s):\n" $t;
# for i in $(seq 10); do
# time ./primo_u_o_m$t > /dev/null
# done
# done;;

No comments:

Blog Archive