opencl sistemas - ¿Cuántos subprocesos(o elemento de trabajo)pueden ejecutarse al mismo tiempo?




nod32 encontrados (2)

Soy nuevo en la programación de GPGPU y estoy trabajando con la implementación de OpenCL de NVIDIA.

Mi pregunta era cómo calcular el límite de un dispositivo GPU (en número de subprocesos).
Por lo que he entendido, hay una serie de grupos de trabajo (equivalentes a bloques en CUDA) que contienen una cantidad de elementos de trabajo (~ hilo de cuda).

  • ¿Cómo obtengo la cantidad de grupos de trabajo presentes en mi tarjeta (y que pueden ejecutarse al mismo tiempo) y la cantidad de elementos de trabajo presentes en un grupo de trabajo?

  • ¿A qué CL_DEVICE_MAX_COMPUTE_UNITS corresponde?
    Las especificaciones de khronos de los núcleos ("La cantidad de núcleos de cálculo paralelos en el dispositivo OpenCL"), cuál es la diferencia con el núcleo CUDA que figura en la especificación de mi tarjeta gráfica. En mi caso, openCL da 14 y mi GeForce 8800 GT tiene 112 núcleos basados ​​en el sitio web de NVIDIA.

  • ¿CL_DEVICE_MAX_WORK_GROUP_SIZE (512 en mi caso) corresponde al total de elementos de trabajo dados a un grupo de trabajo específico o al número de elementos de trabajo que pueden ejecutarse al mismo tiempo en un grupo de trabajo?

Cualquier sugerencia sería muy apreciada.


Answers

El estándar OpenCL no especifica cómo el modelo de ejecución abstracta proporcionado por OpenCL se asigna al hardware. Puede poner en cola cualquier número de subprocesos T (elementos de trabajo) y proporcionar un tamaño de grupo de trabajo (WG), con al menos las siguientes restricciones (consulte la especificación de OpenCL 5.7.3 y 5.8 para obtener detalles):

  • WG debe dividir T
  • WG debe estar a lo sumo DEVICE_MAX_WORK_GROUP_SIZE
  • WG debe ser como máximo KERNEL_WORK_GROUP_SIZE devuelto por GetKernelWorkGroupInfo ; puede ser más pequeño que el tamaño máximo del grupo de trabajo del dispositivo si el kernel consume muchos recursos.

La implementación gestiona la ejecución del kernel en el hardware. Todos los subprocesos de un solo grupo de trabajo deben programarse en un único "multiprocesador", pero un solo multiprocesador puede administrar varios grupos de trabajo al mismo tiempo.

Los subprocesos dentro de un grupo de trabajo se ejecutan en grupos de 32 (NVIDIA warp) o 64 (AMD wavefront). Cada microarquitectura hace esto de una manera diferente. Encontrará más detalles en los foros de NVIDIA y AMD, y en los diversos documentos proporcionados por cada proveedor.

Para responder a su pregunta: no hay límite para el número de hilos. En el mundo real, su problema está limitado por el tamaño de las entradas / salidas, es decir, el tamaño de la memoria del dispositivo. Para procesar un búfer de 4 GB de flotación, puede poner en cola 1G hilos, con WG = 256 por ejemplo. El dispositivo tendrá que programar grupos de trabajo de 4M en su pequeño número de multiprocesadores (por ejemplo, entre 2 y 40).


Soy nuevo en GPGPU pero tengo cierta experiencia en informática científica (doctorado en Física). Estoy armando un equipo de investigación y quiero usar GPGPU para mis cálculos. Tuve que elegir entre las plataformas disponibles. Decidí por Nvidia, por un par de razones: mientras que ATI podría ser más rápido en papel, Nvidia tiene una plataforma más madura y más documentación, por lo que será posible acercarse al máximo rendimiento en esta plataforma.

Nvidia también tiene un programa de apoyo a la investigación académica, uno puede solicitar apoyo, acabo de recibir una tarjeta TESLA 2075, de la cual estoy muy feliz. No sé si ATI o Intel apoyan la investigación de esta manera.

Lo que escuché sobre OpenCL es que está tratando de ser todo a la vez, es cierto que su código OpenCL será más portátil, pero también es probable que no aproveche todas las capacidades de cualquiera de las plataformas. Prefiero aprender un poco más y escribir programas que utilicen mejor los recursos. Con el TESLA K10 que acaba de salir este año, Nvidia está en el rango de 4,5 TeraFlops, por lo que no está claro si Nvidia está detrás ... sin embargo, los MIC de Intel podrían ser un verdadero competidor, especialmente si logran mover la unidad GPGPU a la placa base Pero por ahora, elegí a Nvidia.