Differences

This shows you the differences between the selected revision and the current version of the page.

ipar:modelo 2007/11/19 18:00 ipar:modelo 2007/12/24 17:45 current
Line 1: Line 1:
===== Descrição do modelo de paralelização ===== ===== Descrição do modelo de paralelização =====
-==== Programa a ser paralelizado ====+O framework **ipar** foi desenvolvido em Java com o objetivo de controlar a distribuição de tarefas em aplicações paralelas de alto desempenho. Seu modelo foi desenvolvido tendo como foco plataformas tipo cluster que utilizem sistema operacional Linux sistema de arquivos compartilhado (NFS). O modelo inicial do framework **ipar** utiliza o modelo de paralelismo Bag-of-Tasks. 
 + 
 +Aplicações Bag-of-Tasks são aplicações paralelas cujo resultado final pode ser obtido particionando-se o problema em tarefas independentes. Este modelo apesar de simples, é muito utilizado em várias áreas. 
 + 
 + 
 +===== O framework ===== 
 + 
 +O **ipar** gerencia a chamada de tarefas em nodos do cluster segundo uma lista criada pela aplicação a ser paralelizada (esta será chamada de apenas de aplicação no decorrer do texto). A aplicação consiste de um programa escrito em Java que deve seguir uma estrutura bem definida. Quando o ipar é iniciado, este executa um shell script que deve conter a chamada do clall da aplicação que tiver a função main. Esta estrutura será descrita na seção //Aplicação a ser paralelizada//. 
 + 
 + 
 +==== Estrutura Básica ==== 
 + 
 +Tem uma estrutura básica organizada da seguinte forma: 
 + 
 +Tem uma lista com os nodos a serão utilizados, que é passada como parâmetro de entrada. Sendo o primeiro da lista o nodo onde o gerente está rodando. 
 + 
 +//Lista de nodos//: é um Vector Vectror. Cada posição do Vector "pai" representa um nodo (Vector filho). O Vector filho possui dois elementos: 
 + 
 +  * elemento 1: String: host do nodo 
 +  * elemento 2: Byte: status do nodo (0: aguardando; 1: processando) 
 + 
 +//Lista de Tarefas//: é um vector em que cada elemento é outro vector. No vector principal ("pai"), cada indice corresponde a uma tarefa a ser executada e no vector interno ("filho" - cada indice do vector principal), tem três elementos: 
 + 
 +  * elemento 1: tipo String - corresponde a tarefa. Será passada para o executa quando a tarefa for distribuída 
 +  * elemento 2: tipo byte - corresponde ao status da tarefa.  
 +    * Valor 0: aguardando 
 +    * Valor 1: processando 
 +    * Valor 2: finalizada 
 + 
 +  * elemento 3: id do nodo que esta processando a tarefa, que é o índice do Vector "pai" da lista de nodos 
 + 
 +  * elemento 4: tipo tempo - tempo de inicio da tarefa 
 + 
 +  * elemento 5: tipo tempo - tempo gasto na realização da tarefa 
 + 
 +O identificador da tarefa é o próprio indice do vector principal. 
 + 
 +Este vector é prenchido em tempo de execução quando for chamado o método rmi "listaTarefas([]listaTarefas)". **Deve** ser chamado no início do programa a ser paralelizado(método "inicia()") e **pode** ser chamado pelo método "executa(parametros)" 
 + 
 +De tempos em tempos este vector com as tarefas deve ser gravado em arquivo para que se possa monitorar o status do processamento 
 + 
 +==== Algorítmo: ==== 
 + 
 +início 
 + 
 +  * start do servidor rmi 
 +  * chamada do método "inicia" (pode ser no nodo local ou em outro) 
 +  * aguarda a conexao rmi para informar a lista de tarefas 
 +  * monta a lista de tarefas 
 +  * inicio do escalonador para distribuir as tarefas 
 +  * verifica se tem nodo livre 
 +  * se tem, varre lista de tarefas a procura de uma tarefa a ser distribuída 
 +  * se encontra tarefa, encaminha para o nodo disponível (chama vis rsh um script rum_cliente que deve chamar do metodo "executa" do programa a ser paralelizado.), muda o status do nodo para processando e atribui o id do nodo a tarefa 
 +  * quando todas as tarefas forem finalizadas, chama o metodo "finaliza" do programa a ser paralelizado. 
 + 
 + 
 +===== Aplicação a ser paralelizada =====
