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 laSourceModule
ing 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 Handle
e 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.