tengo:Mejor o igual: CPU memcpy() vs dispositivo cudaMemcpy() en memoria fija, asignada en CUDA?
-
memoria
- anfitrión que se ha fijado con éxito y mapeado usando
cudaHostAlloc(..., cudaHostAllocMapped)
ocudaHostRegister(..., cudaHostRegisterMapped)
; - Los punteros del dispositivo se han obtenido usando
cudaHostGetDevicePointer(...)
.
Inicié cudaMemcpy(..., cudaMemcpyDeviceToDevice)
en src y dest indicadores de dispositivo que apuntan a dos regiones diferentes de memoria fija + asignada obtenidas mediante la técnica anterior. Todo funciona bien.
Pregunta: ¿Debería continuar haciendo esto o simplemente usar un estilo de CPU tradicional memcpy()
ya que todo está en la memoria del sistema de todos modos? ... o son los mismos (es decir, ¿se correlaciona cudaMemcpy
con un memcpy
recto cuando están fijados tanto src como dest)?
(Sigo usando el método cudaMemcpy
porque antes todo estaba en su dispositivo de memoria global, pero desde entonces han cambiado a la memoria fijada debido a las limitaciones de tamaño GMEM)
es una pregunta interesante. Siempre que use una memcpy optimizada, la CPU es probablemente mejor, la memoria le pertenece, después de todo, y la capacidad discreta de una GPU de hacer host> host memcpy está limitada al ancho de banda PCIe. Pero si la GPU estaría inactiva de lo contrario, ¿por qué no? – ArchaeaSoftware
Espero que la GPU no esté haciendo la copia. Espero que el tiempo de ejecución vea que los punteros son punteros de host e invocan un memcpy de host. He pedido averiguar qué sucede en realidad. – harrism