Posso usar push::host_vector ou devo usar cudaHostAlloc para cópia zero com Thrust?
Pergunta
Quero usar cópia zero na memória mapeada por cudaHostGetDevicePointer
.Eu posso usar thrust::host_vector
ou devo usar cudaHostAlloc(...,cudaHostAllocMapped)?
Ou é de alguma forma mais fácil de fazer com o Thrust?
Solução
Tenho certeza de que ainda não é possível usar um push::host_vector como uma alocação de host mapeada.Existe um alocador de memória fixado, mas não acredito que a memória mapeada esteja disponível.O que você precisa fazer é algo assim:
- Memória de host fixada e mapeada alocada com
cudaHostAlloc
- Obtenha o ponteiro do dispositivo para a memória de cópia zero usando
cudaHostGetDevicePointer
- Criar uma
thrust::device_ptr
usandothrust::device_pointer_cast
naquele ponteiro do dispositivo (veja aqui Para maiores informações)
Você pode fazer um thrust::device_vector
usando o thrust::device_ptr
ou passar diretamente o thrust::device_ptr
para qualquer algoritmo que aceite um iterador.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow