2011-01-09 9 views
17

Załóżmy, że mam w domu kilka komputerów.Czy są jakieś proste rozwiązania do dystrybucji pracy obliczeniowej w .NET?

Powiedzmy też, że mam jakiś algorytm, który chcę uruchomić, na ogół zajmuje dużo czasu na rozwiązanie. Można go podzielić na tyle części, ile chcę, więc mógłbym uruchomić jego część na jednym komputerze, część w innym itp., A na koniec wystarczy połączyć wyniki na jednym z komputerów.

Moje pytanie brzmi, czy istnieje prosty i bezpośredni sposób .NET korzystania z kilku komputerów do wykonywania tego rodzaju obliczeń. Jeśli tak, jak się nazywa? Nie mam na myśli konieczności samodzielnego kodowania całego kodu IPC, czegoś podobnego do Zadania BCL, ale które pozwoliłoby mi wysłać "pracę" na inne komputery, przez IP lub coś takiego.

Dzięki!

+0

Może chcesz coś takiego jak Hadoop dla .NET? Zobacz http://stackoverflow.com/questions/339344/is-there-a-net-equivalent-to-apache-hadoop –

Odpowiedz

7

W ogólnym rozproszonego, istnieją dwa modele: Message Passing i pamięć współdzielona

To brzmi, jakbyś był zainteresowany Messą ge Passing, ponieważ zazwyczaj obejmuje wiele komputerów komunikujących się za pośrednictwem sieci. Pamięć współdzielona wykorzystuje system pamięci do komunikacji między procesami. Z mojego (ograniczonego) doświadczenia w przetwarzaniu rozproszonym prawie każdy, kto korzysta z Message Passing jako swojego modelu, przeniósł się do MPI. MPI to framework, który został wdrożony w wielu językach. Istnieje kilka dość mocnych implementacji .NET MPI.

Ten post zakłada, że ​​wykonujesz "przetwarzanie rozproszone" w scenariuszu HPC. W takim scenariuszu miałbyś wiele potężnych komputerów, połączonych przez sieć połączeń międzysieciowych, w serwerowni (lub podobnej). Jeśli szukasz pewnego rodzaju rozproszonego przetwarzania między oddzielnymi maszynami fizycznymi (takimi jak składanie @ home), musisz znaleźć coś innego lub przetestować własne rozwiązanie. Dlatego, jak wspomina Leniel Macaferi w swojej odpowiedzi, musisz upewnić się, że w centrum danych działa pewna wersja serwera HP HPC. Większość klastrów HPC ma smak linuksa, co oczywiście uniemożliwia wdrożenie rozwiązania opartego na .NET.

+0

Więc Microsoft Serwer HPC działa na systemie Linux? A w jaki sposób uniemożliwiłoby Ci wdrożenie czegoś opartego na platformie .NET? zawsze jest monofoniczny – Earlz

+1

Mówię, że większość klastrów HPC używa Linuksa, więc musisz skontaktować się z administratorem klastra. Aby uruchomić rozwiązanie .NET w klastrze HPC, musisz zainstalować mono lub uzyskać trochę czasu w klastrze Microsoft HPC Server. Microsoft HPC Server ma tylko około 1% udziału w rynku w przestrzeni HPC z liczb, które widziałem, więc jest to dość rzadkie, że znajdziesz klastra HPC skonfigurowanego do uruchamiania rozwiązania .NET MPI bez jakiejkolwiek komunikacji z administratorzy. –

3

To idealne rozwiązanie dla dystrybucji Microsoft HPC Server, ponieważ jest dostrojone specjalnie do rozwiązania tego typu sytuacji.

Nie wiem nic, co może to zrobić wyłącznie w oparciu o .NET. To oczywiście możliwe, ale wymagałoby to trochę kodu.

Chociaż nie jest to coś, czego potrzebujesz, polecam przeczytać o .NET Task Parallel Library, który pomaga szybko i bezboleśnie podzielić obciążenie pracą na dostępne procesory (rdzenie) komputera.

Ciekawe artykuły związane z rozproszonego:

C# Remoting and Distributed Computing

Legion: Build your own virtual super computer with Silverlight

Windows Communication Foundation (WCF)

+1

Jeśli masz już algorytm działający w .NET, nie powinieneś długo czekać na przeniesienie go do WCF i uruchomić go na tyle maszyn, ile chcesz, a następnie po prostu mieć jakiś master (serwer) odpowiedzialny za wysyłanie "zadań" i połączyć wszystkie wyniki z powrotem. Możesz wtedy mieć wszystkich klientów uruchomionych .NET Parallel Library – Gaven

1

Firma Microsoft ma w swoich laboratoriach badawczych Mapę zmniejszającą implementację Linq o nazwie Dryad Linq (obecnie wersja beta jest dostępna tylko na serwerach HPC), ale wygląda to bardzo interesująco i robi to, czego szukasz.

0

Serwer Microsoft HPC wymaga systemu operacyjnego serwera. Z jego dźwięków nie korzystasz z systemu operacyjnego serwera. Zakładając, że korzystasz z komputerowej wersji systemu Windows z .NET 4.0 zainstalowany, możesz wypróbować jedną z następujących opcji:

  1. Można ręcznie podzielić prace i wykonać części ręcznie.

  2. Możesz użyć czegoś MPAPI i zakodować własne węzły i pracowników.

  3. Można napisać aplikację konsoli i użyć DuoVia.MpiVisor do dystrybucji i wykonywania na stacjach roboczych. (Pełne ujawnienie: Jestem autorem MpiVisor)

Doing przetwarzania rozproszonego w swobodnej modzie bez dużego zamieszania nie jest tak proste, jak można by rzecz, ale żadnej z tych dwóch opcji powinien dostać się tam.

Powiązane problemy