¿Cómo crear una memoria __local de tamaño variable en pyopencl?

en mi código OpenCL C, uso clSetKernelArg para crear __local memoria de ‘tamaño variable’ para usar en mis kernels, que no está disponible en OpenCL per se. Mira mi ejemplo:

 clSetKernelArg(clKernel, ArgCounter++, sizeof(cl_mem), (void *)&d_B); ... clSetKernelArg(clKernel, ArgCounter++, sizeof(float)*block_size*block_size, NULL); ... kernel=" matrixMul(__global float* C, ... __local float* A_temp, ... )" {... 

Mi pregunta es ahora, ¿cómo hacer lo mismo en pyopencl?

Miré a través de los ejemplos que vienen con pyopencl, pero lo único que pude encontrar fue un enfoque utilizando plantillas, lo que me parece que lo entendí como una exageración. Ver ejemplo

 kernel = """ __kernel void matrixMul(__global float* C,...){ ... __local float A_temp[ %(mem_size) ]; ... } 

¿Que recomiendas?

    Es similar a C. Se le pasa una matriz de tamaño fijo como local. Aquí hay un ejemplo de la ordenación de radios de Enja. Note que el último argumento es una matriz de memoria local.

      def naive_scan(self, num): nhist = num/2/self.cta_size*16 global_size = (nhist,) local_size = (nhist,) extra_space = nhist / 16 #NUM_BANKS defined as 16 in RadixSort.cpp shared_mem_size = self.uintsz * (nhist + extra_space) scan_args = ( self.mCountersSum, self.mCounters, np.uint32(nhist), cl.LocalMemory(2*shared_mem_size) ) self.radix_prg.scanNaive(self.queue, global_size, local_size, *(scan_args)).wait() 

    No estoy familiarizado con Python y su implementación de OpenCL, pero también se puede crear una memoria local dentro del kernel con un tamaño fijo (similar a lo que hiciste):

     __kernel void matrixMul(...) { __local float A_templ[1024]; } 

    En lugar de 1024, se puede usar un símbolo de preprocesador definido y se puede configurar durante la comstackción para cambiar el tamaño:

     #define SIZE 1024 __kernel void matrixMul(...) { __local float A_templ[SIZE]; } 

    SIZE se puede definir dentro de la misma fuente, como parámetro del comstackdor para cLBuildProgram o como una fuente adicional para clCreateProgramWithSource.

    EDITAR: Encontró algo con Google ;-): http://www.google.com/url?sa=t&source=web&cd=4&ved=0CC8QFjAD&url=http%3A%2F%2Flinksceem.eu%2Fjoomla%2Ffiles%2FPRACE_Winter_School%2FLinkSColores de fotos pdf & rct = j & q = Pyopencl% 20__local% 20memory & ei = BTbETbWhOsvBswadp62ODw & usg = AFQjCNG6rXEEkDpE1304pmQDu3GFdRA0BQ & sig2 = vHOGOqwAAp.p.p.p.p.p.p.p.p.pdf