Estoy tratando de averiguar si el uso de cudaHostAlloc (o cudaMallocHost?) Es apropiado.CUDA Consideraciones sobre la memoria cero copia
Estoy tratando de ejecutar un núcleo donde mis datos de entrada son más que la cantidad disponible en la GPU.
¿Puedo cudaMallocHost más espacio que en la GPU? Si no, y digamos que asigné 1/4 del espacio que necesito (que se ajustará a la GPU), ¿hay alguna ventaja con el uso de memoria fija?
En esencia, tendré que copiar desde ese búfer de 1/4 de tamaño en mi búfer malloc'd de tamaño completo y eso probablemente no sea más rápido que el simple uso de cudaMalloc normal ¿verdad?
¿Este típico escenario de uso correcto para el uso cudaMallocHost:
- memoria del host allocate clavado (permite llamarlo "h_p")
- h_p poblar con la entrada Data- puntero del dispositivo
- get en la GPU para h_p
- núcleo de ejecución mediante ese puntero dispositivo para modificar el contenido de Expandido
- uso h_p como normal, que ahora se ha modificado contenido-
Entonces, ninguna copia tiene que contentarse entre los pasos 4 y 5, ¿verdad?
si eso es correcto, entonces puedo ver la ventaja para los núcleos que se ajuste en la GPU a la vez al menos
Parece que se está haciendo varias preguntas ... – jmilloy
@Derek Para evitar copias cuando se usa memoria no pagable (también conocida como memoria fija) en el host con 'cudaHostAlloc () 'solo tienes que usar la bandera' cudaHostAllocMapped' en lugar de 'cudaHostAllocDefault' al asignar. De esta forma, puede acceder a la memoria del host directamente desde los kernels C de CUDA. Esto se conoce como 'memoria de copia cero '. La memoria fija también es como una espada de doble filo, la computadora que ejecuta la aplicación necesita tener memoria física disponible para cada búfer bloqueado en la página, ya que estos búferes nunca se pueden intercambiar al disco, pero esto lleva a que se agote la memoria. – BugShotGG