¿Puedo usar Thrust::host_vector o debo usar cudaHostAlloc para realizar copias cero con Thrust?
Pregunta
Quiero usar copia cero en la memoria asignada por cudaHostGetDevicePointer
.Puedo usar thrust::host_vector
o debo usar cudaHostAlloc(...,cudaHostAllocMapped)?
¿O es de alguna manera más fácil hacerlo con Thrust?
Solución
Estoy bastante seguro de que todavía no es posible utilizar Thrust::host_vector como asignación de host asignada.Hay un asignador de memoria anclado, pero no creo que la memoria asignada esté disponible.Lo que necesitas hacer es algo como esto:
- Memoria de host fijada y asignada asignada con
cudaHostAlloc
- Obtenga el puntero del dispositivo para la memoria de copia cero usando
cudaHostGetDevicePointer
- Crear un
thrust::device_ptr
usandothrust::device_pointer_cast
en el puntero de ese dispositivo (consulte aquí para más información)
Puedes hacer un thrust::device_vector
utilizando el thrust::device_ptr
o pasar directamente el thrust::device_ptr
a cualquier algoritmo que acepte un iterador.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow