Czy można połączyć moc obliczeniową 2 komputerów?

14

Oto kilka pytań, chciałbym, żebyś mógł mnie oświecić.

  1. Czy można połączyć moc obliczeniową 2 komputerów?
  2. Jak mam to zrobić?
Wern Ancheta
źródło
7
1) Z pewnością. 2) Z ogromnym trudem.
Daniel R Hicks,

Odpowiedzi:

11

Nieprzejrzyste, gdzie działający program może w jakiś sposób użyć drugiego komputera do wykonania kodu, ponieważ są one logicznie oddzielne, bez możliwości komunikacji między jednostkami centralnymi i dostępu do pamięci.

To nie znaczy, że nie możesz łączyć mocy obliczeniowej:

  1. Określone oprogramowanie może zawierać komponenty, które mogą być uruchamiane na innych komputerach, np. Fałdowanie białek, SETI @ home. Są to zwykle specjalizacje, tzn. Nie można uruchomić programu Excel i powiedzieć mu, aby używał innego komputera do obliczeń.
  2. Jeśli wykonujesz zadania intensywnie wykorzystujące procesor, możesz użyć drugiego komputera do ich uruchomienia, np. Kodowania / przekodowywania strumienia wideo.

Jeśli chcesz w jakikolwiek sposób wykorzystać drugi komputer, kluczowa jest możliwość zdalnego sterowania. Dwa sposoby osiągnięcia tego celu to zdalny dostęp (RDP, VNC) lub alternatywnie coś w rodzaju synergii +.

bezmyślna panda
źródło
1
Powiedzmy na przykład, że mam 4 GB pamięci RAM na moim laptopie i 4 GB na komputerze, czy RDP pozwoli mi wirtualnie uruchomić progran z 8 GB pamięci RAM?
TGamer
5

Jedna z moich najczęściej używanych linii - tak i nie!

Tak, jest to możliwe - w przypadku niektórych aplikacji zaprojektowanych do działania w ten sposób. (Powszechnie znany jako klaster - dalsze czytanie tutaj )

Nie, nie jest możliwe (przynajmniej o ile mi wiadomo) zdjąć dwa komputery z półki, „związać” je razem i uzyskać połączoną pamięć, moc obliczeniową i wszystko inne.

William Hilsum
źródło
1
@ ~ quack tak, i powiedziałem dla niektórych aplikacji ... Ponieważ pytanie oznaczono jako Windows-7, założyłem, że miał na myśli komputer na co dzień z dowolnym gotowym programem .... W każdym razie - klastry Don't Beowulf wymagają specjalnie napisane aplikacje? ... Nie jestem ekspertem, nigdy z niego nie korzystałem, ale szybko przeczytałem beowulf.org/overview/index.html (szczególnie ostatnie dwa akapity)
William Hilsum
przepraszam, usunąłem mój wcześniejszy komentarz po ponownym przeczytaniu i zauważyłem, że masz już link do koncepcji klastrowania. beowulfs są zaprojektowane wokół gotowych komponentów i są jednym ze sposobów „wiązania” wielu systemów razem, ale masz rację, że tak naprawdę nie działają one dla programów, które nie są specjalnie dla nich zaprojektowane.
quack quixote
4

To bardzo możliwe! Ale sądząc po prostocie twojego pytania, zakładam, że chciałbyś po prostu uruchomić program, który magicznie sprawi, że twój komputer będzie dwa razy szybszy, co nie jest możliwe.

Musisz zrozumieć, że po uruchomieniu program zachowuje swój stan, prowokując procesor do przenoszenia pamięci między HDD, RAM i rejestrami procesora, a także adresów różnych komponentów (takich jak karty graficzne lub karty sieciowe). Problem z użyciem procesora z innego komputera do pomocy polega na tym, że potrzebuje on dostępu do tej samej pamięci. Utrzymanie lustrzanego obrazu pamięci komputera na innym komputerze wymaga tak dużego obciążenia, że ​​z łatwością pokonuje cel próby dodania innego komputera w celu zwiększenia wydajności :)

