2012-01-23 14 views
10

Sé que los elementos de trabajo están agrupados en los grupos de trabajo y no se puede sincronizar fuera de un grupo de trabajo.¿Los elementos de trabajo OpenCL se ejecutan en paralelo?

¿Significa que los elementos de trabajo se ejecutan en paralelo?

Si es así, ¿es posible/eficiente crear 1 grupo de trabajo con 128 elementos de trabajo?

Respuesta

10

Los elementos de trabajo dentro de un grupo se programarán juntos, y se pueden ejecutar juntos. Depende del hardware y/o controladores elegir qué tan paralela es realmente la ejecución. Hay diferentes razones para esto, pero una muy buena es ocultar la latencia de la memoria.

En mi tarjeta AMD, las 'unidades de cálculo' se dividen en 16 unidades SIMD de 4 amplios. Esto significa que 16 elementos de trabajo pueden ejecutarse técnicamente al mismo tiempo en el grupo. Se recomienda que usemos múltiplos de 64 elementos de trabajo en un grupo para ocultar la latencia de la memoria. Claramente, no todos se pueden ejecutar a la hora exacta. Esto no es un problema, porque la mayoría de los núcleos están vinculados a la memoria, por lo que el planificador (hardware) intercambiará los elementos de trabajo que esperan en el controlador de memoria, mientras que los elementos 'listos' obtienen su tiempo de cálculo. El programa host establece la cantidad real de elementos de trabajo en el grupo y está limitada por CL_DEVICE_MAX_WORK_GROUP_SIZE. Deberá experimentar con el tamaño óptimo de grupo de trabajo para su kernel.

La implementación de la CPU es 'peor' cuando se trata de elementos de trabajo simultáneos. Solo hay tantos elementos de trabajo ejecutándose como núcleos disponibles para ejecutarlos. Se comportan más secuencialmente en la CPU.

¿Los elementos de trabajo se ejecutan exactamente al mismo tiempo? Casi nunca realmente.Es por eso que necesitamos usar barreras cuando queremos estar seguros de que pausan en un punto dado.

+0

¿Seguro de que sólo hay cada vez mayor número de elementos de trabajo se ejecuta como usted tiene núcleos disponibles? De acuerdo con [esta página] (http://software.intel.com/sites/products/documentation/ioclsdk/2013/OG/Basic_Concepts.htm), los núcleos separados son unidades de cálculo, lo que significaría que un núcleo no corresponde en de cualquier manera a un elemento de trabajo. – HelloGoodbye

+0

Estoy seguro de esto. Es cierto que puede haber más elementos de trabajo 'en vuelo' que núcleos en la CPU, esto es realmente lo que es el grupo de trabajo. En términos de cómputo simultáneo, un núcleo de CPU solo debe ejecutar una cola de instrucciones en un momento determinado. Incluso en aplicaciones que no son opencl, el enhebrado se simula a través del cambio de contexto, o se realiza a través de hardware central múltiple (y algunas veces con funcionalidad SIMD limitada). – mfa

0

Sí, los elementos de trabajo se ejecutan en paralelo.

Para obtener la cantidad máxima posible de elementos de trabajo, use clGetDeviceInfo con CL_DEVICE_MAX_WORK_GROUP_SIZE. Depende del hardware.

Si es eficiente o no depende principalmente de la tarea que desea implementar. Si necesita mucha sincronización, es posible que OpenCL no se ajuste a su tarea. No puedo decir mucho más sin saber lo que realmente quieres hacer.

1

La idea es que pueden se pueden ejecutar en paralelo si es posible (si realmente se ejecutarán en paralelo depende).

5

En el modelo de ejecución (abstracto) OpenCL, sí, todos los elementos de trabajo se ejecutan en paralelo, y puede haber millones de ellos.

Dentro de una GPU, todos los elementos de trabajo del mismo grupo de trabajo deben ejecutarse en un solo "núcleo". Esto impone una restricción física sobre el número de elementos de trabajo por grupo de trabajo (256 o 512 es el máximo, pero puede ser más pequeño para los núcleos grandes que usan muchos registros). Todos los grupos de trabajo se programan en los núcleos (generalmente de 2 a 16) de la GPU.

Puede sincronizar hilos (elementos de trabajo) dentro de un grupo de trabajo, ya que todos residen en el mismo núcleo, pero no puede sincronizar hilos de diferentes grupos de trabajo, ya que pueden no programarse al mismo tiempo, y podría ser ejecutado en diferentes núcleos.

Sí, es posible tener 128 elementos de trabajo dentro de un grupo de trabajo, a menos que consuma demasiados recursos. Para alcanzar el máximo rendimiento, generalmente desea tener la mayor cantidad posible de subprocesos en un grupo de trabajo (se requieren al menos 64 para ocultar la latencia de la memoria, consulte Vasily Volkov's presentations sobre este tema).

0

Los elementos de trabajo en una obra-grupo dado se ejecutan concurrentemente en los elementos de procesamiento de una unidad de procesamiento sigle.

Cuestiones relacionadas