2012-07-27 19 views

Respuesta

5

Estoy bastante seguro de que todavía no es posible usar un thrust :: host_vector como una asignación de host mapeada. Hay un asignador de memoria fija, pero no creo que la memoria mapeada esté disponible. Lo que hay que hacer es algo como esto:

  1. asignada, la memoria del host clavado Numerado con cudaHostAlloc
  2. Obtener el puntero del dispositivo para la memoria de copia cero utilizando cudaHostGetDevicePointer
  3. Crear una thrust::device_ptr usando thrust::device_pointer_cast en ese puntero del dispositivo (ver here para más información)

Usted puede ya sea el hacer una thrust::device_vector utilizando el thrust::device_ptr o dirctly pasar el thrust::device_ptr a cualquier algoritmo que acepte un iterador.

+0

Gracias! Pero, ¿cómo puedo hacer que thrust :: device_vector use thrust :: device_ptr? – Alex

+1

Puede crear un 'thrust :: device_vector' de un rango de iterador, por lo que algo como' thrust :: device_vector v (p, p + n) 'crea el vector' v' del 'device_ptr'' p' que apunta a una asignación de elementos 'n'. – talonmies

+1

Pero será crear un nuevo device_vector y copiar la memoria desde device_ptr p al vector, ¿no? – Alex