2011-01-09 8 views
17

Digamos que tengo algunas computadoras en casa.¿Hay alguna solución simple para distribuir trabajo computacional en .NET?

También vamos a decir que tengo algún algoritmo Quiero correr, que por lo general toma mucho tiempo para resolver. Se puede dividir en cuántas partes que quiero, así que podía correr parte de ella en una sola máquina, parte de ella en otro, etc, y al final me había sólo tiene que combinar los resultados en uno de los ordenadores.

Mi pregunta es si hay alguna manera fácil y directa en .NET de hacer uso de varios ordenadores para hacer este tipo de cálculos. Si es así, ¿cómo se llama? No me refiero a tener que codificar todo el código IPC solo, algo similar a las tareas de BCL, pero eso me permitiría enviar "trabajo" a otras computadoras, a través de una IP o algo así.

Gracias!

+0

¿Quizás quieras algo como Hadoop para .NET? Consulte http://stackoverflow.com/questions/339344/is-there-a-net-equivalent-to-apache-hadoop –

Respuesta

7

En computación distribuida general, existen dos modelos: El paso de mensajes y memoria compartida

Se Parece que estás interesado en Messa Pasar, porque generalmente involucra múltiples computadoras que se comunican a través de la red. La memoria compartida usa el sistema de memoria para comunicarse entre procesos. A partir de mi experiencia (limitada) en informática distribuida, casi todos los que usan Message Passing como modelo se mudaron a MPI. MPI es un marco que se ha implementado en muchos idiomas. Hay algunas implementaciones .NET MPI bastante fuertes por ahí.

Todo este puesto supone que estás haciendo "computación distribuida" en un escenario de HPC. En tal escenario, tendría muchas computadoras poderosas, conectadas a través de una red de interconexión, en una sala de servidores (o similar). Si está buscando algún tipo de computación distribuida entre máquinas físicas separadas (como folding @ home), necesitará encontrar algo más o implementar su propia solución. Por lo tanto, como menciona Leniel Macaferi en su respuesta, deberá asegurarse de que su centro de datos ejecute alguna versión del Servidor HPC de Microsoft. La mayoría de los clústeres de HPC tienen cierto sabor de Linux, lo que obviamente le impedirá implementar una solución basada en .NET.

+0

Así Microsoft El servidor HPC se ejecuta en Linux? ¿Y cómo evitaría que implementara algo basado en .Net? Siempre hay mono – Earlz

+1

. Estoy diciendo que la mayoría de los clústeres de HPC ejecutan Linux, por lo que debe consultar con el administrador de su clúster. Debe instalar mono o asignarse algún tiempo en un clúster de Microsoft HPC Server para ejecutar una solución .NET en un clúster HPC. Microsoft HPC Server solo tiene aproximadamente 1% de cuota de mercado en el espacio HPC a partir de los números que he visto, por lo que es bastante raro que encuentre un clúster HPC configurado para ejecutar una solución .NET MPI sin hacer ninguna comunicación con el administradores. –

3

Eso es un complemento perfecto para Microsoft HPC Server distribución, ya que está sintonizado especialmente para hacer frente a este tipo de situación.

No sé nada de lo que puede hacerlo puramente basado en .NET. Eso es posible, por supuesto, pero requeriría algo de codificación.

Aunque no es lo que quieres, te recomiendo que leas sobre el .NET Task Parallel Library que te ayuda a dividir tu carga de trabajo automáticamente entre las CPU (núcleos) disponibles de la computadora de forma rápida y sin problemas.

Artículos de interés relacionados con la computación distribuida:

C# Remoting and Distributed Computing

Legion: Build your own virtual super computer with Silverlight

Windows Communication Foundation (WCF)

+1

Si ya tiene el algoritmo que se ejecuta en .NET, no debería demorar mucho en transferirlo a WCF y ejecútelo en tantas máquinas como desee y luego simplemente tenga un maestro (servidor) responsable de enviar los "trabajos" y combine todos los resultados. Luego, podría hacer que todos los clientes ejecuten .net Parallel Library – Gaven

1

Microsoft tiene en sus laboratorios de investigación un Mapa que reduce la implementación de Linq llamada Dryad Linq (actualmente la versión beta solo está disponible en servidores HPC) pero esto se ve muy interesante y hace lo que está buscando.

0

Microsoft HPC Server requiere un sistema operativo de servidor. Por lo que se dice, no estás ejecutando un sistema operativo de servidor. Suponiendo que está ejecutando una versión de escritorio de Windows con .NET 4.0 instalado, puede probar una de estas opciones:

  1. Puede dividir manualmente el trabajo y ejecutar las piezas manualmente.

  2. Puede usar algo MPAPI y codificar sus propios nodos y trabajadores.

  3. Puede escribir una aplicación de consola y usar DuoVia.MpiVisor para distribuir y ejecutar en sus estaciones de trabajo. (La revelación completa: yo soy el autor de MpiVisor)

Haciendo computación distribuida de una manera informal y sin mucho alboroto no es tan fácil como una cosa fuerzas, pero ninguna de estas dos opciones debe llegar hasta allí.

Cuestiones relacionadas