2011-07-31 9 views
5

Recibo un error de falta de recursos al intentar ejecutar un kernel CUDA (a través de PyCUDA), y me pregunto si es posible hacer que el sistema me diga qué recurso es el que me falta. . Obviamente, el sistema sabe qué recurso se ha agotado, solo quiero consultarlo también.¿Cómo puedo diagnosticar una falla de lanzamiento de CUDA debido a que no tengo recursos?

He utilizado la calculadora de ocupación, y todo parece estar bien, así que o bien hay un caso de esquina no cubierto, o lo estoy usando mal. Yo sé que no es registros (que parece ser el culpable habitual) porque estoy usando < = 63 y no lo consigo con un bloque de 1x1x1 y la rejilla de 1x1 en un dispositivo de CC 2.1.

Gracias por cualquier ayuda. He publicado un hilo en los tablones de NVidia:

http://forums.nvidia.com/index.php?showtopic=206261&st=0

pero no obtuvo respuesta. Si la respuesta es "no se puede pedir al sistema esa información", sería bueno saberlo también (más o menos ...;).

Editar:

La mayoría registrar el uso que he visto ha sido 63. Editado lo anterior para reflejar eso.

Respuesta

6

creo PyCUDA utiliza la API de controlador CUDA, por lo que lo siguiente puede ser lo que está mal: CUDA_ERROR_LAUNCH_OUT_OF_RESOURCES puede suceder si no se especifica argumentos suficientes, o se especifica el tamaño incorrecto de argumentos, cuando se utiliza para poner en marcha cuLaunch() granos. Dado que está utilizando PyCUDA, podría ser muy fácil no coincidir con la lista de argumentos requerida para un núcleo y los argumentos que realmente está pasando, por lo que es posible que desee comprobar cómo está llamando a sus kernels.

creo que este es un código de error mal llamado en esta situación ...

+0

Este fue el error, así que gracias por sugerir eso. Todavía me gustaría que hubiera una manera de preguntar qué está pasando, pero parece que no está disponible. –

+0

que estaba manteniendo a raya ya que mi verdadera pregunta era "puedo conseguir el sistema para decirme esto directamente", pero sobre la base de algunas conversaciones en otro lugar, estoy bastante seguro de que la respuesta es "No, cuda no tiene una API para eso. " –

+0

Sí, el problema es que a menudo hay muchas formas de causar el mismo error; poder decirle exactamente qué fue lo que salió mal es algo muy difícil de respaldar. – harrism

0

Ver esta respuesta

CUDA maximum registers per thread: sm_12 vs sm_20

Parece 70 registros es demasiados registros.

+0

Lo sentimos, pero ese no es el problema de fondo, ni es lo que estoy buscando. Incluso si hago cambios en el código para obtener el registro de la cuenta atrás a: "36 registros usados, 492 + 0 bytes smem, 152 bytes cmem [0], 8 bytes cmem [14], 20 bytes cmem [16]" todavía falla Sin embargo, el punto es que estoy buscando una API que me diga "no hay suficientes registros" en lugar de tener que deducir eso a mano. –

Cuestiones relacionadas