2012-07-13 30 views
8

Para un Kernel dado, ¿por qué los work_groups tienen siempre el mismo tamaño? Leí en alguna parte (para el caso en el que no especificamos el tamaño de trabajo local) que openCL crea 3 grupos de trabajo (de 217 elementos de trabajo cada uno) para kernel con 651 elementos de trabajo (divisibles por 3) mientras crea 653 grupos de trabajo de 1 elemento de trabajo cada uno, ya que 653 es un número primo.Tamaños de grupo de trabajo

Supongamos que especificamos el tamaño_trabajo_local (es decir, el n. ° de elementos de trabajo en un grupo de trabajo), digamos, 5. Y hemos asignado el total de elementos de trabajo (global_work_size) como 9. ¿Cómo se crearán los grupos de trabajo? ¿Es por esto que global_work_size tiene que ser un múltiplo de local_work_size? Si los datos solo requieren 9 elementos de trabajo, ¿cómo puedo aumentarlos a 10 (múltiplo de tamaño_trabajo_local, 5)?

¿Por qué el host no puede asignar la memoria para la matriz de resultados si no sabe cuántos grupos de trabajo ejecutarán el kernel?

Por favor ayuda. He leído todo esto en esto: http://www.openclblog.com/2011/09/work-group-sizes.html

Respuesta

6

No es necesario que los tamaños de los grupos de trabajo de OpenCL sean siempre del mismo tamaño. El tamaño del grupo de trabajo global se relaciona frecuentemente con el tamaño del problema. El tamaño del grupo de trabajo local se selecciona en función de maximizar el rendimiento de la unidad informática y la cantidad de subprocesos que necesitan compartir la memoria local.

Deje que sea un par de ejemplos;

A) Escala una imagen de N por M a X por Y.

B) números Sum N.

Para A)

La obvia Tamaño Grupo de Trabajo Global es X, Y, 1. ¿Por qué? Esto da 1 hilo por píxel de salida. El tamaño del grupo de trabajo local se debe elegir en función de la cantidad de píxeles de entrada que se deben procesar para generar un píxel de salida.

Por ejemplo.

A.1) Escale una imagen de 4K por 3.2K a 64 por 64. Tamaño de GWG [64,64,1] Tamaño de LWG 256 A.2) Escale una imagen de 4k por 3.2k a 800 por 600 Tamaño .GWG [800,60,1] Tamaño GDP 256

Para B)

La obvia Tamaño Grupo de trabajo Global es N/2,1,1, ¿Por qué? Entonces cada hilo comienza sumando 2 valores juntos. El Grupo de trabajo local se debe establecer en el máximo del dispositivo.

Hay algunas advertencias;

1) El tamaño del grupo de trabajo global está limitado por el tamaño de la memoria global y el tamaño máximo de la asignación global de la memoria.

2) Cada dispositivo tiene un tamaño de grupo de trabajo local máximo a menudo 256

+0

Gracias Tim !! Gracias por responder. :) Entonces, ¿el tamaño de GWG no tiene que ser un múltiplo del tamaño de LWG? – Remy

+0

Para aclarar sí, el tamaño del LWG debe ser un mukltiple o un nulo. De las páginas de Man http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/ –

+0

Muchas gracias :) – Remy

Cuestiones relacionadas