TEL-420 Sistemas Paralelos Rúbrica: Codigo cuda · M4
M4 Rúbrica de Evaluación Oficial
Descargar .md

Rúbrica · Evaluación de Código Fuente CUDA — Módulo 4 (EC4)

Instrumento del programa: Evaluación de código CUDA (rúbrica) (§18.2) Evidencia: Kernels CUDA de complejidad creciente (§16) Elemento de competencia: EC4 · Módulo: M4 · Semanas: 11–12 · Ponderación: 40 % de EC4 (8.8 % de la asignatura)


1. Qué se entrega

Repositorio de código Git con la serie de kernels CUDA en C/C++ desarrollados para la resolución eficiente de problemas computacionales masivos, acompañado de un Makefile y README.md que detalle las opciones de compilación con nvcc.

Programas requeridos:

  1. Suma de vectores y producto escalar con control de dimensiones de grilla y bloques unidimensionales.
  2. Kernel 2D para convolución / filtrado espacial de matrices de datos.
  3. Reducción paralela de suma acumulada implementada con memoria compartida (__shared__) y optimización para evitar divergencia de warps.
  4. Multiplicación de matrices por bloques de teselas (Tiled GEMM) utilizando sincronización explícita con __syncthreads().

2. Criterios de evaluación (100 puntos)

#CriterioDescripción del desempeño esperadoPuntaje
1Corrección matemática y consistenciaCoincidencia numérica exacta de los resultados del kernel frente al algoritmo de referencia en CPU.25
2Configuración de grillas y bloquesDimensionamiento adecuado de gridDim y blockDim con protección de límites de memoria (idx < N).20
3Gestión de memoria y transferenciasAsignación y liberación correcta con cudaMalloc/cudaFree; comprobación sistemática de errores de la API CUDA.20
4Uso eficiente de memoria compartidaUso justificado de __shared__ para reutilización de datos y sincronización libre de carreras con __syncthreads().20
5Calidad del código y reproducibilidadModularidad, comentarios explicativos en los kernels y scripts de compilación listos para ejecutar.15
Total100

3. Rúbrica analítica por niveles

CriterioDestacado (4)Competente (3)En proceso (2)No logrado (1)
1. CorrecciónValidación automática frente a CPU en todos los kernels con tolerancia estrictaCoincide numéricamente; verificación manualDiscrepancias menores por precisión de floatResultados incorrectos o divergentes
2. Grillas/BloquesConfiguración óptima de 128/256 hilos por bloque con manejo perfecto de restos de grillaConfiguración adecuada con guarda de límitesLímites de vector no verificados causando lecturas fuera de rangoConfiguración errónea que provoca fallos de kernel
3. Memoria/APIManejo impecable de punteros en device, verificación de errores en cada llamadaMemoria bien gestionada con verificación básicaFugas de memoria en device o comprobación nula de erroresFallos de segmentación o punteros inválidos
4. Memoria CompartidaReducción libre de divergencia de warps y sincronización impecableUso correcto de shared memory con leve divergenciaUso de shared memory con riesgo de condiciones de carreraNo utiliza shared memory o uso erróneo
5. CalidadRepositorio estructurado, código limpio y medición precisa con eventos CUDACódigo legible y documentado con Makefile funcionalCódigo desordenado sin Makefile automatizadoCódigo confuso o no reproducible