2012-01-26 11 views
6

Sto cercando alcune indicazioni con C# e programmazione parallela. So che esiste MPI .NET e OpenMP non è supportato. La mia domanda allora: c'è qualche altra libreria (TPL?) O una funzionalità che può realizzare la funzionalità che fornisce OpenMP? Lavorerò (si spera!) Con l'ultima versione di mono (C# .NET 4.0). Il codice verrà eseguito su un Cray XT6M, quindi l'utilizzo delle risorse di ciascuna scheda e su un nodo sarà importante. Grazie per il tuo tempo!C# HPC - MPI e OpenMP

+0

.NET 4 supporta la programmazione parallela. non ti piace il modo in cui Microsoft gestisce i compiti paralleli ?! – amrfaissal

+2

Sì ... quando si hanno 1248 core semplicemente invocando un paio di thread non lo si taglia. Grazie per aver provato. – Volvox

+0

Bene, in tutta onestà parte della domanda era chiedere OpenMP, e ci sono diverse opzioni di threading in C#. Per quanto riguarda la memoria distribuita, però, non lo so - MPI.NET sembra che sia stato abbandonato alla fine del 2008 e non sono sicuro di quali altre opzioni esistano a un livello middleware simile. Quasi certamente nulla che sarebbe sintonizzato per l'interconnessione Seastar +. –

risposta

4

Si potrebbe dare un'occhiata a Dryad, un approccio di programmazione parallela di Microsoft, dove C# è in realtà un cittadino di prima classe. Apparentemente Microsoft lo usa per Bing e prepara gli algoritmi di tracciamento del corpo per Kinect [2]. Utilizza un parallelismo dei dati a grana più grossa rispetto a OpenMP. È più simile ai processi con pipe che ai thread con memoria condivisa.

Temo che impostarlo su un sistema Mono/Linux/Cray sarà probabilmente a dir poco difficile. Detto questo, C# non è il tipico linguaggio HPC. In genere sarà molto difficile eseguire C# in modo efficiente con questa scala/tipo di sistema. Raccomanderei di valutare il porting del software su un linguaggio HPC di "prima classe", ad es. C, Fortran.

Anche come nota: OpenMP non viene ridimensionato su una macchina Cray XT6M completa (o qualsiasi cluster HPC per quella materia), è possibile utilizzare questa forma di parallelismo (memoria condivisa). Per comunicare tra i nodi è necessaria un'altra forma di parallelismo, in genere MPI. Puoi anche utilizzare MPI all'interno di un nodo.

+0

Grazie, sembra interessante. Ho completato il progetto in C usando ibrido MPI/OMP. Guardando indietro C# potrebbe essere in grado di funzionare in un tale ambiente, e potrebbe avere vantaggi come Dryad e progetti simili andare avanti, ma il controllo e la velocità di C o Fortran è semplicemente troppo importante per passare in un programma HPC. – Volvox

+0

In realtà non ho realizzato l'età di questa domanda. Sono felice che tu abbia potuto portare a termine il progetto! – Zulan

1

C# è un linguaggio meraviglioso per molte cose, ma da solo non trarrà alcun vantaggio da Cray. Gli sviluppatori di Microsoft ottimizzano le librerie per una dozzina di core o meno, probabilmente, e gli sviluppatori di Xamarin si preoccupano di più dei telefoni cellulari. Vuoi MPI o un altro linguaggio di programmazione parallelo sotto di te. Puoi farlo con C# e molti altri linguaggi (anche Python è popolare nel mondo HPC), ma la chiave è in cima alle librerie giuste. TPL non lo taglierà a quella scala di parallelismo.