130 likes | 234 Views
Pontifical Catholic University of Rio Grande do Sul Porto Alegre, Brazil. T utorial H emps. guilherme.castilhos@acad.pucrs.br fernando.moraes@pucrs.br. Guilherme M. Castilhos Fernando G.Moraes. Module Load. Carregar o módulo HeMPS 5.2 # module load hemps/5.2
E N D
Pontifical Catholic University of Rio Grande do Sul Porto Alegre, Brazil Tutorial Hemps guilherme.castilhos@acad.pucrs.br fernando.moraes@pucrs.br Guilherme M. Castilhos Fernando G.Moraes
Module Load • Carregar o módulo HeMPS 5.2 • # module load hemps/5.2 • Esse comando irá carregar os seguintess módulos: • SystemC 2.2 • Xilinx 13.2 • Modelsim 10.3a • MIPS Cross Compiler v1 • HeMPS 5.2
Module Load function hempslocaldist){ source /soft64/Modules/3.2.8/init/bash source /soft64/source_gaph export JAVA_HOME=/usr/java7/bin export HEMPS_PATH=/home/gcastilhos/hemps5.0/tag/5.0 export PATH=$PATH:$HEMPS_PATH/bin module load ise mips systemc module load modelsim }
Criararquivo de configuração Deve-se criar um arquivo .hmp que irá conter as configurações de projeto.
Ex.: [project name] #nome do projeto que será criado mpeg_6x6_3x3_1 [tasks per pe] # número de tarefas simultâneas executadas pelo processadores 2 [processor description] # o nível de descrição do projeto (sc – SystemC; scmod – SystemC com Modelsim) sc [noc buffer size] # tamanho do buffer do roteador 8 [noc routing algorthm] # tipo de algoritmo usado no roteamento west [dimensions] # dimensão da NoC (X e Y) 6 6 [cluster size] # dimensão dos Clusters (X e Y) 3 3 [masters location] # localização dos mestres dentro dos Clusters (atualmente somente LB) LB [global master] # define qual Cluster terá o Mestre Global 0 [application] # define as aplicações que serão inseridas no MPSoC mpeg [start time] # define em que tempo a aplicação será inserida 1 ms
CriaçãodaAplicação As aplicações são descritas em C. A comunicação entre tarefas de uma aplicação é feita através das primitivas Send() e Receive(). Cada tarefa da aplicação deverá ser um arquivo .C separado Todas as tarefas devem estar em uma pasta com o nome da aplicação.
Ex.: Tarefa A mandando dados para a Tarefa B #include <task.h> # Biblioteca que contém as primitivas da HeMPS. #include <stdlib.h> Message msg; # Cria uma estrutura para as mensagens. int main(){ int i, j,t; Echo("task A started."); # A função Echo() é usado como debug, pois... Echo(itoa(GetTick())); # grava em um arquivo o seu conteudo. for(i=0;i<10;i++){ msg.length = 30; # Seta o tamanho da mensagem. for(j=0;j<30;j++) msg.msg[j]=i; # Gera conteúdo da mensagem. Send(&msg,taskB); # Envia a mensagem criada para a Tarefa B. } Echo(itoa(GetTick())); # A função GetTick() retorna o tempo em ciclos... Echo("task A finished."); # de clock do sistema. exit(); # Função exit() termina a tarefa. }
Ex.: Tarefa B recebendo dados da Tarefa A #include <task.h> #include <stdlib.h> Message msg; int main(){ int i, j,t; Echo("task B started."); Echo(itoa(GetTick())); for(i=0;i<10;i++){ Receive(&msg,taskA); # Recebe as mensagens enviadas pela Tarefa A } Echo(itoa(GetTick())); Echo("task B finished."); exit(); }
Criação e Execução do MPSoC • Criação do MPSoC • # perl $HEMPS_PATH/scripts/hemps.pl exemplo.hmp $path_aplicação -- Cria o MPSoC e compila o Software • Execução do MPSoC • # cd exemplo -- Entrar na pasta do projeto criado • # makeall-- Compila o Hardware • # ./HeMPS -c 50 -- Executa o MPSoC por um tempo de 50 ms • Caso a execução termine com sucesso (todas as aplicações terminem), aparecerá a mensagem “END OF ALL APPLICATIONS!!”
Debug • É possível visualizar o mapeamento das tarefas, bem como o tempo que elas foram alocadas e quando terminaram através de duas maneiras: • um script chamado hemps-read.pl (ele já se encontra no path). Ex.: # hemps-read.pl exemplo.hmp
Debug • O outro método para Debug, é uma ferramenta gráfica no qual se é capaz de visualizar o mapeamento das tarefas e as mensagens trocadas entre processadores. • Um programa em java, localizado na pasta “bin”
Exercício 1. Tarefa A envia um vetor para cada uma das outras tarefas 2. As Tarefas B e C ordenam os vetores A A B C B C 3. As Tarefas B e C enviam os vetores ordenados para a Tarefa A 4. A Tarefa A imprime (Echo) o vetor ordenado A A B C B C • Criar uma aplicação que ordene vetores e que possua 3 tarefas: • Vetor 1: {33;1;21;12;11;18;2} Vetor 2: {55;43;42;67;90;77;40}