PyCUDA + Threading = Alças inválidas em invocações de kernel

Vou tentar deixar isso claro;

Eu tenho duas classes;GPU(Object), para acesso geral à funcionalidade da GPU, emultifunc(threading.Thread) para uma função específica, estou tentando multi-dispositivo-ify.GPU contém a maior parte do processamento da 'primeira vez' necessário para todos os casos de uso subsequentes, entãomultifunc é chamado deGPU com o seuself instância passada como__init__ argumento (junto com as filas habituais e outras

Infelizmente,multifunc craps fora com:

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

O primeiro porto de escala era, obviamente, as dimensões do bloco, mas elas estão dentro do alcance (mesmo comportamento, mesmo que eu forceblock=(1,1,1), da mesma forma grade.

Basicamente, dentro demultifunc, todas as funções usuais CUDA memalloc etc funcionam bem (o que implica que não é um problema de contexto). Portanto, o problema deve estar com oSourceModuleing da própria função do kernel.

Tenho um modelo de kernel contendo todo o meu código CUDA com escopo no arquivo e a modelagem é feita comjinja2 noGPU inicialização. Independentemente de esse objeto de modelo ser convertido para umSourceModule objeto emGPU e passou paramultifunc, ou se for convertido emmultifunc acontece a mesma coisa.

@Google tem sido amplamente inútil para esse problema específico, mas, seguindo a pilha, presumo que oInvalid Handle sendo referido é o identificador da função do kernel, em vez de algo estranho acontecendo com as dimensões do bloc

Estou ciente de que esta é uma situação muito difícil, mas tenho certeza de que alguém pode ver um problema que eu perdi.

questionAnswers(2)

yourAnswerToTheQuestion