Skip to content

Latest commit

 

History

History
215 lines (175 loc) · 7.3 KB

File metadata and controls

215 lines (175 loc) · 7.3 KB

Realização de Experimentos Computacionais

#2.0 Passos iniciais

Execute os tutoriais precedentes nesta série:

Caso este tutorial esteja sendo executado com auxílio do container Docker fornecido, execute o comando abaixo logo após iniciar a sessão R e antes de executar os demais passos.

.libPaths(c("~/R", .libPaths()))

#2.1 Definição do Projeto Experimental

Vamos utilizar o pacote DoE.base (descrição mais detalhada) da linguagem R para gerar um projeto experimental fatorial completo combinando os fatores a serem analisados. Como o objetivo nesta série de tutorial é analisar o tempo de execução e speedup em função de dois escalonadores e dois tamanhos de problema, definimos dois fatores: scheduler e size. Testaremos dois escalonadores: random e dmdas e dois tamanhos 4800 e 9600, para um total de 4 combinações possíveis, com três replicações cada.

O comando set.seed(0) (veja abaixo) é utilizado para fixar uma ordem aleatória, permitindo a geração do mesmo ordenamento da bateria experimental. O código abaixo pode ser executado no interpretador R com o pacote DoE.base instalado.

suppressMessages(library(DoE.base))
set.seed(0)
exp_erad <-
    fac.design(factor.names =
                   list(
                       size = c(4800, 9600),
                       scheduler = c("random", "dmdas")),
               replications = 3,
               randomize = TRUE)

print(exp_erad)
creating full factorial with 4 runs ...

   run.no run.no.std.rp size scheduler Blocks
1       1           2.1 9600    random     .1
2       2           1.1 4800    random     .1
3       3           4.1 9600     dmdas     .1
4       4           3.1 4800     dmdas     .1
5       5           1.2 4800    random     .2
6       6           2.2 9600    random     .2
7       7           4.2 9600     dmdas     .2
8       8           3.2 4800     dmdas     .2
9       9           3.3 4800     dmdas     .3
10     10           2.3 9600    random     .3
11     11           4.3 9600     dmdas     .3
12     12           1.3 4800    random     .3
class=design, type= full factorial 
NOTE: columns run.no and run.no.std.rp  are annotation, 
 not part of the data frame

A função fac.design gerou uma sequência aleatória de combinações que serão executadas para que possamos avaliar a influência de cada fator no desempenho da aplicação. Exportaremos o projeto gerado para um arquivo CSV que deverá ser registrado juntamente com os logs contendo os resultados brutos do experimento.

export.design(exp_erad,
              filename = "projeto-experimental",
              type = "csv",
              replace = TRUE)

Vejamos o conteúdo do arquivo CSV criado:

cat projeto-experimental.csv
"name","run.no.in.std.order","run.no","run.no.std.rp","size","scheduler","Blocks"
"1","2",1,"2.1","9600","random",".1"
"2","1",2,"1.1","4800","random",".1"
"3","4",3,"4.1","9600","dmdas",".1"
"4","3",4,"3.1","4800","dmdas",".1"
"5","1",5,"1.2","4800","random",".2"
"6","2",6,"2.2","9600","random",".2"
"7","4",7,"4.2","9600","dmdas",".2"
"8","3",8,"3.2","4800","dmdas",".2"
"9","3",9,"3.3","4800","dmdas",".3"
"10","2",10,"2.3","9600","random",".3"
"11","4",11,"4.3","9600","dmdas",".3"
"12","1",12,"1.3","4800","random",".3"

Para facilitar o processo, este arquivo está registrado aqui, e pode ser baixado no parque computacional da seguinte forma:

wget https://github.com/viniciusvgp/boas-praticas/raw/master/projeto-experimental.csv

#2.2 Script de execução do projeto

Ilustraremos, no exemplo abaixo, um script para execução não-interativa da aplicação. Para efeitos de simplificação, foi gerado previamente um projeto experimental (arquivo projeto-experimental.csv). Veja passo #2.1 para gerá-lo.

Vamos revisar o script que automatiza a execução do experimento.

# ... continuação
# Diretório geral para contar todos os resultados
export EXPEDIR=CHA
# Verificar se projeto experimental é fornecido
PROJETO=projeto-experimental.csv
if [[ -f $PROJETO ]]; then
    echo "O projeto experimental é o seguinte"
    cat $PROJETO | sed -e "s/^/PROJETO|/"
    # Salva o projeto no diretório corrente (da saída)
    cp $PROJETO .
else
    echo "Arquivo $PROJETO está faltando."
    exit
fi
mkdir -p $EXPEDIR
#Criar arquivo de tempos
touch $EXPEDIR/"times"
# Ler o projeto experimental, e para cada experimento
tail -n +2 $PROJETO |
    while IFS=, read -r name runnoinstdorder runno runnostdrp size scheduler Blocks
    do
	# Limpar valores
	export name=$(echo $name | sed 's/\"//g')
	export scheduler=$(echo $scheduler | sed 's/\"//g')
	export size=$(echo $size | sed 's/\"//g')
	export KEY="$name-$scheduler-$size"
	export STARPU_SCHED=$scheduler
	./chameleon/bin/timing/time_dpotrf_tile --nb=960 --n_range=$size:$size:$size --nowarmup -c > $EXPEDIR/${KEY}."stdout"
	out=($(cat $EXPEDIR/${KEY}."stdout" | tail -n 1))
	echo $name","$scheduler","$size","${out[3]} >> $EXPEDIR/"times"
    done

Para facilitar o processo, este arquivo está registrado aqui, e pode ser baixado no ambiente computacional da seguinte forma:

wget https://github.com/viniciusvgp/boas-praticas/raw/master/executa-projeto.sh

Caso este tutorial esteja sendo seguido com auxílio do container Docker fornecido, sugerimos a utilização dos comandos abaixo para a execução do projeto experimental na instalação do Chameleon já disponibilizada no container.

git clone https://github.com/viniciusvgp/boas-praticas.git
cd boas-praticas
spack view soft ./chameleon chameleon@0.9.2
./executa-projeto.sh

Compactar o diretório experimental

Compacte o diretório experimental:

tar cfz exp0.tgz CHA/

Siga para o passo #3 Análise.

Controle e Registro

Veja mais informações aqui (opcional).