2011-01-09 9 views
17

Quindi diciamo che ho alcuni computer a casa.Esistono semplici soluzioni per distribuire il lavoro di calcolo in .NET?

Diciamo anche che ho qualche algoritmo che voglio eseguire, che in genere richiede molto tempo per risolverlo. Può essere diviso in quante parti voglio, quindi posso farne parte in una macchina, una parte in un'altra, ecc. E alla fine ho solo bisogno di unire i risultati in uno dei computer.

La mia domanda è se c'è un modo semplice e diretto in .NET di fare uso di più computer per fare questo tipo di calcoli. Se sì, come si chiama? Non intendo dover codificare tutto il codice IPC da solo, qualcosa di simile a BCL's Tasks ma che mi permetterebbe di inviare "lavoro" ad altri computer, tramite un IP o qualcosa del genere.

Grazie!

+0

Forse vuoi qualcosa come Hadoop per .NET? Vedi http://stackoverflow.com/questions/339344/is-there-a-net-equivalent-to-apache-hadoop –

risposta

7

In informatica generale, distribuito, ci sono due modelli: Message Passing e memoria condivisa

E ' sembra che tu sia interessato a Messa ge Passing, perché in genere coinvolge più computer che comunicano attraverso la rete. La memoria condivisa utilizza il sistema di memoria per comunicare tra processi. Dalla mia (limitata) esperienza nel calcolo distribuito, quasi tutti quelli che usano Message Passing mentre il loro modello è passato a MPI. MPI è un framework che è stato implementato in molte lingue. Ci sono alcune implementazioni .NET MPI piuttosto forti là fuori.

In questo post si presuppone che si stia facendo "calcolo distribuito" in uno scenario HPC. In uno scenario del genere, si avrebbero molti potenti computer, connessi tramite una rete di interconnessione, in una stanza del server (o simili). Se stai cercando una sorta di calcolo distribuito tra macchine fisiche separate (come folding @ home), dovrai trovare qualcos'altro o eseguire il rollover della tua soluzione. Pertanto, come menziona Leniel Macaferi nella sua risposta, è necessario assicurarsi che il data center stia eseguendo una versione di Microsoft HPC Server. La maggior parte dei cluster HPC presenta alcuni elementi di linux, che ovviamente ti impediscono di implementare una soluzione basata su .NET.

+0

Quindi Microsoft HPC Server gira su Linux? E come ti impedirebbe di implementare qualcosa basato su .Net? c'è sempre mono – Earlz

+1

Sto dicendo che la maggior parte dei cluster HPC esegue linux, quindi è necessario verificare con l'amministratore del cluster. È necessario installare mono o allocare un po 'di tempo su un cluster Microsoft HPC Server per eseguire una soluzione .NET su un cluster HPC. Microsoft HPC Server ha solo circa l'1% di markethare nello spazio HPC rispetto ai numeri che ho visto, quindi è piuttosto raro trovare un cluster HPC configurato per eseguire una soluzione .NET MPI senza fare alcuna comunicazione con il amministratori. –

3

Questo è un partner perfetto per Microsoft HPC Server distro come si è sintonizzato appositamente per affrontare questo tipo di situazione.

Non so nulla che possa fare puramente basato su .NET. Ovviamente è possibile, ma richiederebbe una certa codifica.

Anche se non ciò che si vuole, vi consiglio di leggere sui .NET Task Parallel Library che consente di dividere il carico di lavoro automaticamente tra le CPU a disposizione del computer (core) in modo rapido e indolore.

articoli interessanti relativi al calcolo distribuito:

C# Remoting and Distributed Computing

Legion: Build your own virtual super computer with Silverlight

Windows Communication Foundation (WCF)

+1

Se hai già l'algoritmo in esecuzione in .NET, non dovresti impiegare troppo tempo per portarlo su WCF ed eseguirlo su tutte le macchine che vuoi e poi avere solo un master (server) responsabile dell'invio dei "lavori" e combinare tutti i risultati. Potresti avere i client tutti in esecuzione .net Libreria parallela – Gaven

1

Microsoft ha nei propri laboratori di ricerca una mappa per ridurre l'implementazione di Linq denominata Dryad Linq (attualmente la versione beta è disponibile solo sui server HPC) ma sembra molto interessante e fa ciò che si sta cercando.

0

Microsoft HPC Server richiede un sistema operativo server. Dai suoni di esso, non stai facendo funzionare un OS del server. Supponendo che tu stia utilizzando una versione desktop di Windows con .NET 4.0 installato, è possibile provare una di queste opzioni:

  1. È possibile suddividere manualmente il lavoro ed eseguire i pezzi manualmente.

  2. È possibile utilizzare qualcosa MPAPI e codificare i propri nodi e lavoratori.

  3. È possibile scrivere un'applicazione di console e utilizzare DuoVia.MpiVisor da distribuire ed eseguire sulle workstation. (Full disclosure: io sono l'autore di MpiVisor)

fare calcolo distribuito in modo casuale, senza un sacco di storie non è così facile come una cosa forza, ma una di queste due opzioni dovrebbe arrivare lì.

Problemi correlati