PyCUDA + Threading = Invalid Handles en invocaciones de kernel

Intentaré aclarar esto;

Tengo dos clases; @GPU(Object), para acceso general a la funcionalidad de la GPU, ymultifunc(threading.Thread) para una función particular que estoy tratando de usar en varios dispositivos. @GPU contiene la mayor parte del procesamiento de 'primera vez' necesario para todos los casos de uso posteriores, entoncesmultifunc recibe una llamada deGPU con suself instancia aprobada como__init__ argumento (junto con las colas habituales y tal).

Desafortunadamente,multifunc juega con:

File "/home/bolster/workspace/project/gpu.py", line 438, in run
    prepare(d_A,d_B,d_XTG,offset,grid=N_grid,block=N_block)
  File "/usr/local/lib/python2.7/dist-packages/pycuda-0.94.2-py2.7-linux-x86_64.egg/pycuda/driver.py", line 158, in function_call
    func.set_block_shape(*block)
LogicError: cuFuncSetBlockShape failed: invalid handle

l primer puerto de escala fue, por supuesto, las dimensiones del bloque, pero están dentro del rango (el mismo comportamiento incluso si fuerzoblock=(1,1,1), igualmente cuadrícula.

Básicamente, dentro demultifunc, todas las funciones habituales de CUDA memalloc, etc. funcionan bien (lo que implica que no es un problema de contexto). Por lo tanto, el problema debe estar en laSourceModuleing de la función del núcleo en sí.

Tengo una plantilla de kernel que contiene todo mi código CUDA que tiene un alcance de archivo, y la creación de plantillas se realiza conjinja2 en elGPU inicialización. Independientemente de si ese objeto con plantilla se convierte en unaSourceModule objeto enGPU y pasado amultifunc, o si se convierte enmultifunc sucede lo mismo.

Google ha sido en gran medida inútil para este problema en particular, pero siguiendo la pila, supongo queInvalid Handlee hace referencia a @ es el identificador de la función del kernel en lugar de algo extraño que sucede con las dimensiones del bloque.

Soy consciente de que esta es una situación muy difícil, pero estoy seguro de que alguien puede ver un problema que me he perdido.

Respuestas a la pregunta(2)

Su respuesta a la pregunta