2012-01-26 17 views
6

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

+0

.NET 4 admite la programación en paralelo. ¿No te gusta la forma en que Microsoft trata las tareas paralelas? – amrfaissal

+2

Sí ... cuando tiene 1248 núcleos, simplemente invocar un par de hilos no lo cortará. Gracias por intentarlo. – Volvox

+0

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 +. –

Respuesta

4

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.

+0

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

+0

No me había dado cuenta de la edad de esta pregunta. ¡Me alegra que hayas podido compelir el proyecto! – Zulan

1

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.