Publicação

Suporte de Computações Octave Independentes em Multiprocessadores de Memória Partilhada

Ver documento

Detalhes bibliográficos
Resumo:O objetivo deste projeto é desenvolver uma biblioteca para o Octave capaz de paralelizar funções em sistemas de memória partilhada, neste caso, o problema principal que a biblioteca está a resolver são algoritmos de otimização de funções sem derivadas. O Octave é open source, ou seja, qualquer pessoa pode criar uma biblioteca para qualquer problema que tenha, por isso existem várias, nomeadamente bibliotecas que correm fun- ções Octave em paralelo, como a parallel package. No entanto, esta biblioteca foi desenvolvida principalmente para paralelizar usando diferentes máquinas em sistemas distribuídos resultando num sistema de paralelização de memória partilhada bastante simples onde apenas se cria os processos, corre-se a função uma vez e devolve-se os resultados. Portanto para este projeto criei uma biblioteca do zero. Difere da que já existe porque funciona mais como uma worker pool, isto é, cria o número requerido de workers que ficam inifinitamente à espera de receber novos jobs, jobs, no contexto deste projeto são um novo conjunto de valores de entrada que os workers recebem para correr a função. A biblioteca tem suporte para funções implementadas em Octave (funções interpretadas) e funções implementadas em C/C++ (funções compiladas) compiladas em bibliotecas dinâmicas com duas interfaces diferentes, mas usadas da mesma maneira. Para implementar a biblioteca usei octfiles que são pedaços de código C++ compilados com o API do Octave e podem ser usados como funções normais no Octave. Além disso, usei bibliotecas padrão do C e sistemas do Linux: os threads do C++11 e a system call fork do Linux para a paralelização. Os threads foram usados na interface para funções compiladas e os processos para a interface de funções interpretadas. Para verificar a eficácia e correção da biblioteca modifiquei um algoritmo de otimização BoostDMS para, no passo que avalia a função com os vários valores de entrada gerados, sequencialmente, usar a minha biblioteca e correr este passo concorrentemente e corri-o em máquinas com processadores de vários núcleos de computação onde obti resultados positivos. Os resultados mostram uma têndencia a diminuir o tempo de computação do algoritmo com o aumento de workers utilizados maximizando quando o número de workers é igual ou superior ao número valores gerados para analisar.
Autores principais:Freitas, Duarte Filipe de
Assunto:Octave Pralelização C++ Workers
Ano:2023
País:Portugal
Tipo de documento:dissertação de mestrado
Tipo de acesso:acesso aberto
Instituição associada:Universidade Nova de Lisboa
Idioma:português
Origem:Repositório Institucional da UNL
Descrição
Resumo:O objetivo deste projeto é desenvolver uma biblioteca para o Octave capaz de paralelizar funções em sistemas de memória partilhada, neste caso, o problema principal que a biblioteca está a resolver são algoritmos de otimização de funções sem derivadas. O Octave é open source, ou seja, qualquer pessoa pode criar uma biblioteca para qualquer problema que tenha, por isso existem várias, nomeadamente bibliotecas que correm fun- ções Octave em paralelo, como a parallel package. No entanto, esta biblioteca foi desenvolvida principalmente para paralelizar usando diferentes máquinas em sistemas distribuídos resultando num sistema de paralelização de memória partilhada bastante simples onde apenas se cria os processos, corre-se a função uma vez e devolve-se os resultados. Portanto para este projeto criei uma biblioteca do zero. Difere da que já existe porque funciona mais como uma worker pool, isto é, cria o número requerido de workers que ficam inifinitamente à espera de receber novos jobs, jobs, no contexto deste projeto são um novo conjunto de valores de entrada que os workers recebem para correr a função. A biblioteca tem suporte para funções implementadas em Octave (funções interpretadas) e funções implementadas em C/C++ (funções compiladas) compiladas em bibliotecas dinâmicas com duas interfaces diferentes, mas usadas da mesma maneira. Para implementar a biblioteca usei octfiles que são pedaços de código C++ compilados com o API do Octave e podem ser usados como funções normais no Octave. Além disso, usei bibliotecas padrão do C e sistemas do Linux: os threads do C++11 e a system call fork do Linux para a paralelização. Os threads foram usados na interface para funções compiladas e os processos para a interface de funções interpretadas. Para verificar a eficácia e correção da biblioteca modifiquei um algoritmo de otimização BoostDMS para, no passo que avalia a função com os vários valores de entrada gerados, sequencialmente, usar a minha biblioteca e correr este passo concorrentemente e corri-o em máquinas com processadores de vários núcleos de computação onde obti resultados positivos. Os resultados mostram uma têndencia a diminuir o tempo de computação do algoritmo com o aumento de workers utilizados maximizando quando o número de workers é igual ou superior ao número valores gerados para analisar.