mango de recurso no válido cuda

¿Qué significa este error? Parece que no puedo encontrar NINGUNA información al respecto. Ocurre en un cudaEventRecord.

en el archivo de encabezado del proyecto:

cudaEvent_t cudaEventStart;

en un archivo .c:

cudaEventCreate(&cudaEventStart);
printf("create event: %d\n", (int) cudaEventStart);

en mi único archivo .cu:

printf("record event: %d\n", (int) cudaEventStart);
cudaEventRecord(cudaEventStart);

la salida relevante muestra cuál es el problema con la llamada. cudaEventStart no es un recurso de evento válido en mi archivo cu por alguna razón:

create event: 44199920
record event: 0

Detalles

  • CUDA 3.2
  • GTX 480
  • Win64 de 7 bits

Estoy en el proceso de migrar mi código de Linux a Windows. Funciona bien en la misma tarjeta en Linux, y solo ha habido algunos cambios. Yo definí roundf y agregó lo siguiente:

typedef size_t off_t;
#define strtof(str,n) (float)strtod(str,n)
#include <float.h>
#define isnan(n) _isnan(n)
#define strcasecmp _stricmp
#include <io.h>
#define read _read

No me queda claro por qué cualquiera de estas cosas debería afectar los recursos de cuda. ¿Quizás estoy construyendo el proyecto incorrectamente de alguna manera ...?

preguntado el 16 de mayo de 11 a las 18:05

¿Qué estás haciendo que te da este error? ¿Algún código que nos puedas mostrar? -

@Bart lo siento, pensé que era en el lanzamiento de un kernel, pero es antes de eso. Aún lo rastrea. Si bien estoy interesado en que este programa en particular funcione, la pregunta sigue sin código, ¿no crees? ¿Qué cosas desencadenan este error? -

1 Respuestas

Un identificador de recurso no válido generalmente significa intentar usar algo (puntero, símbolo, textura, núcleo) en un contexto donde no fue creado. Una respuesta más específica requerirá una pregunta más específica, particularmente qué API está usando y cómo / si está usando hilos de host en cualquier parte del código.

contestado el 16 de mayo de 11 a las 22:05

@talonmies Gracias. Agregué algunos detalles del código. No hay subprocesos de host en el código (a menos que de alguna manera se usen implícitamente aquí en Windows. No estoy muy versado en este entorno de Windows con Visual Studio). jmilloy

@jmilloy: ¿dónde se establece el contexto en relación con la creación y el registro del evento? - garras

@talonmies ¿A qué te refieres con establecimiento de contexto? Agregué detalles sobre dónde ocurren la creación y el registro del evento en mi proyecto ... ¿qué otra información sería útil? - jmilloy

@jmilloy: En el nivel de la API del controlador, antes de que suceda algo, se debe establecer un contexto. Esto sucede de forma semi-implícita en la API de tiempo de ejecución. Una buena forma de forzarlo explícitamente es llamar a cudaFree (0) antes de hacer cualquier otra cosa, luego cudaGetDevice () para ver qué dispositivo estás usando. Haga esto antes de hacer cualquier otra cosa. - garras

@talonmies: ¿cómo encaja mi llamada a cudaSetDevice en esta secuencia? - jmilloy

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.