Este projeto implementa algoritmos de meios-tons com difusão de erro em três versões: serial (C++), paralela com OpenMP (C++) e paralela com CUDA (C++/CUDA). Também inclui scripts Python para benchmarking e análise dos resultados.
- Linux (recomendado)
- Compilador C++ (g++ >= 9)
- CUDA Toolkit (para rodar a versão CUDA)
- Python 3.8+
- CMake (>= 3.10)
- make
- pip (>= 20)
- NVIDIA GPU (para CUDA)
- Google Colab (opcional, para rodar o notebook)
Clone este repositório via ssh:
git clone git@github.com:mc970-25s1/final-project-paralelizacao-tecnica-de-meios-tons.git
cd final-project-paralelizacao-tecnica-de-meios-tonsNo Ubuntu, rode:
sudo apt update
sudo apt install build-essential cmake libomp-dev nvidia-cuda-toolkitCertifique-se de seguir as orientações da nvidia para configurar o CUDA.
Crie o diretório de build e compile:
cmake -S . -B build
cmake --build build -jOs executáveis serão gerados em build/.
./build/serial_cpp <input.ppm> <output.ppm> <method> [p=0.5] [stochastic=1] [-g]./build/omp <input.ppm> <output.ppm> <method> [p=0.5] [stochastic=1] [-g]./build/cuda <input.ppm> <output.ppm> <method> [p=0.5] [stochastic=1] [-g]Parâmetros:
<input.ppm>: Caminho para a imagem de entrada (formato PPM).<output.ppm>: Caminho para a imagem de saída.<method>: Método de difusão de erro (FloydSteinberg,StevensonArce,Burkes,Sierra,Stucki,JarvisJudiceNinke).[p]: Parâmetro de ruído para dithering estocástico (opcional, padrão 0.5).[stochastic]: 1 para estocástico, 0 para determinístico (opcional, padrão 1).[-g]: Converte para escala de cinza antes de processar (opcional).
Exemplo:
./build/omp img/ppm/teste.ppm out/teste_out.ppm FloydSteinberg 0.5 1 -gpython3 -m venv .venv
source .venv/bin/activatepip install --upgrade pip
pip install -r requirements.txt- Faça upload do projeto para o seu Google Drive.
- Abra o arquivo
colab-runner.ipynbno Google Colab. - Execute as células na ordem. O notebook monta o Google Drive, compila o projeto, executa os testes e gera relatórios de desempenho automaticamente.
src/— Códigos-fonte C++/CUDAimg/ppm/— Imagens de entrada (PPM)out/— Imagens de saídabuild/— Executáveis compiladoslogs/— Logs e relatórios de execuçãocolab-runner.ipynb— Notebook para automação e análise
- Para rodar a versão CUDA, é necessário ter uma GPU NVIDIA compatível e drivers/CUDA instalados.
- O notebook pode ser executado localmente ou no Colab, mas a versão CUDA só roda em ambientes com GPU NVIDIA.
- As imagens de entrada devem estar no formato PPM.
- Henrique Parede de Souza [Github] [Linkedin]
- Raphael Salles Vitor de Souza [Github] [Linkedin]
- Vinicius Patriarca Miranda Miguel [Github] [Linkedin]
@software{Parede2025,
title = "parallel-halftone: {CUDA} and {OpenMP} parallelization of
halftone algorithms commonly found in literature",
author = "Parede, Henrique and Souza, Raphael Salles Vitor de and Miguel,
Vinicius Patriarca Miranda",
year = 2025,
url = "https://github.com/Henrique-hpds/parallel-halftone",
language = "pt"
}