Skip to content

Anàlisis d'optimització CPU i GPU - #1

Open
amartinezcsuc wants to merge 3 commits into
kerojohan:mainfrom
amartinezcsuc:feature/performance-analysis-docs
Open

Anàlisis d'optimització CPU i GPU#1
amartinezcsuc wants to merge 3 commits into
kerojohan:mainfrom
amartinezcsuc:feature/performance-analysis-docs

Conversation

@amartinezcsuc

Copy link
Copy Markdown

Anàlisis d'optimització CPU i GPU

📋 Resum

Aquesta PR afegeix anàlisis exhaustives de dues estratègies d'optimització per millorar significativament el rendiment de bat_tracker:

  1. Paral·lelització CPU - Soluciona el problema de processament seqüencial (speedup esperat: 10-20×)
  2. Optimització GPU - Millora l'ús de GPU en detecció (speedup esperat: 10-20%)

🔍 Problema Identificat

Paral·lelització CPU

  • Situació actual: Processament 100% seqüencial → només 1 core utilitzat
  • Evidència: Temps d'execució idèntic independentment dels cores disponibles:
    • Desktop (12 cores, 16GB RAM): 14 minuts
    • HPC (32 cores): 14 minuts (mateix temps!)
    • HPC (192 cores, 300GB RAM): 20 minuts (pitjor per overhead)
  • Utilització CPU actual: 8-10% (1 de 12/32/192 cores)

GPU

  • Pipeline híbrid CPU/GPU amb transferències innecessàries
  • Morphology (open/close) es fa a CPU després de baixar de GPU

💡 Solucions Proposades

1. Paral·lelització CPU (PRIORITAT ALTA 🔥)

Recomanació: Option 3 (Joblib Parallel)

Speedup esperat:

  • Desktop (12 cores): 14 min → 2-2.5 min (6-7×)
  • HPC (32 cores): 14 min → 45-60 s (14-19×)
  • HPC (192 cores): 20 min → 30-45 s (20-35×)

Per què Joblib?

  • API elegant i pythonic
  • Gestió memòria automàtica i superior
  • Error handling excel·lent
  • Industria standard (scikit-learn, scipy)
  • Escalabilitat provada (1 core → milers)

Alternatives analitzades:

  • Option 1: multiprocessing.Pool (acceptable, API més primitiva)
  • Option 2: Threading (❌ GIL impedeix speedup real)
  • Option 4: Dask (❌ overengineering per aquest cas)

2. Optimització GPU (PRIORITAT MITJANA 🟡)

Recomanació: Option 1 (Morphology a GPU)

Speedup esperat: 10-20%

Què fa?

  • Passa operacions morfològiques (open/close) a GPU
  • Elimina 2.4 MB transferències GPU↔CPU per frame
  • Usa cp.ndimage.maximum_filter i cp.ndimage.minimum_filter (pre-compilats, zero JIT)

Alternatives analitzades:

  • Option 2: Full GPU pipeline (❌ risc JIT, OpenCV CPU molt ràpid)
  • Option 3: GPU on-demand (❌ overengineering)
  • Option 4: Batch processing (❌ refactor massa gran)

📁 Estructura de Documentació

S'ha reorganitzat docs/ per claredat:

docs/
├── README.md                          # Actualitzat amb prioritats
│
├── cpu/                               # Paral·lelització CPU (NOU)
│   ├── parallelization-analysis.md   # Anàlisi exhaustiva (55 KB)
│   └── parallelization-options-summary.md  # Resum ràpid (6.4 KB)
│
├── gpu/                               # Optimització GPU (reorganitzat)
│   ├── gpu-optimization-analysis.md  # Anàlisi exhaustiva (40 KB)
│   └── gpu-options-summary.md        # Resum ràpid (3.5 KB)
│
├── benchmarks/
├── validation/
└── architecture/

📊 Impacte Esperat

Mètrica Baseline Desktop (12c) HPC (32c) HPC (192c)
Temps total 14 min 2-2.5 min 45-60 s 30-45 s
Speedup 6-7× 14-19× 20-35×
Utilització CPU 8-10% 75-85% 70-80% 50-70%
Throughput 218 fps 1300-1500 fps 3000-4000 fps 4000-6000 fps

🛣️ Roadmap d'Implementació

Paral·lelització CPU (ETA: 2 setmanes)

  1. Phase 1 (2 dies): POC amb 10.000 frames, validar speedup
  2. Phase 2 (1-2 dies): Optimització memòria (chunk size adaptatiu)
  3. Phase 3 (2-3 dies): Suport GPU multi-worker
  4. Phase 4 (2 dies): Benchmark complet HPC (32 i 192 cores)
  5. Phase 5 (1 dia): Integració CLI i documentació

Optimització GPU (ETA: 1-2 setmanes, després de CPU)

  1. Phase 1 (1 dia): Benchmark baseline actual
  2. Phase 2 (2 dies): Implementar morphology GPU
  3. Phase 3 (2 dies): Validació rigorosa (parity checking)
  4. Phase 4 (1 dia): Benchmark post-canvi i mesurar speedup
  5. Phase 5 (1 setmana): Rollout gradual a producció

🎯 Prioritats Actualitzades

  1. 🔥 Paral·lelització CPU (ALTA) - speedup 10-20×, esforç 2 setmanes
  2. 🟡 Optimització GPU (MITJANA) - speedup 10-20%, esforç 1-2 setmanes
  3. ⚪ Altres optimitzacions (BAIXA) - valid region, tracking, etc.