Deve ter no mínimo 3 métodos: //inicia(); finaliza(); executa(parametros)// Deve ter no mínimo 3 métodos: //inicia(); finaliza(); executa(parametros)//
Line 11: Line 67:
Qualquer um dos métodos acima, após concluir sua computação, deve fazer uma conexão rmi retornando os resultados de suas computações para o gerente. Apenas uma conexão rmi deve ser realizada por cada computação, e após ela ser feita o programa deve ser finalizado. Qualquer um dos métodos acima, após concluir sua computação, deve fazer uma conexão rmi retornando os resultados de suas computações para o gerente. Apenas uma conexão rmi deve ser realizada por cada computação, e após ela ser feita o programa deve ser finalizado.
-=== Descrição dos métodos ===+==== Descrição dos métodos ====
**Método //inicia()//** **Método //inicia()//**
Line 49: Line 105:
No caso de redistribuíção de tarefas será subentendido que a tarefa foi concluída com exito e foi quebrada em outras subtarefas. No caso de redistribuíção de tarefas será subentendido que a tarefa foi concluída com exito e foi quebrada em outras subtarefas.
-=== O que pode ser uma tarefa ===+==== O que pode ser uma tarefa ====
Um exemplo de tarefa seria uma figura ao qual deve ser aplicado um algorítmo. Portanto o método "inicia" pode particionar uma determinada imagem em várias subimagens para poder computar cada uma em um nodo diferente. Desta maneira o nome de cada subimagem pode ser a tarefa, logo quando o "gerente" distribuir as tarefas ele vai passar o seu nome para o método executa. depois de todas as tarefas terem sido executadas, o método "finaliza" é chamado para computar os resultados parciais que devem obrigatoriamente estarem armazenados em arquivos. Um exemplo de tarefa seria uma figura ao qual deve ser aplicado um algorítmo. Portanto o método "inicia" pode particionar uma determinada imagem em várias subimagens para poder computar cada uma em um nodo diferente. Desta maneira o nome de cada subimagem pode ser a tarefa, logo quando o "gerente" distribuir as tarefas ele vai passar o seu nome para o método executa. depois de todas as tarefas terem sido executadas, o método "finaliza" é chamado para computar os resultados parciais que devem obrigatoriamente estarem armazenados em arquivos.
-==== O programa gerente ==== +==== Modelo de implementação do Programa a ser paralelizado ====
- +
-É quem controla a distribuíção das tarefas nos nodos. Sua impmementação é feita em java. +
- +
-=== estrutura básica === +
- +
-Tem uma estrutura básica organizada da seguinte forma: +
- +
-Tem uma lista com os nodos a serão utilizados, que é passada como parâmetro de entrada. Sendo o primeiro da lista o nodo onde o gerente está rodando. +
- +
-//Lista de nodos//: é um Vector Vectror. Cada posição do Vector "pai" representa um nodo (Vector filho). O Vector filho possui dois elementos: +
- +
-  * elemento 1: String: host do nodo +
-  * elemento 2: Byte: status do nodo (0: aguardando; 1: processando) +
- +
-//Lista de Tarefas//: é um vector em que cada elemento é outro vector. No vector principal ("pai"), cada indice corresponde a uma tarefa a ser executada e no vector interno ("filho" - cada indice do vector principal), tem três elementos: +
- +
-  * elemento 1: tipo String - corresponde a tarefa. Será passada para o executa quando a tarefa for distribuída +
-  * elemento 2: tipo byte - corresponde ao status da tarefa.  +
-  ** Valor 0: aguardando +
-  ** Valor 1: processando +
-  ** Valor 2: finalizada +
- +
-  * elemento 3: id do nodo que esta processando a tarefa, que é o índice do Vector "pai" da lista de nodos +
- +
-  * elemento 4: tipo tempo - tempo de inicio da tarefa +
- +
-  * elemento 5: tipo tempo - tempo gasto na realização da tarefa +
- +
-O identificador da tarefa é o próprio indice do vector principal. +
- +
-Este vector é prenchido em tempo de execução quando for chamado o método rmi "listaTarefas([]listaTarefas)". **Deve** ser chamado no início do programa a ser paralelizado(método "inicia()") e **pode** ser chamado pelo método "executa(parametros)" +
- +
-De tempos em tempos este vector com as tarefas deve ser gravado em arquivo para que se possa monitorar o status do processamento +
- +
-=== Algorítmo: === +
- +
- +
-início +
- +
-  * start do servidor rmi +
-  * chamada do método "inicia" (pode ser no nodo local ou em outro) +
-  * aguarda a conexao rmi para informar a lista de tarefas +
-  * monta a lista de tarefas +
-  * inicio do escalonador para distribuir as tarefas +
-  * verifica se tem nodo livre +
-  * se tem, varre lista de tarefas a procura de uma tarefa a ser distribuída +
-  * se encontra tarefa, encaminha para o nodo disponível (chama vis rsh um script rum_cliente que deve chamar do metodo "executa" do programa a ser paralelizado.), muda o status do nodo para processando e atribui o id do nodo a tarefa +
-  * quando todas as tarefas forem finalizadas, chama o metodo "finaliza" do programa a ser paralelizado. +
- +
-==== Modelo de implementação do Programa a ser paralelizado. ====+
Line 238: Line 244:
</code> </code>
 +
 +
Recent changes RSS feed Creative Commons License Donate Driven by DokuWiki