Skip to content

AndreeSalazar/GPU-Driven

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚀 Motor de Simulación Masiva Determinista GPU-Driven

Un sistema capaz de simular millones de entidades en tiempo real, con lógica en CUDA, control en Rust, optimización en ASM y visualización GPU moderna (wgpu).

Rust CUDA ASM wgpu


🎯 ¿Qué hace este proyecto diferente?

WOW #1 — GPU piensa, CPU dirige

La mayoría de proyectos:

  • GPU = dibuja

Este proyecto:

  • GPU = motor de decisiones (CUDA)
  • CPU = orquestador (Rust)

Esto es mentalidad de sistemas.

WOW #2 — Determinismo a gran escala

  • Misma simulación
  • Mismo input
  • Mismo output

Aunque corra en GPU. Esto es difícil y muy valorado.

WOW #3 — Separación extrema de responsabilidades

Stack Rol Por qué
Rust Orquestación Seguridad + control
GPU Compute Simulación Paralelismo real (wgpu/CUDA)
ASM Precisión Timing / hot paths
wgpu Visualización GPU moderno

🏗️ Arquitectura

┌─────────────────────────────────────────────────────────┐
│                    RUST (Orquestador)                   │
│  - Control del ciclo de vida                            │
│  - Sincronización CPU-GPU                               │
│  - Gestión de memoria                                   │
└─────────────────┬───────────────────┬───────────────────┘
                  │                   │
                  ▼                   ▼
┌─────────────────────────┐ ┌─────────────────────────────┐
│     CUDA (Simulación)   │ │      wgpu (Render)          │
│  - Kernels paralelos    │ │  - Instanced rendering      │
│  - Millones de threads  │ │  - Shaders WGSL             │
│  - Compute puro         │ │  - GPU moderno              │
└─────────────────────────┘ └─────────────────────────────┘
                  │
                  ▼
┌─────────────────────────┐
│     ASM (Hot Paths)     │
│  - RDTSC timing         │
│  - Prefetch optimizado  │
│  - Memory fences        │
└─────────────────────────┘

🐜 ¿Qué simula?

Simulación de Colonias Autónomas

Cada entidad tiene:

  • Posición (x, y)
  • Velocidad (vx, vy)
  • Energía
  • Estado

Reglas simples → Patrones emergentes


📊 Benchmarks Reales

RTX 3060 - 1 Millón de Entidades

🎮 GPU: NVIDIA GeForce RTX 3060
📦 Entities: 1,000,000
⏱️  FPS: 75.0
⏱️  Frame Time: 12.89 ms
🔄 Sim Time: 0.14 ms  ← GPU compute
🎨 Render Time: 12.75 ms
Entidades Sim Time (GPU) Frame Time FPS
100,000 ~0.05ms ~8ms 120+
500,000 ~0.10ms ~10ms 100
1,000,000 ~0.14ms ~13ms 75

Resultados reales en RTX 3060


🛠️ Requisitos

  • Rust 1.70+
  • CUDA Toolkit 11.0+ (opcional, para GPU compute)
  • NASM (opcional, para optimizaciones ASM)
  • GPU compatible con Vulkan/DX12/Metal (para wgpu)

🚀 Compilar y Ejecutar

Modo básico (solo CPU + wgpu)

cargo run --release

Con CUDA habilitado

cargo run --release --features cuda

Con timing ASM

cargo run --release --features asm_timing

Todas las features

cargo run --release --features "cuda,asm_timing"

📁 Estructura del Proyecto

massive_sim_engine/
├── src/
│   ├── main.rs              # Entry point
│   ├── engine/              # Motor principal
│   │   ├── mod.rs
│   │   └── state.rs         # Estado y ciclo de vida
│   ├── simulation/          # Lógica de simulación
│   │   ├── mod.rs
│   │   ├── entity.rs        # Estructura de entidad
│   │   └── cpu_sim.rs       # Simulador CPU (fallback)
│   ├── render/              # Renderizado wgpu
│   │   ├── mod.rs
│   │   └── pipeline.rs      # Pipeline y shaders
│   ├── asm/                 # Código ensamblador
│   │   └── timing.asm       # Hot paths de timing
│   ├── cuda/                # Kernels CUDA
│   │   └── simulation.cu    # Kernel de simulación
│   ├── asm_bindings.rs      # FFI para ASM
│   └── cuda_bindings.rs     # FFI para CUDA
├── Cargo.toml
├── build.rs                 # Script de compilación
└── README.md

🧠 Decisiones de Diseño

¿Por qué Rust para orquestación?

  • Memory safety sin garbage collector
  • Ownership model perfecto para recursos GPU
  • Zero-cost abstractions
  • Excelente interop con C/CUDA

¿Por qué GPU Compute para simulación?

  • Paralelismo masivo real (no threads de CPU)
  • wgpu compute shaders: cross-platform (Vulkan, DX12, Metal)
  • CUDA disponible para NVIDIA (opcional)
  • Determinismo posible con cuidado
  • 100k+ entidades en tiempo real

¿Por qué ASM para hot paths?

  • RDTSC para timing de nanosegundos
  • Control de prefetch de cache
  • Memory fences explícitos
  • Cuando cada ciclo cuenta

¿Por qué wgpu para render?

  • Cross-platform (Vulkan, DX12, Metal)
  • API moderna y segura
  • Compute shaders disponibles
  • Futuro de gráficos en Rust

📈 Roadmap

  • Fase 1: Base sólida (Rust + wgpu + render de puntos)
  • Fase 2: GPU Compute (wgpu compute shaders, 100k entidades)
  • Fase 3: Profiling en tiempo real (métricas GPU, FPS, timing)
  • Fase 4: ASM preparado (RDTSC timing, prefetch, memory fences)
  • Fase 5: Escala masiva (1M entidades @ 75 FPS)

💼 Portfolio Statement

"Diseñé un motor de simulación masiva capaz de procesar 1 millón de entidades a 75 FPS. La GPU ejecuta la lógica principal mediante compute shaders (wgpu/CUDA), Rust orquesta la ejecución y sincronización del sistema, y ASM está preparado para control preciso de rendimiento con RDTSC. Sistema de profiling en tiempo real para análisis y optimización."


📄 Licencia

MIT License - Usa este código como quieras.


Construido con 🔥 por un desarrollador que entiende que la infraestructura es otra liga.

About

# 🚀 Motor de Simulación Masiva Determinista GPU-Driven

Resources

Stars

Watchers

Forks

Contributors