📝 Metodologia d'Anàlisi

Totes les anàlisis segueixen metodologia Ultra-Think:

  • ✅ Anàlisi exhaustiva de 4 opcions per cada problema
  • ✅ Matriu de decisió ponderada (risc, benefici, complexitat)
  • ✅ Adversarial testing (red team analysis)
  • ✅ Cross-domain insights (paral·lels amb altres dominis)
  • ✅ Second-order effects (impacte a 6 mesos, 2 anys, 10 anys)
  • ✅ Roadmap detallat amb mètriques d'èxit

🚀 Quick Win Immediat

Abans d'implementar, es pot provar configuració OpenMP (zero canvis codi):

export OMP_NUM_THREADS=12
export OPENBLAS_NUM_THREADS=12
export MKL_NUM_THREADS=12
python -m bat_tracker --input video.mp4 --output results/

Speedup esperat: 2-3× (no 20×, però zero esforç)

📚 Referències

CPU / Paral·lelització

GPU

✅ Checklist

  • Anàlisi exhaustiva CPU amb 4 opcions
  • Anàlisi exhaustiva GPU amb 4 opcions
  • Documentació organitzada en carpetes cpu/ i gpu/
  • Resums de referència ràpida per cada anàlisi
  • Roadmaps detallats amb fases i mètriques
  • README actualitzat amb prioritats
  • Tots els documents en català
  • POC de paral·lelització (pendent implementació)
  • Benchmark en HPC real (pendent implementació)

💬 Notes

Aquesta PR conté només documentació i anàlisis. No inclou canvis de codi implementats (excepte la migració a CuPy ja feta). Les implementacions es faran en PRs posteriors seguint els roadmaps proposats.


Tipus de PR: 📚 Documentació / Anàlisi tècnica
Impacte esperat: Alto (guia per futures optimitzacions majors)
Breaking changes: No
Requereix testing: No (només documentació)

Reemplaça cv2.cuda per CuPy per evitar dependències de compilació JIT i headers CUDA.

Canvis principals:
- detection.py: nova funció _binary_cupy() amb pipeline híbrid CPU/GPU
  - Blur a CPU (OpenCV SIMD, molt ràpid)
  - Absdiff + threshold + histogram a GPU (CuPy pre-compilats)
  - Morphology a CPU (evita JIT de cupyx.scipy.ndimage)
- compute.py: detecció CuPy en lloc de cv2.cuda
- background.py: suport GPU median amb CuPy
- pipeline.py: pre-càrrega background a GPU per eficiència
- diagnose_gpu.py: nou script diagnòstic GPU

Beneficis:
- Zero compilació JIT (no requereix cuda_fp16.h)
- Compatible amb CuPy bàsic (pip install cupy-cuda12x)
- Pipeline híbrid CPU/GPU optimitzat per latència
- Fallback CPU automàtic si GPU falla

Dependencies:
- Afegit cupy-cuda12x a requirements.txt
- Actualitzat pyproject.toml amb dependències opcionals GPU
Afegida documentació tècnica completa sobre optimització GPU al directori docs/.

Contingut:
- gpu-optimization-analysis.md (18.500 paraules):
  - Anàlisi ultra-think de 4 opcions d'optimització
  - Option 1 (Morphology GPU): RECOMANADA - 8.05/10
  - Option 2 (Full GPU): NO recomanada - 6.15/10
  - Option 3 (GPU Híbrida): NO recomanada - 6.25/10
  - Option 4 (Batch Processing): NO recomanada - 4.45/10
  - Matriu de decisió amb avaluació risc/benefici
  - Roadmap complet d'implementació (5 fases, 2 setmanes)
  - Mètriques d'èxit, risk mitigation, benchmarks
  - Cross-domain insights i adversarial testing

- gpu-options-summary.md: resum executiu amb comparativa ràpida
- docs/README.md: índex de documentació
- Estructura de carpetes: benchmarks/, validation/, architecture/

Recomanació principal:
Implementar morphology a GPU (Option 1) amb guany esperat 10-20%,
risc baix i implementació quirúrgica (~15 línies canviades).

README.md actualitzat amb enllaços a documentació tècnica.
### Reorganització estructura docs/
- Crea carpetes `cpu/` i `gpu/` per organitzar anàlisis per tipus
- Mou documents GPU existents a `gpu/`
- Actualitza README.md amb nova estructura i prioritats

### Nova anàlisi: Paral·lelització CPU
- Documenta problema: temps idèntic amb 12/32/192 cores (processament seqüencial)
- Analitza 4 opcions: multiprocessing.Pool, threading, joblib, dask
- Recomanació: Option 3 (Joblib) amb speedup esperat 10-20×
- Roadmap implementació en 5 fases (2 setmanes ETA)

### Documents creats
- `docs/cpu/parallelization-analysis.md` (55 KB) - Anàlisi exhaustiva ultra-think
- `docs/cpu/parallelization-options-summary.md` (6.4 KB) - Resum referència ràpida

### Impacte esperat
- Desktop (12 cores): 14 min → 2-2.5 min (6-7× speedup)
- HPC (32 cores): 14 min → 45-60 s (14-19× speedup)
- HPC (192 cores): 20 min → 30-45 s (20-35× speedup)

### Prioritats actualitzades
1. 🔥 Paral·lelització CPU (ALTA) - speedup 10-20×
2. 🟡 Optimització GPU (MITJANA) - speedup 10-20%
3. ⚪ Altres optimitzacions (BAIXA)
@kerojohan kerojohan self-assigned this Apr 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants