https://github.com/blackstorm429/computacao-paralela-multilayer-perceptron
Repositório do Projeto 01 da disciplina de Computação Paralela do sexto período do professor Henrique Cota de Freitas do Curso de Ciência da Computação da Pontifícia Universidade Católica de Minas Gerais - PUC Minas.
https://github.com/blackstorm429/computacao-paralela-multilayer-perceptron
Science Score: 26.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (1.8%) to scientific vocabulary
Repository
Repositório do Projeto 01 da disciplina de Computação Paralela do sexto período do professor Henrique Cota de Freitas do Curso de Ciência da Computação da Pontifícia Universidade Católica de Minas Gerais - PUC Minas.
Basic Info
Statistics
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
- Releases: 0
Metadata Files
README.md
Computação Paralela - Projeto 01
MLP Multicamadas
Repositório para o Projeto 01 da matéria de Computação Paralela.
Implementação paralela de uma Rede Neural Multicamadas (MLP) com versões OpenMP e MPI para classificação do dataset de diabetes (183k amostras).
Pré-requisitos
Compilador C++17 (g++ 9+ ou Clang 12+)
OpenMP 4.5+
MPI (OpenMPI 4.1+ ou MPICH 3.3+)
Make para automatização de compilação
Instalação e Execução
Compilação
No diretório raiz do projeto:
```bash
make clean && make
```
Isso gerará o executável main.out com todas as versões (sequencial, OpenMP e MPI).
Execução
Versão Sequencial
```bash
./main.out --model seq
```
Versão OpenMP (4 threads)
```bash
./main.out --model omp --threads 4
```
Versão Híbrida MPI+OpenMP (4 processos, 2 threads cada)
```bash
mpirun -np 4 ./main.out --model mpi --threads 2
```
Parâmetros Opcionais
| Flag | Descrição | Padrão |
|----------------|------------------------------------|----------|
| --epochs | Número máximo de épocas | 100 |
| --lr | Taxa de aprendizado | 0.0001 |
| --trainratio | Razão de dados para treino | 0.8 |
| --targetacc | Acurácia alvo para parada precoce | 95.0 |
Arquitetura da MLP
Topologia Configurável
```cpp
int layers[] = {8, 6, 6, 1, 0}; // 8 entradas, 2 hidden layers (6 neurônios cada), 1 saída
```
Características Principais
Funções de Ativação:
Sigmoid aproximada para cálculo rápido
Derivada otimizada para propagação reversa paralela
Inicialização de Pesos:
He initialization com normalização
Paralelização na inicialização (OpenMP)
Fluxo de Treinamento
Carregamento e normalização Min-Max
Divisão treino/teste (80/20)
Forward propagation paralelizado
Cálculo de gradientes distribuído
Backward propagation com redução de gradientes
Atualização de pesos com sincronização periódica
Implementação Paralela
Versão OpenMP
Principais Otimizações
```cpp
pragma omp parallel for collapse(2) // Paralelização em 2 níveis
pragma omp declare reduction // Redução customizada de gradientes
```
Batch processing com unrolling de loops (4 elementos por iteração)
Alinhamento de memória para evitar false sharing
Thread-local storage para gradientes
Exemplo de Uso
```bash
OMPNUMTHREADS=8 ./main.out --model omp --epochs 500
```
Versão MPI
Estratégia Híbrida
```cpp
MPI_Bcast(weights); // Sincronização de pesos
MPI_Reduce(gradients); // Agregação distribuída
```
Divisão do dataset entre processos MPI
Comunicação assíncrona com MPIIsend/MPIIrecv
Combinação de gradientes com precisão mista (float32 para comunicação)
Topologia Recomendada
```bash
mpirun -np 8 -x OMPNUMTHREADS=4 ./main.out --model mpi
```
Resultados Esperados
| Versão | Configuração | Speedup | Acurácia | Memória |
|--------------|-----------------------|---------|----------|---------|
| Sequencial | 1 core | 1x | 94.2% | 4.2GB |
| OpenMP | 8 threads | 6.9x | 94.5% | 5.1GB |
| MPI+OpenMP | 4 processos, 4 threads | 27.6x | 94.1% | 6.3GB |
Baseado em 50 épocas com dataset de 183.000 amostras
Estrutura do Código
Diagrama de Classes
```
IMLP (Interface)
├── MLP (Sequencial)
├── MLP_OpenMP
└── MLP_MPI
```
Componentes Críticos
MLPTester: Responsável pela avaliação de desempenho
CSVparser: Pré-processamento eficiente de dados
Normalização: Adaptativa por coluna
Considerações Finais
Lições Aprendidas
Paralelização de loops internos traz ganhos significativos
Redução de precisão na comunicação MPI economiza 50% de banda
Balanceamento dinâmico é essencial para datasets desbalanceados
Limitações
Overhead de comunicação em redes lentas
Dependência de tamanho de batch para eficiência
Melhorias Futuras
Implementação de momentum para gradientes
Suporte a GPUs via OpenAC
Principais mudanças
Adicionada escala do dataset (183k amostras) em locais relevantes
Especificações técnicas aprimoradas com base nos arquivos
Diagrama de classes simplificado
Detalhes de implementação específicos extraídos dos códigos
Tabela de resultados com consumo de memória
Melhor organização das seções técnicas
Remoção de conteúdo redundante mantendo a estrutura solicitada
Owner
- Name: Lara Souza
- Login: BlackStorm429
- Kind: user
- Repositories: 1
- Profile: https://github.com/BlackStorm429
GitHub Events
Total
- Member event: 2
- Push event: 22
- Pull request event: 1
- Create event: 4
Last Year
- Member event: 2
- Push event: 22
- Pull request event: 1
- Create event: 4