estoy ejecutando el kernel OpenCL a continuación con un tamaño global de trabajo bidimensional de 1.000.000 x 100 y un tamaño de trabajo local de 1 x 100.¿Cómo declarar la memoria local en OpenCL?
__kernel void myKernel(
const int length,
const int height,
and a bunch of other parameters) {
//declare some local arrays to be shared by all 100 work item in this group
__local float LP [length];
__local float LT [height];
__local int bitErrors = 0;
__local bool failed = false;
//here come my actual computations which utilize the space in LP and LT
}
Sin embargo, esto se niega a compilar, ya que los parámetros y length
height
no se conocen en tiempo de compilación. Pero no está claro para nada cómo hacer esto correctamente. ¿Debo usar punteros con memalloc? ¿Cómo manejar esto de manera que la memoria solo se asigna una vez para todo el grupo de trabajo y no una vez por elemento de trabajo?
Todo lo que necesito es 2 matrices de flotadores, 1 int y 1 booleano que se comparten entre todo el grupo de trabajo (por lo que los 100 elementos de trabajo). Pero no logro encontrar cualquier método que hace esto correctamente ...
http://stackoverflow.com/questions/2541929/how-do-i-use-local-memory-in-opencl –