Pregunta Error CL_INVALID_WORK_GROUP_SIZE


Tengo este código, para el cual ya publiqué algo hace algún tiempo.

Hoy obtuve mi núcleo ejecutándose con una estructura typedef en un pequeño programa de prueba, pero clEnqueueNDRangeKernel da un error de tamaño de grupo de trabajo no válido. Esto puede tener 3 causas, según el webiste de khronos.

  1. El tamaño de trabajo global no es divisible por el tamaño de trabajo local. En mi código, es divisible.
  2. El tamaño de trabajo local es más grande de lo que la GPU puede manejar. Mi tamaño de trabajo local es 128, muy por debajo del máximo reportado de 1024.
  3. Algo que ver con el tamaño de trabajo local que es NULL. Mi tamaño de trabajo local no es NULL, es 128.

He buscado en Internet durante algunas horas, y la mayoría de las soluciones que encuentro implican consultas clGetKernelWorkGroupInfo para el tamaño máximo de trabajo local. Cuando lo hago, también informa 1024. Realmente ya no tengo opciones, ¿alguien puede ayudarme? :)

principal: http://pastebin.com/S6R6t3iF   núcleo: http://pastebin.com/Mrhr8B4v


8
2017-11-03 14:26


origen


Respuestas:


Desde su enlace pastebin, veo:

#define MAX_OP_X 4
#define MAX_OP_Y 4
#define MAX_OP MAX_OP_X * MAX_OP_Y      //aantal observer points
#define MAX_SEGMENTEN 128 //aantal segmenten
...
size_t globalSize = MAX_OP;
size_t localSize = MAX_SEGMENTEN;
...
errMsg = clEnqueueNDRangeKernel (commandQueue, kernel, 1, NULL, &globalSize, &localSize, 0, NULL, NULL);

Esto significa que está tratando de poner en cola su núcleo con un tamaño global de 16 y un tamaño local de 128. Es casi seguro que no es lo que quiere. Recuerda, tamaño global es la cantidad total de elementos de trabajo que desea ejecutar, y el tamaño local es el tamaño de cada grupo de trabajo. Por ejemplo, si tiene un tamaño global de 1024x1024 y un tamaño local de 16x16, tendrá 4096 grupos de trabajo de 256 elementos de trabajo cada uno. Esto puede o no ser válido, dependiendo de su dispositivo de cómputo.

Con respecto a pasar un tamaño local NULL: la especificación CL dice que si haces eso, la implementación CL puede elegir lo que sea que quiera como el tamaño del grupo de trabajo local. Idealmente, tratará de hacer algo inteligente en su nombre, pero no tiene garantías.


7
2017-11-03 16:26