Estoy buscando alguna guía con C# y programación paralela. Sé que MPI .NET existe, y OpenMP no es compatible. Mi pregunta es: ¿hay alguna otra biblioteca (TPL?) O característica que pueda cumplir la funcionalidad que ofrece OpenMP? Voy a estar trabajando (¡con suerte!) Con la última versión de mono (C# .NET 4.0). El código se ejecutará en un Cray XT6M, por lo que será importante utilizar los recursos uno en cada placa y en un nodo. ¡Gracias por tu tiempo!C# HPC - MPI y OpenMP
Respuesta
Puede echar un vistazo a Dryad, un enfoque de programación paralelo de Microsoft, donde C# es en realidad un ciudadano de primera clase. Al parecer, Microsoft lo usa para Bing y para el entrenamiento de los algoritmos de seguimiento del cuerpo para Kinect [2]. Utiliza más paralelismo de datos de grano grueso que OpenMP. Es más como procesos con tuberías que hilos con memoria compartida.
Me temo que instalarlo en un sistema Mono/Linux/Cray probablemente sea difícil de decir. Dicho esto, C# no es el lenguaje típico de HPC. Por lo general, será muy difícil ejecutar C# de manera eficiente en esta escala/tipo de sistema. Recomendaría evaluar la migración de su software a un lenguaje HPC de "primera clase", p. C, Fortran.
También como una nota: OpenMP no escala sobre una máquina Cray XT6M completa (o cualquier clúster HPC para el caso), puede utilizar esta forma de paralelismo (memoria compartida). Para comunicarse entre nodos necesita otra forma de paralelismo, típicamente MPI. También puedes usar MPI dentro de un nodo.
Gracias, esto se ve interesante. Completé el proyecto en C usando MPI/OMP híbrido. Mirando hacia atrás, C# podría funcionar en un entorno de este tipo, y podría tener ventajas a medida que Dryad y proyectos similares avancen, pero el control y la velocidad de C o Fortran son demasiado importantes como para dejarlos pasar en un programa de HPC. – Volvox
No me había dado cuenta de la edad de esta pregunta. ¡Me alegra que hayas podido compelir el proyecto! – Zulan
C# es un lenguaje maravilloso para muchas cosas, pero por sí solo, no aprovechará al máximo ese Cray. Los desarrolladores de Microsoft optimizan las bibliotecas por una docena de núcleos o menos, y los desarrolladores de Xamarin se preocupan más por los teléfonos celulares. Desea MPI u otro lenguaje de programación paralelo debajo de usted. Puede hacerlo con C# y varios otros idiomas (Python también es popular en el mundo de HPC), pero la clave está sobre las bibliotecas correctas. TPL no lo reducirá a esa escala de paralelismo.
- 1. Explicación de OpenMP y MPI
- 2. Programación en C++ para clusters y HPC
- 3. MPI y C construye
- 4. Extensiones Python y OpenMP C
- 5. ¿Qué es más fácil de aprender y depurar OpenMP o MPI?
- 6. Variables globales y MPI
- 7. HPC (principalmente en Java)
- 8. C++ OpenMP programa
- 9. ¿Relación OpenMP y NUMA?
- 10. Netbeans MPI C++ ¿cómo comenzar?
- 11. ¿MPI o zócalos?
- 12. OpenMP y núcleos/hilos
- 13. OpenMP y STL vector
- 14. OpenMP y estilo STL para
- 15. OpenMP y C parallel for loop: ¿por qué mi código se ralentiza cuando se usa OpenMP?
- 16. serialización de estructuras en C y transferencia sobre MPI
- 17. MPI IO Bloque de lectura y escritura Matriz cíclica
- 18. Uso de vectores en MPI (C++)
- 19. MPI y D: Opciones del vinculador
- 20. Afinidad de OpenMP y CPU
- 21. memoria compartida, MPI y sistemas de colas
- 22. ¿Qué lenguaje/marco para HPC: Java/.Net/Delphi/C/C++/Objective-C?
- 23. Mixing Boost FOREACH macro y OpenMP paralelización
- 24. C++: protección de memoria compartida OpenMP
- 25. Diferencias entre LAM MPI y OpenMPI
- 26. Cargando biblioteca compartida en open-mpi/mpi-run
- 27. ¿Necesito tener un MPI :: Irecv correspondiente para un MPI :: Isend?
- 28. Error de segmentación con OpenMp y SSE
- 29. MPI: ¿núcleos o procesadores?
- 30. Sección crítica en MPI?
.NET 4 admite la programación en paralelo. ¿No te gusta la forma en que Microsoft trata las tareas paralelas? – amrfaissal
Sí ... cuando tiene 1248 núcleos, simplemente invocar un par de hilos no lo cortará. Gracias por intentarlo. – Volvox
Bueno, para ser justos, parte de la pregunta era preguntar sobre OpenMP, y hay varias opciones de subprocesamiento dentro de C#. Para la memoria distribuida, no sé, parece que MPI.NET fue abandonado a fines de 2008, y no estoy seguro de qué otras opciones existen en un nivel similar de middleware. Casi con certeza nada de lo que se sintonizaría para la interconexión Seastar +. –