Me he dado cuenta de que CUDA aplicaciones tienden a tener un bruto máximo de tiempo de ejecución de 5 a 15 segundos antes de que se producirá un error y la salida. Me doy cuenta de que es ideal para no tener CUDA de ejecución de la aplicación que de largo, pero suponiendo que es la elección correcta para el uso de CUDA y debido a la cantidad de secuencia de trabajo por el hilo se debe ejecutar ese tiempo, ¿hay alguna forma de ampliar esta cantidad de tiempo o de conseguir alrededor de él?

InformationsquelleAutor rck | 2009-01-30

8 Comentarios

  1. 26

    Yo no soy un CUDA de expertos, — yo he estado desarrollando con la tecnología AMD Stream SDK, que AFAIK es comparable.

    Puede desactivar el Windows temporizador de vigilancia, pero que es muy recomendable, por razones que serán obvias.
    Para deshabilitar esto, usted necesita a regedit HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Watchdog\Display\DisableBugCheck, crear un REG_DWORD y se establece a 1.
    Usted también puede necesitar para hacer algo en el panel de control de NVidia. Buscar alguna referencia a «VPU de Recuperación» en la CUDA docs.

    Idealmente, usted debería ser capaz de romper su núcleo de operaciones en varias pasadas sobre los datos a que se rompen en las operaciones que se ejecutan en el límite de tiempo.

    Alternativamente, usted puede dividir el dominio del problema, de modo que la computación en menos de salida de píxeles por comando. I. e., en lugar de informática de 1.000.000 de salida de píxeles en un solo golpe, número 10 comandos para la gpu para calcular 100,000 cada uno.

    La unidad básica que tiene que ajustarse dentro del intervalo de tiempo no es toda la aplicación, pero la ejecución de un único búfer de comandos. En el AMD Stream SDK, una larga secuencia de operaciones puede ser dividido en varios segmentos de tiempo explícita de tirar de la cola de comandos con un CtxFlush() la llamada. Tal vez CUDA tiene algo similar?

    Debe no tener que leer todos los datos de ida y vuelta a través de la PCIX autobús en cada intervalo de tiempo, puede dejar sus texturas, etc. en la gpu a la memoria local; sólo tienes algún comando búferes completa de vez en cuando, para demostrar que el sistema operativo que usted no está atrapado en un bucle infinito.

    Finalmente, las Gpu son rápido, así que si su aplicación no es capaz de hacer un trabajo útil en la que 5 o 10 segundos, me gustaría tomar eso como un signo de que algo está mal.

    [EDITAR Mar 2010 actualización:] (obsoleta de nuevo, ver las actualizaciones de los de abajo para la información más reciente) La clave del registro anterior es fuera de fecha. Creo que esa fue la clave para Windows XP 64-bit. Allí están las claves de registro nuevo para la Vista y Windows 7. Usted puede encontrar aquí: http://www.microsoft.com/whdc/device/display/wddm_timeout.mspx
    o aquí: http://msdn.microsoft.com/en-us/library/ee817001.aspx

    [EDITAR Abr 2015 para actualizar:] Esto se está poniendo realmente fuera de fecha. La forma más sencilla de deshabilitar los TDR para la programación Cuda, asumiendo que usted tiene la NVIDIA Nsight herramientas instaladas, es abrir el Nsight Monitor, haga clic en «Nsight Monitor de opciones», y en «General» set «WDDM TDR habilitado» a false. Esto va a cambiar la configuración del registro para usted. Cerrar y reiniciar el sistema. Cualquier cambio en los TDR del registro de configuración no tendrá efecto hasta que se reinicie.

    [EDITAR de agosto de 2018 para actualizar:]
    Aunque la NVIDIA herramientas permiten la desactivación de los TDR ahora, la pregunta es relevante para AMD/OpenCL los desarrolladores. Para aquellos: El vínculo actual que los documentos de los TDR de la configuración es en https://docs.microsoft.com/en-us/windows-hardware/drivers/display/tdr-registry-keys

    • Yo no soy un SIMD programador, ni tengo un juego en la TV, pero en mi humilde opinión es un poco demasiado general como para decir que «Finalmente, los GPUs son rápidos, por lo que si su aplicación no es capaz de hacer un trabajo útil en la que 5 o 10 segundos, me gustaría tomar eso como un signo de que algo está mal.» En aplicaciones científicas (como los CUDA se utiliza a menudo para), a veces simplemente tienes un montón de calcular.
    • San Jacinto: Ver a Tom de la respuesta a continuación. El tiempo de espera es razonable en el caso de que la GPU está computación es también la pantalla de la GPU. En el caso donde no se utiliza para mostrar, a continuación, usted tiene más opciones.
    • Es, definitivamente, es incorrecto decir que el control no debe estar deshabilitado. El organismo de control es completamente roto: se activa cuando solo paso en el depurador, y que tiende a congelar completamente el sistema de multi-monitor/displayport configuraciones, que no ayuda a nadie.
    • El NSight Cuda depurador tiene un software de preferencia de modo de modo que no va a desencadenar el TDR mientras estás solo paso con el depurador. Mira debajo de la NSight menú de opciones. Si usted está utilizando una GPU que tiene una pantalla adjunta, el depurador utilizar ese modo de forma automática. Si usted está utilizando una GPU que no tiene una pantalla adjunta, a continuación, apagar el TDR o ajuste a una realidad mucho valor razonable.
    • Dado que el watchdog duro se bloquea todo mi sistema (con el lado hermoso-efecto de lo que dos de mis monitores flash spastically, y haciendo mis altavoces explosión DMA bucle de ruido), creo que me quedo con el de apagarlo.
    • A menos que usted todavía está ejecutando Windows XP, un TDR debe NO duro bloqueo de todo el sistema. Sólo debe restablecer/reiniciar el controlador WDDM. La muestra debe en blanco durante un segundo o dos y volver. Por supuesto, ninguna de las aplicaciones (Cuda o gráficos) que fueron el uso de la GPU va a perder el contexto y probablemente choque, pero los síntomas que usted describe NO debería ocurrir con un TDR.
    • El idealismo es agradable, pero en el mundo real, seguro que lo hace accidente de Windows 7 para mí.
    • Lo que funciona para usted. Pero la IDEA de TDR es para el sistema operativo para recuperarse de un colgado de la GPU y evitar exactamente lo que estás experimentando. Debe haber algo inusual mal con su particular sistema que está causando un controlador en modo kernel de bloqueo. Ronda de los sospechosos habituales.
    • Sin duda, puedo estar de acuerdo con @GlennMaynard que a veces un TDR tiempo de espera se bloqueo mi máquina y me exigen reiniciar mi máquina (o se restablece, o no se ha recuperado después de 2 minutos como este). Sin embargo a veces también se las arregla para recuperar. Mi apreciación personal es que el aumento de TdrDdiDelay puede solucionar este problema, ya que este parece ser el límite de tiempo para el controlador WDDM para restablecer (particularmente exigentes de trabajo pueden hacer que se tome más tiempo que el valor predeterminado de 5 segundos?). Detalles de TdrDdiDelay aquí: msdn.microsoft.com/en-us/library/windows/hardware/…
    • Esta respuesta me salva la vida. Yo no era capaz de averiguar por qué el núcleo está fallando al azar a diferencia de los lugares.

  2. 10

    En Windows, el controlador de la tarjeta gráfica tiene un temporizador de vigilancia que mata a cualquier shader los programas que se ejecutan durante más de 5 segundos. Tenga en cuenta que el Xorg/XFree86 controladores de no hacerlo, de manera que una posible solución es ejecutar el CUDA aplicaciones en Linux.

    AFAIK no es posible desactivar el temporizador de vigilancia en Windows. La única manera de conseguir alrededor de esto en Windows, es el uso de una segunda carta que no tiene pantallas en él. No tiene que ser un Tesla pero no debe tener ningún activo pantallas.

    • De hecho, en Windows cualquier dispositivo con un controlador WDDM tendrá el temporizador de vigilancia de problema, si tiene una pantalla conectada o no. La NVIDA Tesla tarjetas de evitar este por tener un tipo completamente diferente de controlador (la TCC o Tesla Compute Cluster) el conductor, que no identifique a la GPU para el sistema operativo como adaptador de pantalla. Si usted acaba de conectar una segunda tarjeta de video (Radeon o GeForce) sin pantallas conectadas, será reconocido por el sistema operativo como un WDDM adaptador de pantalla del dispositivo, y el temporizador de vigilancia seguirán siendo aplicables.
  3. 8

    Resolver de tiempo de espera de Detección y Recuperación de WINDOWS 7 (32/64 bits)

    Crear una clave del registro de Windows para cambiar los TDR de la configuración de un
    mayor cantidad, por lo que Windows va a permitir un mayor tiempo de retraso antes de que
    TDR se inicia el proceso.

    Abrir Regedit en Ejecutar o DOS.

    En Windows 7 vaya a la clave de registro correcto de la zona, para crear la
    nueva clave:

    HKEY_LOCAL_MACHINE>SISTEMA>CurrentControlSet>Control>GraphicsDrivers.

    Habrá probablemente una de las claves en que se llama DxgKrnlVersion no como un
    DWord.

    Haga clic derecho y seleccione crear una nueva clave REG_DWORD, y el nombre de
    TdrDelay. El valor asignado es el número de segundos antes de que
    TDR patadas en it > es el 2 de forma automática en Windows (incluso
    a pesar de la reg. valor de la clave no existe >hasta que lo creas). Asignar
    con un nuevo valor (traté de 4 segundos), lo que duplica el tiempo antes de
    TDR. A continuación, reinicie la PC. Es necesario reiniciar el PC antes de que el valor de
    trabajo.

    Fuente de Win7 TDR (Controlador de tiempo de espera de Detección de & Recuperación)
    También he verificado y funciona bien.

    • Ya esta resuelto un problema similar para mí…
  4. 5

    Esto no es posible. El tiempo está ahí para evitar errores en los cálculos de la GPU por largos períodos de tiempo.

    Si utiliza una tarjeta dedicada para CUDA de trabajo, el límite de tiempo se levantó. No estoy seguro de si esto requiere de un Tesla de la tarjeta, o si una GeForce sin monitor conectado puede ser utilizado.

    • Sería útil para determinar cuál de estos casos es. Voy a tener que probar un no-tesla tarjeta con ningún monitor conectado y averiguar.
    • Acabo de probar esto. No Tesla tarjeta es necesario. El uso de Linux, yo en realidad, simplemente no se molestan en ir a X y el Límite se levantó.
    • Así que, como otras respuestas sugieren que, en realidad, es posible… puede reformular su respuesta?
  5. 5

    La más básica de la solución es elegir un punto en el cálculo de un porcentaje de la manera a través de la que estoy seguro que la GPU con la que estoy trabajando es capaz de completar en el tiempo, guardar toda la información de estado y parada, y luego comenzar de nuevo.

    Actualización:
    Para Linux: Salir X te permitirá ejecutar aplicaciones CUDA como el tiempo que quieras. No Tesla deseada (9600 fue utilizado en la prueba de esto)

    Una cosa a tener en cuenta, sin embargo, es que si X es nunca entró, los controladores probablemente no será cargado, y no va a funcionar.

    También parece que para Linux, simplemente no tener ninguna X muestra en el tiempo de trabajo, por lo que X no necesita ser salido tan largo como el que la pantalla no X completo la pantalla de la terminal.

  6. 3

    La solución que yo uso es:

    1. Pasar toda la información al dispositivo.

    2. Ejecutar iterativo versiones de algoritmos, donde en cada iteración se invoca el kernel en la memoria ya almacenado en el dispositivo.

    3. Finalmente, la transferencia de la memoria para alojar sólo después de que todas las iteraciones se han terminado.

    Esto permite el control sobre los ciclos de la CPU (incluyendo la opción de abortar), sin el costoso dispositivo<–>memoria del host transferencias entre iteraciones.

  7. 3

    El temporizador de vigilancia sólo se aplica en GPUs con una pantalla que adjunto.

    En Windows el temporizador es parte de la WDDM, es posible modificar la configuración (tiempo de espera, el comportamiento en llegar a tiempo de espera, etc.) con algunas claves del registro, consulte este El artículo de Microsoft para obtener más información.

    • Hola Tom, he modificado el temporizador de vigilancia ya (a ~6 días) y han logrado tener un solo núcleo a ejecutar durante 40 segundos. He intentado ejecutar un significativamente mayor de uno, pero sigo recibiendo un «ErrorLaunch tiempo de espera error». Sólo tengo una sola GPU, así que me preguntaba si hay algo más que podría estar obligando a la gpu para responder antes de que finalice el kernel, esp, ya que sólo debe tomar unos 4-5 minutos a ejecutar y el tiempo de espera se establece para un número tan grande? Gracias por su tiempo, realmente lo aprecio.
  8. 2

    Es posible desactivar este comportamiento en Linux. Aunque el «watchdog» tiene un propósito obvio, puede causar algunos resultados inesperados cuando se hace extensiva cálculos usando shaders /CUDA.

    La opción se puede activar o desactivar en su X-configuración (probablemente /etc/X11/xorg.conf)

    Añadido: Opción «Interactivo» de «0» a la sección de dispositivo de su GPU que hace el trabajo.

    ver CUDA Visual Profiler ‘Interactivo’ X opción de configuración?

    Para obtener detalles sobre la configuración de la

    y

    consulte ftp://download.nvidia.com/XFree86/Linux-x86/270.41.06/README/xconfigoptions.html#Interactive

    Para una descripción del parámetro.

Dejar respuesta

Please enter your comment!
Please enter your name here