TEL-420 Sistemas Paralelos P4c laboratorio profiling gpu gemm · M4
M4 Guía de Práctica / Taller
Descargar .md

P4c · Laboratorio de profiling con NVIDIA Nsight y comparativa de rendimiento CPU vs GPU

Contenido del programa: §20.4 · contenidos 4.7 y 4.8 Horas de laboratorio: 4 · Modalidad: individual o parejas


1. Propósito

Utilizar herramientas profesionales de análisis y perfilado de GPU (NVIDIA Nsight Systems / Nsight Compute o línea de comandos ncu / nsys), midiendo la ocupancia de los multiprocesadores (Streaming Multiprocessors), la eficiencia de las transferencias coalescentes (Memory Coalescing) y comparando rigurosamente el rendimiento de la multiplicación general de matrices (GEMM) en GPU frente a la CPU multihilo optimizada con OpenMP (Módulo 2).


2. Fundamentación analítica de GEMM

La multiplicación de matrices C = A \times B de dimensión N \times N involucra \mathcal{O}(N^3) operaciones de punto flotante para \mathcal{O}(N^2) elementos de datos. Esta alta intensidad aritmética (Flops/Byte) convierte a GEMM en el problema arquetípico para demostrar el poder de las GPUs modernas.

2.1 Multiplicación por Bloques con Memoria Compartida (Tiled GEMM)

En lugar de que cada hilo lea su fila de A y columna de B de la memoria global \mathcal{O}(N) veces, los hilos de un bloque de T \times T colaboran para cargar submatrices cuadradas en __shared__ float As[T][T] y Bs[T][T], reduciendo el tráfico de memoria global en un factor de T (típicamente 16\text{x} o 32\text{x}).


3. Procedimiento experimental

Paso 1: Implementación de GEMM en GPU

  1. Kernel 1: Implementación elemental 2D (gemm_naive.cu) donde cada hilo calcula un elemento C[i][j] leyendo directamente de memoria global.
  2. Kernel 2: Implementación con particionamiento por teselas (Tiled GEMM) utilizando bloques de memoria compartida de 16 \times 16 hilos.

Paso 2: Perfilado con NVIDIA Nsight

Ejecutar la herramienta de línea de comandos para inspeccionar métricas de hardware:

# Perfilado de métricas de memoria y ocupancia
ncu --metrics sm__throughput.avg.pct_of_peak_sustained_elapsed,gpu__time_duration.sum ./gemm_tiled 2048
  • Analizar la métrica de ocupancia teórica vs. ocupancia lograda.
  • Identificar si el factor limitante es el número de registros por hilo o la memoria compartida por bloque.

Paso 3: Comparativa cuantitativa CPU vs GPU

Comparar en una misma tabla los tiempos de ejecución para N \in \{512, 1024, 2048, 4096\}:

  1. CPU Secuencial (T_1).
  2. CPU Paralelo con OpenMP en 8 núcleos (T_{omp}).
  3. GPU Naive (T_{gpu\_naive}).
  4. GPU Tiled con memoria compartida (T_{gpu\_tiled}).

4. Entregables

Informe técnico en PDF evaluado según la file:///home/eliasdev/sistemas_paralelos/10-modulos/M4-cuda-gpgpu/rubrica-comparativo-cpu-gpu.md y la file:///home/eliasdev/sistemas_paralelos/10-modulos/M4-cuda-gpgpu/rubrica-perfilado-gpu.md.