Este repositorio contiene un programa demostrativo ejecutable que toma operaciones matriciales básicas (multiplicación y suma) y las ejecuta como kernels paralelos en GPU usando Numba CUDA (JIT).
El objetivo del programa es hacer explícito:
- CPU (secuencial): el cálculo se expresa como bucles
for(por ejemplo, 2–3 bucles anidados). - GPU (paralelo): esos índices del bucle se mapean a coordenadas de hilos con
cuda.grid(2). - Compilación JIT: la primera ejecución en GPU tiene un costo de compilar el kernel alto (generando código PTX). Las siguientes ejecuciones reutilizan lo ya compilado para la misma firma de tipos.
Si no se cuenta con una GPU NVIDIA local, se puede ejecutar el proyecto en Google Colab: descargar y comprimir el proyecto como ZIP, súbirlo a Colab, descomprímelo y ejecutar el script activando un entorno con GPU (T4) (Instrucciones complestas abajo).
CompilacionGPU/
├── README.md
├── requerimientos.txt
├── scripts/
│ ├── set_path.ps1
│ └── set_path.sh
└── src/
├── run.py
└── gpu_compilacion/
├── __init__.py
├── bench.py # utilidades de medición/benchmark
├── kernels.py # kernels CUDA (Numba @cuda.jit)
├── main.py # flujo principal del demo (CPU vs GPU, prints)
└── ops.py # operaciones CPU (referencia secuencial)
-
Python 3.10–3.12 (probado con 3.11)
-
GPU NVIDIA con drivers instalados (CUDA Driver)
- Si no hay GPU disponible, el programa corre en CPU y lanza un error para de GPU.
En estos sistemas, pip puede bloquear instalaciones globales por PEP 668 (externally-managed-environment).
Por lo tanto, este proyecto se instala y ejecuta solo dentro de un venv.
El archivo requerimientos.txt incluye:
numbanumpy
No se recomienda instalar dependencias “globales” con
pipen Linux.
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -r requerimientos.txtpy -m venv .venv
.\.venv\Scripts\activate
python -m pip install --upgrade pip
pip install -r requerimientos.txtDesde la raíz del repo (con el venv activo):
python src/run.py 1024Donde 1024 es el tamaño N para matrices N×N.
-
tiempos de CPU secuencial
-
tiempos de GPU separados en:
- tiempo de kernel (ejecución en GPU)
- tiempo de transferencias (Host↔Device)
- tiempo total GPU
-
speedup aproximado
-
validación (
CPUvsGPU) con tolerancia numérica
Ejecuta el programa dos veces con el mismo N:
python src/run.py 1024
python src/run.py 1024La primera ejecución puede ser más lenta del lado GPU por el costo de compilación JIT (además de transferencias/launch). En la segunda ya se reutiliza el kernel compilado (misma firma de tipos).
-
En Colab abrir:
Entorno de ejecución > Cambiar tipo de entorno de ejecución- Acelerador por hardware:
GPU T4
- Acelerador por hardware:
-
Sube el proyecto como
.zip(desde el panel de archivos) y descomprímelo. Luego, en una celda:
!unzip -q CompilacionGPU.zip -d CompilacionGPU
%cd CompilacionGPU
!pip -q install -r requerimientos.txt
!python src/run.py 1024Si el nombre del zip/carpeta cambia, se debe ajsutar
CompilacionGPU.zipy/o la ruta delcd.
Numba CUDA (docs): https://numba.readthedocs.io/en/stable/
NVIDIA PTX ISA: https://docs.nvidia.com/cuda/parallel-thread-execution/index.html
- Mendiola Gutiérrez Francisco Javier
- Flores Linares Oscar Daniel
- Martinez Martinez Geovani
- Ortiz Ménez Victor Gael