Estoy trabajando en un cálculo basado en series de tiempo. Cada iteración del cálculo es independiente. ¿Alguien podría compartir algunos consejos/imprimaciones en línea sobre el uso utilizando el procesamiento paralelo en Matlab? ¿Cómo se puede especificar esto dentro del código real?Cómo utilizar el procesamiento paralelo en Matlab
Respuesta
Como tiene acceso a la caja de herramientas Paralelo, le sugiero que compruebe primero si puede hacerlo de la manera más fácil.
Básicamente, en lugar de escribir
for i=1:lots
out(:,i)=do(something);
end
Usted escribe
parfor i=1:lots
out(:,i)=do(something);
end
A continuación, utiliza matlabpool
para crear un número de trabajadores (se puede tener un máximo de 8 en su máquina local con el caja de herramientas, y toneladas en un clúster remoto si también tiene una licencia de Servidor de Computación Distribuida), y ejecuta el código, y ve bonitas ganancias de velocidad cuando sus iteraciones son ejecutadas por 8 núcleos en lugar de uno.
Aunque la ruta parfor
es la más fácil, es posible que no funcione de inmediato, ya que puede hacer su indexación incorrecta, o puede estar haciendo referencia a una matriz de una manera problemática, etc. Consulte las advertencias de mlint en el editor, lea la documentación y confíe en el buen método de prueba y error, y debe resolverlo razonablemente rápido. Si tiene bucles anidados, a menudo es mejor alternar solo el más interno y asegurarse de que tenga toneladas de iteraciones: este no solo es un buen diseño, sino que también reduce la cantidad de código que podría ocasionarle problemas.
Tenga en cuenta que especialmente si ejecuta el código en una máquina local, puede encontrarse con problemas de memoria (que pueden manifestarse en una ejecución realmente lenta en modo paralelo porque está paginando): cada trabajador obtiene una copia del espacio de trabajo, así que si su cálculo implica la creación de una matriz de 500 MB, 8 trabajadores necesitarán un total de 4 GB de RAM, ¡y entonces ni siquiera ha comenzado a contar la RAM del proceso principal! Además, puede ser bueno utilizar únicamente núcleos N-1 en su máquina, de modo que aún quede un núcleo para otros procesos que puedan ejecutarse en la computadora (como un antivirus obligatorio ...).
Mathworks ofrece su propio parallel computing toolbox. Si no desea comprar eso, existen algunas opciones
- Puede escribir su propio archivo mex y usar pthreads u OpenMP.
- Sin embargo asegurarse de que no se llama a cualquier API Mex en la parte paralela del código, ya que enviaban seguro para subprocesos
- Si desea más grueso paralelismo de grano a través de MPI se puede tratar pmatlab
- mismo con parmatlab
Editar: Adición de enlace Parallel MATLAB with openmp mex files
solo he probado la primera.
puede que también le interese saber que Parallel Computing Toolbox recientemente (R2010b) introdujo la computación GPU basada en CUDA (requiere una tarjeta nvidia que admita la capacidad informática 1.3): http://www.mathworks.com/discovery/matlab-gpu .html – Amro
No olvide que muchas funciones de Matlab ya están multiproceso. Con una programación cuidadosa, puede aprovecharlos: consulte la documentación de su versión ya que Mathworks parece estar aumentando el rango y el número de funciones multiproceso con cada versión nueva. Por ejemplo, parece que 2010a tiene varios hilos fft
s que pueden ser útiles para el procesamiento de series de tiempo.
Si el multihilo intrínseco no es lo que necesita, entonces, como sugiere @srean, está disponible Parallel Computing Toolbox. Por mi dinero (o más bien, el dinero de mis empleadores) es el camino a seguir, lo que le permite programar en paralelo en Matlab, en lugar de tener que meterse en cosas. Debo admitir, también, que estoy bastante impresionado con la caja de herramientas y las instalaciones que ofrece.
Tengo acceso a la Caja de herramientas de computación en paralelo de Matlab. ¿Puedes compartir buenos cebadores/ejemplos sobre su uso? – Eduardas
@Edward: Asistí al curso de capacitación de 2 días de Mathworks en el PCT, leí la documentación y la resolví por mí mismo. Pero tengo experiencia en programación paralela con Fortran y MPI y OpenMP. Matlab Central tiene cantidades cada vez mayores de informática paralela con Matlab, que podría ser un buen lugar para comenzar. –
- 1. Procesamiento paralelo en python
- 2. Procesamiento paralelo en Linux
- 3. procesamiento paralelo simple en perl
- 4. Haciendo procesamiento paralelo en bash?
- 5. ¿Cómo hacer el procesamiento paralelo en el script Unix Shell?
- 6. Java procesamiento de archivos paralelo
- 7. framework de procesamiento paralelo en java
- 8. Xvfb pantallas múltiples para procesamiento en paralelo?
- 9. Procesamiento en paralelo o subprocesamiento en el script de shell
- 10. procesamiento paralelo frente a procesamiento del lado del cliente + ajax?
- 11. ¿Cuál es el mejor módulo para procesamiento paralelo en Perl?
- 12. Bibliotecas de procesamiento paralelo de Python
- 13. JVM (vergonzosamente) bibliotecas/herramientas de procesamiento en paralelo
- 14. MATLAB procesamiento de imágenes de pequeños círculos
- 15. procesamiento de un archivo CSV con headen con gnu paralelo
- 16. ¿Qué método de clasificación es el más adecuado para el procesamiento en paralelo?
- 17. ¿Cómo utilizar una cadena como datos para trazar en Matlab?
- 18. Qué tipo de cola usar en el procesamiento paralelo de datos - C# - .NET 4
- 19. Cómo utilizar librerías externas en el Eclipse (Java) y Procesamiento para Arduino
- 20. Cómo utilizar la ruta de búsqueda de MATLAB
- 21. MATLAB: ¿Qué ocurre con una variable global cuando se ejecuta en el modo paralelo?
- 22. MATLAB: establece el orden de estilo y color de la línea para aplicar en paralelo
- 23. Cómo procesar una matriz EN PARALELO
- 24. Procesamiento en paralelo de Java en sistemas de clúster (informática en clúster)
- 25. Cómo copiar el procesamiento: json
- 26. ¿Por dónde comenzar con la informática distribuida/procesamiento en paralelo? (Python/C)
- 27. Restando el fondo en MATLAB
- 28. Uso de nieve (y nieve) con AWS para procesamiento paralelo en R
- 29. Procesamiento paralelo desde una cola de comandos en Linux (bash, python, ruby ... lo que sea)
- 30. Fuera de error de memoria al utilizar clusterdata en MATLAB
¿Por qué es mejor paralelizar solo el bucle más interno? He leído lo contrario de toda la literatura que he buscado .NET. En general, la paralelización del gran bucle externo implica la sobrecarga de la creación de hilos con menos frecuencia que la paralelización del bucle interno. –
@Joel B: desea paralelizar un ciclo que realiza muchas iteraciones, ya que ejecutar un ciclo que tiene, por ejemplo, 500 iteraciones en un clúster de 1024 núcleos es un desperdicio. Por supuesto, el núcleo del bucle paralelizado debería tomar más tiempo que la sobrecarga de creación del hilo. Sin embargo, esto es casi siempre cierto en Matlab, ya que requiere muchos menos bucles, y por lo tanto, el cálculo dentro del bucle más interno es bastante pesado. – Jonas
Pero, ¿qué pasa con solo una PC de cuatro núcleos? Probablemente hacer el ciclo externo tiene más sentido allí? ¿Sería justo decir que paralelizar el ciclo interno es mejor si tengo un gran grupo de computadoras a mi disposición, pero el bucle externo es mejor para paralelizar si solo tengo una sola PC de varios núcleos? –