Suporte de Computações Octave Independentes em Multiprocessadores de Memória Partilhada
Autor(a) principal: | |
---|---|
Data de Publicação: | 2023 |
Tipo de documento: | Dissertação |
Idioma: | por |
Título da fonte: | Repositório Científico de Acesso Aberto de Portugal (Repositórios Cientìficos) |
Texto Completo: | http://hdl.handle.net/10362/160378 |
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. |
id |
RCAP_b91e52dde31f7c5180c810aa0eb3228e |
---|---|
oai_identifier_str |
oai:run.unl.pt:10362/160378 |
network_acronym_str |
RCAP |
network_name_str |
Repositório Científico de Acesso Aberto de Portugal (Repositórios Cientìficos) |
repository_id_str |
7160 |
spelling |
Suporte de Computações Octave Independentes em Multiprocessadores de Memória PartilhadaOctavePralelizaçãoC++WorkersDomínio/Área Científica::Engenharia e Tecnologia::Engenharia Eletrotécnica, Eletrónica e InformáticaO 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.The objective of this project is to develop a library for Octave capable of parallelizing functions on shared memory systems. In this case, the main problem that the library is addressing is optimization algorithms for functions without derivatives. Octave is open source, which means anyone can create a library for any problem they may have, which is why there are several, including libraries that run Octave functions in parallel, such as the ’parallel’ package. However, this library was mainly developed to parallelize using different machines in distributed systems, resulting in a very simple shared memory parallelization system where processes are created, the function is run once, and the results are returned. Therefore, for this project, I created a library from scratch. It differs from what already exists because it works more like a worker pool, that is, it creates the required number of workers that are infinitely waiting to receive new jobs. In the context of this project, jobs are a new set of input values that workers receive to run the function. The library supports functions implemented in Octave (interpreted functions) and functions implemented in C/C++ (compiled functions) compiled into dynamic libraries with two different interfaces, but used in the same way. To implement the library, I used octfiles, which are pieces of C++ code compiled with the Octave API and can be used as regular functions in Octave. In addition to this, I used standard C libraries and Linux systems: C++11 threads and the Linux fork system call, for parallelization. Threads were used in the interface for compiled functions, and processes were used in the interface for interpreted functions. To verify the effectiveness and correctness of the library, I modified an optimization algorithm named BoostDMS to use my library to run the step that evaluates the function with the various generated input values concurrently instead of sequentially. I ran this modified algorithm on machines with processors with multiple computing cores and obtained positive results. The results show a tendency to decrease the computation time of the algorithm with the increase of workers used, maximizing when the number of workers is equal to or greater than the number of generated values to analyze.Medeiros, PedroRUNFreitas, Duarte Filipe de2023-11-23T18:23:27Z2023-072023-07-01T00:00:00Zinfo:eu-repo/semantics/publishedVersioninfo:eu-repo/semantics/masterThesisapplication/pdfhttp://hdl.handle.net/10362/160378porinfo:eu-repo/semantics/openAccessreponame:Repositório Científico de Acesso Aberto de Portugal (Repositórios Cientìficos)instname:Agência para a Sociedade do Conhecimento (UMIC) - FCT - Sociedade da Informaçãoinstacron:RCAAP2024-03-11T05:43:04Zoai:run.unl.pt:10362/160378Portal AgregadorONGhttps://www.rcaap.pt/oai/openaireopendoar:71602024-03-20T03:58:00.767663Repositório Científico de Acesso Aberto de Portugal (Repositórios Cientìficos) - Agência para a Sociedade do Conhecimento (UMIC) - FCT - Sociedade da Informaçãofalse |
dc.title.none.fl_str_mv |
Suporte de Computações Octave Independentes em Multiprocessadores de Memória Partilhada |
title |
Suporte de Computações Octave Independentes em Multiprocessadores de Memória Partilhada |
spellingShingle |
Suporte de Computações Octave Independentes em Multiprocessadores de Memória Partilhada Freitas, Duarte Filipe de Octave Pralelização C++ Workers Domínio/Área Científica::Engenharia e Tecnologia::Engenharia Eletrotécnica, Eletrónica e Informática |
title_short |
Suporte de Computações Octave Independentes em Multiprocessadores de Memória Partilhada |
title_full |
Suporte de Computações Octave Independentes em Multiprocessadores de Memória Partilhada |
title_fullStr |
Suporte de Computações Octave Independentes em Multiprocessadores de Memória Partilhada |
title_full_unstemmed |
Suporte de Computações Octave Independentes em Multiprocessadores de Memória Partilhada |
title_sort |
Suporte de Computações Octave Independentes em Multiprocessadores de Memória Partilhada |
author |
Freitas, Duarte Filipe de |
author_facet |
Freitas, Duarte Filipe de |
author_role |
author |
dc.contributor.none.fl_str_mv |
Medeiros, Pedro RUN |
dc.contributor.author.fl_str_mv |
Freitas, Duarte Filipe de |
dc.subject.por.fl_str_mv |
Octave Pralelização C++ Workers Domínio/Área Científica::Engenharia e Tecnologia::Engenharia Eletrotécnica, Eletrónica e Informática |
topic |
Octave Pralelização C++ Workers Domínio/Área Científica::Engenharia e Tecnologia::Engenharia Eletrotécnica, Eletrónica e Informática |
description |
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. |
publishDate |
2023 |
dc.date.none.fl_str_mv |
2023-11-23T18:23:27Z 2023-07 2023-07-01T00:00:00Z |
dc.type.status.fl_str_mv |
info:eu-repo/semantics/publishedVersion |
dc.type.driver.fl_str_mv |
info:eu-repo/semantics/masterThesis |
format |
masterThesis |
status_str |
publishedVersion |
dc.identifier.uri.fl_str_mv |
http://hdl.handle.net/10362/160378 |
url |
http://hdl.handle.net/10362/160378 |
dc.language.iso.fl_str_mv |
por |
language |
por |
dc.rights.driver.fl_str_mv |
info:eu-repo/semantics/openAccess |
eu_rights_str_mv |
openAccess |
dc.format.none.fl_str_mv |
application/pdf |
dc.source.none.fl_str_mv |
reponame:Repositório Científico de Acesso Aberto de Portugal (Repositórios Cientìficos) instname:Agência para a Sociedade do Conhecimento (UMIC) - FCT - Sociedade da Informação instacron:RCAAP |
instname_str |
Agência para a Sociedade do Conhecimento (UMIC) - FCT - Sociedade da Informação |
instacron_str |
RCAAP |
institution |
RCAAP |
reponame_str |
Repositório Científico de Acesso Aberto de Portugal (Repositórios Cientìficos) |
collection |
Repositório Científico de Acesso Aberto de Portugal (Repositórios Cientìficos) |
repository.name.fl_str_mv |
Repositório Científico de Acesso Aberto de Portugal (Repositórios Cientìficos) - Agência para a Sociedade do Conhecimento (UMIC) - FCT - Sociedade da Informação |
repository.mail.fl_str_mv |
|
_version_ |
1799138161679400960 |