Ale rodzajami rzeczy, które można podzielić na wiele komputerów, są rendering obrazu lub niektóre obliczenia matematyczne, które mogą działać niezależnie.

Nippysaurus
źródło
3

Jeśli szukasz metody połączenia mocy obliczeniowej dwóch komputerów w jeden, „najprostszym” sposobem jest skonfigurowanie obu komputerów jako hostów maszyn wirtualnych za pomocą oprogramowania takiego jak VMWare ESXi (należy pamiętać, że będzie to wymagało urządzenie, aby mieć kompatybilny sprzęt) i utworzenie grupy zasobów lub klastra oraz utworzenie maszyny wirtualnej korzystającej z zasobów obu komputerów. To NIE zapewni ci pełnej prędkości 2x (stracisz zasoby z powodu wirtualizacji) i jest ograniczonym rozwiązaniem ze względu na prawdopodobne wymagania kompatybilności, ale jest to najbardziej „poprawna” odpowiedź na twoje pytanie. Maszyna wirtualna będzie działać jak pojedynczy komputer z mocą obliczeniową obu hostów minus narzut wymagany do utrzymania wirtualizacji.

George Spiceland
źródło
Obawiam się, że komunikacja między gospodarzami będzie wąskim gardłem.
gronostaj
1
Tak, komunikacja między hostami może być wąskim gardłem, jest to część związanych z tym kosztów ogólnych. Głównymi winowajcami byłyby sieci inne niż gigabitowe, ale biorąc pod uwagę tanią i płodną dostępność gigabitową, nie uważam, że jest to szczególnie niekorzystne. Dotyczy to jednak całego rozproszonego przetwarzania sieciowego, a VM jest znacznie bardziej użytecznym scenariuszem ze znacznie mniejszą złożonością niż zdalne wywołania procedur i niestandardowe aplikacje dedykowane (co i tak musiałoby być) rozproszonemu przetwarzaniu sieciowemu.
George Spiceland,
2

Zgadzam się z innymi odpowiedziami:

  • Jeśli masz ogromny, skoroszytowy arkusz Excel i chcesz mieć możliwość dwukrotnego uruchomienia programu Excel (aktualizowanie formuł i scenariuszy, uruchamianie makr itp.), Nie masz szczęścia.
  • Jeśli masz niestandardową aplikację, którą można łatwo podzielić na partycje, na przykład znaleźć pierwiastek kwadratowy z każdej liczby całkowitej od 1 do 1 000 000, rozwiązywanie problemu na części powinno być łatwe.
  • Jeśli masz niestandardową aplikację, taką jak obliczanie pierwszych 1 000 000 cyfr π (pi), możesz to zrobić, jeśli dobrze rozumiesz problematyczne miejsce.

Jeśli mówisz o tworzeniu oprogramowania do pracy w środowisku rozproszonym (na wiele komputerów), oto kilka sugestii:

  • Użyj zdalnych wywołań procedur (RPC) . Podobnie jak możesz uczynić z hosta serwer plików lub serwer WWW, RPC pozwalają ci stworzyć maszynę, zasadniczo serwer CPU. Koncepcyjnie, miałbyś jedną maszynę nadrzędną, którą byłby klient RPC, i wywoływałby funkcje biblioteczne, które byłyby transparentnie wykonywane na serwerze. W najprostszej formie architektura ta nie zapewni żadnej korzyści w zakresie wydajności, ponieważ tylko jeden procesor może być wykonywany w dowolnym momencie. Jednak w modelu asynchronicznym klient może rozpocząć zdalną procedurę na serwerze, a następnie wykonać inne czynności podczas działania serwera.
  • Użyj języka zaprojektowanego do przetwarzania równoległego, takiego jak Unified Parallel C (UPC) . Jest to rozszerzenie języka C z funkcjami do dystrybucji danych i jednoczesnego wykonywania. Bibliografia:
Scott
źródło