Pregunta

Pycuda, a pesar de todas sus fallas, generalmente tiene muy buenos ejemplos proporcionados / descargables desde el wiki. Pero no pude encontrar nada en los ejemplos o en la documentación (o en una búsqueda cursiva de Google) que demuestra la forma pycuda de asignar cargas de trabajo dianmicamente a múltiples dispositivos.

¿Alguien puede insinuarme hacia lo que debería estar haciendo o señalarme ejemplos?

Una idea que apareció en mi cabeza fue usar multiprocesamiento, generar un conjunto de n. funciona) es el round-roBin es los multiprocesos. ¿Qué tan buena / retrasada es esta idea?

PS My Dev Machine es 1 GPU y mi máquina de prueba en 4 GPU, por lo que necesito cualquier solución para poder lidiar con un número dinámico de dispositivos (tampoco ayuda que sean capacidades de cálculo diferentes, pero esa es la vida)

¿Fue útil?

Solución

Pycuda no ha tenido ningún soporte intrínseco de GPU múltiple porque CUDA tampoco ha tenido ningún soporte intrínseco de GPU múltiple. Esto cambiará en CUDA 4.0 porque la API se ha cambiado para que sea seguro de hilos y múltiples GPU. Pero Pycuda aún no tiene ese apoyo AFAIK. Incluso cuando llegue, cada dispositivo debe ser administrado explícitamente y la carga de trabajo dividida por usted. No hay una distribución automática de la carga de trabajo ni nada de eso.

Para multi-GPU, normalmente he usado mpi4py. Potencialmente, podría usar un esquema de Python multiproceso, con cada hilo abriendo un contexto separado en Pycuda. Lo que funciona mejor probablemente dependerá de la cantidad de comunicación que se requiera entre los dispositivos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top