Initial commit: VKZip GPU Compressor
This commit is contained in:
@@ -0,0 +1,174 @@
|
||||
# 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
|
||||
```bash
|
||||
# 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
|
||||
1. Instale o [Vulkan SDK](https://vulkan.lunarg.com/sdk/home)
|
||||
2. Instale o [CMake](https://cmake.org/download/)
|
||||
3. Instale o [Visual Studio Build Tools](https://visualstudio.microsoft.com/downloads/) (ou MinGW)
|
||||
|
||||
## 🔨 Compilação
|
||||
|
||||
```bash
|
||||
# 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)
|
||||
```cmd
|
||||
mkdir build && cd build
|
||||
cmake .. -G "Visual Studio 17 2022"
|
||||
cmake --build . --config Release
|
||||
```
|
||||
|
||||
## 🚀 Uso
|
||||
|
||||
### Compactar arquivo
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
vkzip info arquivo.vkz # Detalhes do arquivo
|
||||
vkzip i arquivo.vkz # Atalho
|
||||
```
|
||||
|
||||
### Benchmark GPU vs CPU
|
||||
```bash
|
||||
vkzip benchmark arquivo_grande.dat # Compara GPU vs CPU
|
||||
vkzip bench arquivo_grande.dat # Atalho
|
||||
```
|
||||
|
||||
### Informações da GPU
|
||||
```bash
|
||||
vkzip --gpu-info # Mostra info da GPU
|
||||
```
|
||||
|
||||
### Opções
|
||||
```bash
|
||||
--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
|
||||
|
||||
1. **Divisão em Blocos**: O arquivo é dividido em blocos independentes (64KB por padrão)
|
||||
2. **Upload GPU**: Todos os blocos são enviados para memória da GPU
|
||||
3. **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
|
||||
4. **Download**: Dados comprimidos são lidos de volta da GPU
|
||||
5. **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!
|
||||
Reference in New Issue
Block a user