Está en la página 1de 10

TEMPORIZACIÓN en

CUDA
Semana 16
 Los eventos CUDA hacen uso del concepto de
flujos CUDA.
 Un flujo CUDA es una secuencia de operaciones
que se realizan en orden en el dispositivo
 Las operaciones en diferentes flujos pueden:
 Intercalarse
RESUMEN  Superponerse - ocultar transferencias de datos
entre el host y el dispositivo

 Todas las operaciones en la GPU se produjeron en


la secuencia predeterminada o en la secuencia 0
"Null Stream"
STREAM – CORRIENTE

 Lista de operaciones que se ejecutan en la GPU en un orden específico

Operaciones Orden Importante


• Lanzamientos • Operaciones • Ejecutar tareas
de un kernel añadidas a en paralelo
stream en el • Depende de
orden que capacidad de
• Copias de
Cronograma de ejecución de una serán cómputo en
memoria desde
aplicación con dos corrientes ejecutadas GPU
independientes. la CPU a la GPU
 La API de eventos de CUDA incluye llamadas para crear y destruir
eventos, registrar eventos y calcular el tiempo transcurrido en
milisegundos entre dos eventos registrados.

EVENTOS
GPU ¿Dónde?
Consisten en marcas de
tiempo en la GPU que
puede grabar en un
Medir t
determinado instante de ejecución
¿Por qué?
tiempo. de un
kernel

Evitar
problemas
de
obtención
de t
Para medir un tiempo de ejecución:
1. Crear evento.

Función para Tipo de dato requerido para


Crear evento almacenar eventos

MANEJO DE
EVENTOS cudaEventCreate (cudaEvent_t *marca);

2. Grabar marca temporal en evento.


➢FINALIDAD: calcular la diferencia de tiempos entre marcas.
 Correspondencia y coherencia entre cantidad de eventos y marcas.
 Ejemplo:
 1 evento inicio + 1 evento fin

2. Guardar las marcas inicial y final

Eventos &
cudaEventRecord(cudaEvent_t marca, cudaStream_t stream);
Marcas
Marca Stream
Variables declaradas Corriente en la que se
anteriormente para grabará el evento.
almacenar las marcas Colocar 0 para incluir todas
temporales de inicio o fin. las corrientes.
3. Calcular tiempo transcurrido entre los dos eventos.
 IMPORTANTE: añadir llamada adicional después del último
cudaEventRecord()
 Sincroniza el host con el device

cudaEventSynchronize(cudaEvent_t marca);
Sincronización
 Detiene la CPU hasta la finalización de todo el trabajo pendiente en la GPU y que
precede a la llamada más reciente a cudaEventRecord()

Por qué es importante sincronizar?

 Algunas de las llamadas que hacemos en CUDA son asíncronas


4. Calcular tiempo transcurrido entre los dos eventos.
 IMPORTANTE: Sincroniza el host con el device

cudaEventElapsedTime(float *tiempo, cudaEvent_t marca1,


cudaEvent_t marca2);

 Devuelve en la variable tiempo, de tipo float, el tiempo en


Calcular milisegundos transcurrido entre:
tiempo  marca 1
 marca 2
transcurrido

5. Terminar podemos decir que los eventos creados


cudaEventDestroy(cudaEvent_t marca);
En resumen
RESUMEN

También podría gustarte