Este projeto apresenta a implementação e análise de desempenho do algoritmo Merge Sort, explorando o paralelismo em nível de processo (multiprocessing) e a portabilidade via Containers (Docker).
- Analisar dependências de dados (RAW, WAR, WAW) em algoritmos computacionais.
- Implementar e comparar estratégias de execução sequencial e paralela.
- Validar a portabilidade e desempenho em ambiente Local (Linux/openSUSE) e Nuvem (Google Cloud Shell) via Docker.
Com base no relatório técnico, foram identificados:
- RAW (Read After Write): A função
mergeaguarda a escrita das sublistas pelas chamadas recursivas. - WAR (Write After Read): Controle de índices para garantir que a leitura ocorra antes da atualização.
- WAW (Write After Write): Escritas sucessivas na lista de resultado que exigem sincronização na intercalação final.
O projeto foi containerizado para garantir que a execução seja idêntica em qualquer ambiente (Ubuntu, openSUSE ou Nuvem).
# 1. Build da imagem
docker build -t g6-aed-mergesort .
# 2. Execução do container
docker run --name g6-execucao g6-aed-mergesortO código utiliza o multiprocessing para escalar conforme os núcleos da CPU:
- Split: Divisão do array em fatias baseada no
cpu_count(). - Pool de Processos: Ordenação independente de cada fatia.
- Sincronização: Intercalação final realizada pelo processo pai após a barreira de sincronização.
- 4769f5f: Implementação básica sequencial.
- d1891b0: Adição de métricas de tempo.
- 9e9a1e2: Integração de
multiprocessing. - Atual: Dockerização para deploy em Google Cloud Shell.
Ambiente de Execução: Local (openSUSE Tumbleweed) | Cloud (Google Cloud Shell / Docker).