Observo sustanciales mejoras en la transferencia de datos cuando yo uso cubrió la memoria para CUDA las transferencias de datos. En linux, el sistema subyacente llame para lograr esto es mlock. Desde la página man de mlock, indica que el bloqueo de la página que impide que se intercambia:

mlock() bloquea las páginas en el rango de dirección de partida en dirección y continuando por len bytes. Todas las páginas que contienen una parte de la dirección especificada gama están garantizados para ser residente en la memoria RAM cuando la llamada se devuelve correctamente;

En mis pruebas, he tenido un fews gigas de memoria libre en mi sistema, así que nunca hubo riesgo de que las páginas de memoria podría haber sido intercambiado sin embargo, todavía me observó la aceleración. ¿Alguien puede explicar lo que realmente está pasando aquí?, cualquier idea o info se agradece mucho.

  • ¿Medir el tiempo de mlock sí mismo?
  • No, el tiempo real que tarda en ejecutarse la mlock llamada se presume ser insignificante(si es eso lo que estás preguntando). El real sobrecarga es la transferencia de datos real, que en mi algoritmo es una fracción significativa del total de tiempo de ciclo.
  • ¿Qué es la CPU? Tal vez, NUMA habilitado nodos no se benefician de simple mlock().
  • AMD Phenom(tm) II X4 970 Procesador

3 Comentarios

  1. 71

    CUDA Driver cheques, si el intervalo de memoria está bloqueada o no y, a continuación, hará uso de diferentes codepath. Bloqueado la memoria se almacena en la memoria física (RAM), por lo que el dispositivo puede recuperar w/o de la ayuda de la CPU (DMA, también conocido como Async copia; dispositivo sólo necesita una lista de páginas físicas). No-memoria bloqueada puede generar un error de página en el acceso, y que se almacena no sólo en la memoria (por ejemplo, puede ser en swap), por lo que el controlador necesario para acceder a cada página de la no-memoria bloqueada, copie en el buffer fijado y se pasa a DMA (Syncronious, página por página impresa).

    Como se describe aquí http://forums.nvidia.com/index.php?showtopic=164661

    de host de la memoria utilizada por el asincrónica mem copia llamada debe ser la página bloqueada a través de cudaMallocHost o cudaHostAlloc.

    También puedo recomendar para comprobar cudaMemcpyAsync y cudaHostAlloc manuales en developer.download.nvidia.com. HostAlloc dice que cuda controlador puede detectar anclado memoria:

    El controlador de pistas de la memoria virtual de los rangos asignados con este(cudaHostAlloc) la función y automáticamente acelera las llamadas a funciones tales como cudaMemcpy().

    • ah, DMA!, que tiene sentido.
    • Me pregunto cuánto havok puede crear por tener otro hilo intentar munlock las páginas después de la emisión de la asincrónico de comandos de copia?
    • Zan Lince, Interesante pregunta. ¿Por qué usted está deseando para desbloquear esta memoria? No puede ser de hasta 2-4 GB de memoria bloqueada incluso en PC de 32-bit, y más cuando PCI-express card tiene acceso a la versión de 64 bits (en reales de 40 o 48bit) direccionamiento. Es mucho-mucho más barato que comprar más de la memoria, a continuación, a pagar muy expirenced (18k rep! en ASÍ) programador. En Linux, creo (creo), munlock será bloqueado o devolverá el error, y no hay daños en el sistema será inflicked.
    • Puedo aplicar cudaHostRegister para el puntero de archivo asignado en memoria?
  2. 9

    CUDA uso de DMA para transferir cubrió la memoria de la GPU. Paginable de host de la memoria no se puede utilizar con DMA porque pueden residir en el disco.
    Si la memoria no es fija (es decir, página bloqueada), la primera copia a una página bloqueada «puesta en escena» de búfer y, a continuación, se copian a la GPU a través de la DMA.
    Así que, usando el clavado de la memoria de guardar el tiempo para copiar de paginable de la memoria principal a la página bloqueada la memoria principal.

  3. 5

    Si las páginas de memoria no había sido visitado todavía, fueron probablemente nunca se intercambian en comenzar con. En particular, las nuevas páginas asignadas serán copias virtuales de la universal «página cero» y no tiene un físico de la creación de instancias hasta que se hayan escrito. Los nuevos mapas de archivos en el disco del mismo modo siendo puramente en el disco hasta que se hayan leído o escrito.

    • Creo que no es un caso (lo escribo en la variante temprana de mi respuesta), como es un programa real y el mlock() era rápido en el programa (marque comentario #2 a la Q).
    • De hecho, la aceptación de la respuesta se parece a la verdadera razón.

Dejar respuesta

Please enter your comment!
Please enter your name here