120 likes | 211 Views
Implementação de um algoritmo de imagens em forma distribuída utilizando Qt /C++. André Felipe Bitencourt Moraes. O Que é Qt ?. Criada pela TrollTech Versão 4.0 lançada em 2004 É a base do KDE Adquirida pela Nokia em 2009 Biblioteca para C++ (mas há o PyQt)
E N D
Implementação de um algoritmo de imagens em forma distribuída utilizando Qt/C++ André Felipe Bitencourt Moraes
O Que é Qt? • Criada pela TrollTech • Versão 4.0 lançada em 2004 • É a base do KDE • Adquirida pela Nokia em 2009 • Biblioteca para C++ (mas há o PyQt) • É intrusiva na linguagem, é necessário ferramentas próprias para compilação. • Estende as funcionalidades do C++. • Foi criada uma IDE própria. (QT Creator) • Roda em Windows, Linux, MacOS, Symbian e há um beta para Android).
Desafios do Algoritmo • Caracteres tem alturas iguais: • Linhas podem ser calculadas simultaneamente devido a independência de dados. • Caracteres tem espaçamentos horizontais diferentes. • É necessário avaliar em conjuntos de caracteres para a linha. Uma Hash foi utilizada que faz cache de resultados intermediários • Avaliação do melhor caractere e sequencia: • Foi utilizado uma métrica para avaliar a menor distancia entre as cores dos pixels.
Paralelismo • Verificar o nº de threads que a máquina pode executar simultaneamente. • Cada linha é executada por uma thread. Quando terminada, uma nova linha é processada. • Threads são sincronizadas com a thread principal, assim é possível as operações de Parar ou avisar o resultado.
Qt e sincronização de Threads 1 • Um dos fundamentos do Qt é o Signal Slot: • O programador declara os signals que os objetos possuem bem como os slots (que são nada mais que funções marcadas e sem retorno). • A ferramenta QMAKE durante a compilação gera os stubs desses sinais e funções. • Durante a execução pode ser fazer conexões e desconexões entre signal-slot ou signal-signal. Uma conexão só é feita se os parâmetros são corretos.
Qt e sincronização de Threads 2 • Objetos do QT são pertencentes a threads. • Quando é emitido um sinal, a conexão verifica se o receptor pertence a mesma thread, e executa como se fosse uma função normal. • Quando o receptor é de uma thread diferente, a mensagem é colocada numa fila e o slot só é chamado pelo receptor quando estiver livre. • QT suporta também: • Mutex, Pool de Threads (utilizados) • Semáforos, Inteiros e Ponteiros atômicos. • Como alto nivel: Computação Assincrona e MapReduce
Distruibuição de tarefas • Máquinas se conectam via TCP. • Quando uma das máquinas precisa executar uma tarefa, ela atribui trabalhos (linhas) as máquinas conectadas. • É enviado todos os dados necessários a execução da tarefa. • O receptor cria uma thread e executa a tarefa. • Quando a tarefa termina, verifica-se que se tratava de uma tarefa remota então é devolvido o resultado. • Ao receber a resposta, verifica se a resposta é a do problema corrente.
Escalonador e tolerância a falhas • Ao iniciar o processo, o host escolhe as tarefas. • O nº de tarefas atribuídas a cada maquina é igual ao nº de processadores lógicos da máquina. • Quando uma máquina estiver livre, é dado um trabalho que ainda não foi atribuído a ela, e que foi menos atribuídos a outras máquinas. • Assim, garante-se tolerância a falhas caso alguma máquina pare de responder. • A interface do usuário mostra qual máquina terminou o trabalho.