2011-09-22 11 views
7

Estoy trabajando con alguien que tiene algún código de MATLAB que desean acelerar. Actualmente están tratando de convertir todo este código en CUDA para que se ejecute en una CPU. Creo que sería más rápido usar la caja de herramientas de cómputo paralelo de MATLAB para acelerar esto y ejecutarlo en un clúster que tenga la Caja de herramientas de computación distribuida de MATLAB, lo que me permite ejecutar esto en varios nodos de trabajadores diferentes. Ahora, como parte de la caja de herramientas de computación paralela, puede usar things like GPUArray. Sin embargo, estoy confundido sobre cómo funcionaría esto. ¿Están usando cosas como parfor (paralelización) y gpuarray (programación gpu) compatibles entre sí? ¿Puedo usar ambos? ¿Se puede dividir algo en diferentes nodos de trabajadores (paralelización) al tiempo que se utilizan las GPU disponibles para cada trabajador?MATLAB Parallel Computing Toolbox - Parallization vs GPU?

Piensan que todavía vale la pena explorar el tiempo que lleva convertir todo el código de matlab en código cuda para ejecutar en una máquina con múltiples GPU ... pero creo que el enfoque correcto sería usar las funciones ya integradas MATLAB.

¡Cualquier ayuda, consejo, dirección sería realmente apreciada!

Gracias!

+0

Quizás le interese probar Jacket para este en lugar de gpuArays.No he escuchado a nadie feliz con la actuación de gpuArrays, por estos motivos: http://accelereyes.com/compare – arrayfire

Respuesta

8

Cuando utiliza parfor, está dividiendo efectivamente su bucle for en tareas, con una tarea por iteración de bucle, y dividiendo esas tareas para ser calculadas en paralelo por varios trabajadores donde cada trabajador puede considerarse como una sesión de MATLAB sin una interfaz gráfica de usuario interactiva. Configure su clúster para que ejecute un número específico de trabajadores en cada nodo del clúster (generalmente, elegiría ejecutar una cantidad de trabajadores igual a la cantidad de núcleos de procesador disponibles en ese nodo).

Por otro lado, gpuarray indica a MATLAB que desea hacer que una matriz esté disponible para su procesamiento por la GPU. Debajo del capó, MATLAB está coordinando los datos de la memoria principal con la memoria interna de la tarjeta gráfica. Ciertas funciones de MATLAB (hay una lista de ellas en la documentación) pueden operar en gpuarrays y el cálculo ocurre en la GPU.

Las principales diferencias entre las dos técnicas son que los cálculos parfor pasan en las CPU de los nodos del clúster con acceso directo a la memoria principal. Por lo general, los núcleos de CPU tienen una velocidad de reloj alta, pero normalmente hay menos de ellos en un clúster de CPU que núcleos de GPU. Individualmente, los núcleos GPU son más lentos que un núcleo de CPU típico y su uso requiere que los datos se transfieran de la memoria principal a la memoria de video y viceversa, pero hay muchos más en un clúster. Por lo que yo sé, se supone que los enfoques híbridos son posibles, en los que tienes un grupo de PC y cada PC tiene uno o más tableros de Nvidia Tesla y usas tanto parfor loops como gpuarrays. Sin embargo, no he tenido ocasión de probar esto todavía.

-2

Si lo escribe en CUDA, se garantiza que se ejecutará en paralelo en el nivel de chip en lugar de ir con la mejor estimación de MATLAB para una arquitectura no paralela y su mejor esfuerzo para que se ejecute en paralelo.

Algo así como beber agua fresca de montaña en comparación con comprar agua filtrada. Ve con la solución purista.

3

Si está interesado principalmente en simulaciones, el procesamiento de GPU es la elección perfecta. Sin embargo, si desea analizar datos (grandes), vaya con Parallization. La razón para esto es que el procesamiento de la GPU es más rápido que el procesamiento de la CPU si no tiene que copiar los datos hacia adelante y hacia atrás. En el caso de una simulación, puede generar la mayoría de los datos en la GPU y solo necesita copiar el resultado. Si intenta trabajar con datos más grandes en la GPU, muy a menudo se encontrará con problemas de memoria. La paralización es genial si tiene estructuras de datos grandes y más de 2 núcleos en la CPU de su computadora.