Buscar este blog

viernes, 2 de marzo de 2012

En busca del Kernel perdido


Con todo lo expuesto en los post anteriores debemos confeccionar nuestra lista de prioridades a la hora de diseñar los kernel que ejecuten las GPU. Resumiendo, debemos tener en cuenta los siguientes factores:

·         Factor de “unroll”

·         ILP: Nivel de Paralelización por instrucción

·         Factor de ocupación de la GPU, que se compone de:
o    Nº de bloques que se necesitan
o    Nº de hilos por cada bloque
o    Registros utilizados en el kernel

·         Transferencias de memoria CPU <-> GPU

·         Tipos de memoria a utilizar, Global, compartida,…


Teniendo todo esto en cuenta, nuestro kernel debe tener un número de instrucciones  mínimo que ocupe la latencia de la arquitectura, y se intentará invocar al kernel con el tamaño justo de bloques e hilos por bloques que maximicen la ocupación del tamaño  requerido. Se minimizará el número de transferencias de memoria entre CPU y GPU. Se intentará evitar las latencias de acceso a memoria global mediante accesos ordenados en memoria compartida.


En el próximo post, ilustraré con un ejemplo todo esto que hemos comentado


No hay comentarios:

Publicar un comentario