main
VKZip - GPU-Accelerated File Compressor/Decompressor
██╗ ██╗██╗ ██╗███████╗██╗██████╗
██║ ██║██║ ██╔╝╚══███╔╝██║██╔══██╗
██║ ██║█████╔╝ ███╔╝ ██║██████╔╝
╚██╗ ██╔╝██╔═██╗ ███╔╝ ██║██╔═══╝
╚████╔╝ ██║ ██╗███████╗██║██║
╚═══╝ ╚═╝ ╚═╝╚══════╝╚═╝╚═╝
Compressão de arquivos acelerada por GPU usando Vulkan Compute Shaders
✨ Características
- 🚀 Aceleração GPU via Vulkan Compute Shaders
- 🖥️ Cross-platform - Windows e Linux
- 🎮 Multi-GPU - NVIDIA, AMD, Intel (qualquer GPU Vulkan)
- 🔄 CPU Fallback - Funciona mesmo sem GPU compatível
- 📊 Benchmark - Compare GPU vs CPU no seu hardware
- 🔒 CRC32 - Verificação de integridade dos dados
- 📦 Formato .vkz - Formato próprio otimizado para compressão paralela
📋 Requisitos
Linux
# Ubuntu/Debian
sudo apt install cmake build-essential vulkan-tools libvulkan-dev glslang-tools
# Arch Linux
sudo pacman -S cmake vulkan-tools vulkan-headers vulkan-icd-loader glslang
# Fedora
sudo dnf install cmake gcc vulkan-tools vulkan-loader-devel glslang
Windows
- Instale o Vulkan SDK
- Instale o CMake
- Instale o Visual Studio Build Tools (ou MinGW)
🔨 Compilação
# Clonar e entrar no diretório
cd winrarcomgpu
# Criar diretório de build
mkdir build && cd build
# Configurar
cmake ..
# Compilar
cmake --build . --config Release
# (Opcional) Instalar
sudo cmake --install .
Windows (MSVC)
mkdir build && cd build
cmake .. -G "Visual Studio 17 2022"
cmake --build . --config Release
🚀 Uso
Compactar arquivo
vkzip compress arquivo.dat # → arquivo.dat.vkz
vkzip compress arquivo.dat saida.vkz # Nome personalizado
vkzip compress arquivo.dat --block-size 128 # Blocos de 128KB
vkzip c arquivo.dat # Atalho
Descompactar arquivo
vkzip decompress arquivo.vkz # → restaura nome original
vkzip decompress arquivo.vkz saida.dat # Nome personalizado
vkzip d arquivo.vkz # Atalho
vkzip x arquivo.vkz # Atalho alternativo
Informações do arquivo
vkzip info arquivo.vkz # Detalhes do arquivo
vkzip i arquivo.vkz # Atalho
Benchmark GPU vs CPU
vkzip benchmark arquivo_grande.dat # Compara GPU vs CPU
vkzip bench arquivo_grande.dat # Atalho
Informações da GPU
vkzip --gpu-info # Mostra info da GPU
Opções
--cpu-only Forçar modo CPU (sem GPU)
--block-size N Tamanho do bloco em KB (padrão: 64, min: 4, max: 1024)
⚙️ Como Funciona
Algoritmo de Compressão
- Divisão em Blocos: O arquivo é dividido em blocos independentes (64KB por padrão)
- Upload GPU: Todos os blocos são enviados para memória da GPU
- Compressão Paralela: Cada bloco é comprimido em paralelo por um workgroup do GPU
- Usa LZ77 (match-finding com hash table)
- Cada match é codificado como
(distância, comprimento) - Bytes sem match são armazenados como literais
- Download: Dados comprimidos são lidos de volta da GPU
- Empacotamento: Blocos comprimidos + header = arquivo
.vkz
Formato .vkz
┌──────────────────────────────────┐
│ Header (28 bytes) │
│ Magic: "VKZ\0" │
│ Version, Size, Block info │
├──────────────────────────────────┤
│ Block Table │
│ Offset, Size, CRC per block │
├──────────────────────────────────┤
│ Original Filename │
├──────────────────────────────────┤
│ Compressed Block 0 │
│ Compressed Block 1 │
│ ... │
│ Compressed Block N │
└──────────────────────────────────┘
📊 Performance
A vantagem da GPU aparece principalmente em:
- Arquivos grandes (>10MB) com muitos blocos paralelos
- GPUs potentes com muitos compute units
- Dados com boa compressibilidade (texto, logs, dados estruturados)
Para arquivos pequenos, o overhead de transferência CPU↔GPU pode tornar o CPU mais rápido.
🏗️ Estrutura do Projeto
winrarcomgpu/
├── CMakeLists.txt # Build system
├── README.md # Este arquivo
├── src/
│ ├── main.c # CLI entry point
│ ├── utils.h # Utilitários e constantes
│ ├── vkz_format.h/c # Formato do arquivo .vkz
│ ├── gpu_context.h/c # Inicialização Vulkan
│ ├── gpu_compress.h/c # Pipeline de compressão GPU
│ ├── gpu_decompress.h/c # Pipeline de descompressão GPU
│ └── cpu_fallback.h/c # Fallback CPU
└── shaders/
├── compress.comp # Compute shader de compressão
├── decompress.comp # Compute shader de descompressão
└── compile_shaders.sh # Script de compilação
📄 Licença
MIT License - Use livremente!
Description
Languages
C
55.3%
Makefile
34.9%
CMake
9.2%
Shell
0.5%