Tengo preguntas sobre cómo hacer memoria fija.Cómo hacer que el valor de tipo vector a la memoria anclado en cuda
Ahora estoy usando CUDA para tratar con un gran tamaño de datos.
Para reducir el tiempo de ejecución, creo que es necesario hacer que la copia de memoria y el inicio del kernel se superpongan.
Después de buscar algunos textos y páginas web, para superponer copia de memoria y kernel-launch, noto que es necesario asignar memoria de host utilizando cudaMallocHost que asignará la memoria de host a la memoria anclada.
En el caso de usar un entero o un tipo de matriz en el host, era fácil hacer memoria fija.
Al igual que este ...
cudaStream_t* streams = (cudaStream_t*)malloc(MAX_num_stream * sizeof(cudaStream_t));
for(i=0; i<MAX_num_stream; i++)
cudaStreamCreate(&(streams[i]));
cudaMallocHost(&departure, its_size);
for(n=1; ... ; n++){
cudaMemcpyAsync(... streams[n]);
kernel <<< ... , ... , ... , streams[n] >>> (...);
}
Pero en mi caso, mi memoria de salida host está configurado por tipo vertor.
Y no puedo encontrar en ninguna parte la forma de convertir vector-type-host-memory en memoria fija utilizando cudaMallocHost.
Ayúdame o déme algunos consejos para resolver este problema. Gracias por leer mi pobre inglés. Gracias.
¿Qué quiere decir exactamente con "vector type"? ¿Te refieres a C++ 'std :: vector', o algo más? – talonmies
Sí. Quiero decir std :: vector. – Umbrella