Spisu treści:

DEMAC, wydrukowany w 3D modułowy klaster Beowulf: 23 kroki (ze zdjęciami)
DEMAC, wydrukowany w 3D modułowy klaster Beowulf: 23 kroki (ze zdjęciami)

Wideo: DEMAC, wydrukowany w 3D modułowy klaster Beowulf: 23 kroki (ze zdjęciami)

Wideo: DEMAC, wydrukowany w 3D modułowy klaster Beowulf: 23 kroki (ze zdjęciami)
Wideo: Tom Demac - Serenade (Official Video) 2024, Listopad
Anonim
DEMAC, drukowany w 3D modułowy klaster Beowulf
DEMAC, drukowany w 3D modułowy klaster Beowulf

Obliczenia o wysokiej wydajności (HPC) to zdolność do przetwarzania danych i wykonywania złożonych obliczeń z dużą szybkością, to zastosowanie „superkomputerów” do rozwiązywania problemów obliczeniowych, które są albo zbyt duże dla standardowych komputerów, albo ich wykonanie trwałoby zbyt długo. Top500 to lista publikowana dwa razy w roku, która plasuje jedne z najszybszych i najpotężniejszych komputerów na świecie. Kraje i duże organizacje wydają miliony zasobów na uruchomienie tych systemów, aby naukowcy mogli wykorzystać najnowocześniejszą technologię i rozwiązywać złożone problemy.

Lata temu komputery poprawiały swoją wydajność poprzez zwiększanie szybkości procesora. Po tym, jak napotkaliśmy spowolnienie w tego rodzaju podejściu, programiści zdecydowali, że aby nadal zwiększać wydajność komputerów, wiele rdzeni (lub jednostek obliczeniowych) powinno być upakowanych razem. Agregacja wielu zasobów obliczeniowych i mechanizmy kontroli tych zasobów to coś, co nazywamy „równoległością” w informatyce. Posiadanie wielu rdzeni wykonujących wiele zadań brzmi jak dobre podejście do poprawy wydajności komputera… ale to otwiera wielkie pytanie: w jaki sposób efektywniej wykorzystujemy te zasoby?

Te pytania sprawiają, że informatycy są zajęci, istnieje wiele sposobów na powiedzenie komputerowi, jak ma robić różne rzeczy, jest jeszcze więcej sposobów, aby powiedzieć wielu komputerom, jak mają robić różne rzeczy. Ten projekt ma na celu opracowanie niedrogiej platformy, na której każdy może eksperymentować z wysoce równoległą maszyną, testować istniejące modele w celu zastosowania we własnych projektach, opracowywać nowe i kreatywne sposoby rozwiązywania problemów obliczeniowych lub po prostu używać ich jako sposobu na nauczanie innych o komputerach. Mamy nadzieję, że praca z DEMAC będzie dla Ciebie tak duża, jak my.

DEMAC

Delaware Modular Assembly Cluster (DEMAC) to rozszerzalna tablica systemów wbudowanych (komputery wielkości karty) i zestaw ramek drukowanych w 3D, które otaczają płyty i dodatkowy sprzęt, który zapewnia zasilanie, chłodzenie i dostęp do sieci.

Każde urządzenie lub system wbudowany to mały komputer, płyta Parallella, która łączy zasoby dwurdzeniowego procesora ARM, 16-rdzeniowego koprocesora o nazwie Epiphany i wbudowanego układu FPGA z elastycznością kompletnego stosu typu open source. Mocowanie to domowa rama drukowana w 3D, która pozwala na niski koszt wdrożenia i rozbudowę konstrukcji. Został zaprojektowany tak, aby zmieścić 4 jednostki standardowej wielkości szafy (jak te, które można znaleźć w serwerowniach komputerowych).

Ta instrukcja obejmuje:

- Lista wymaganych materiałów

- Instrukcje drukowania ramek w 3D

-Instrukcje montażu i łączenia części

- Przewodnik dotyczący pobierania i instalowania wymaganego oprogramowania

- Opis sposobu łączenia się i interakcji z klastrem

- A "Dlaczego to robimy?" Sekcja

Kim jesteśmy?

Jesteśmy CAPSL (Computer Architecture and Parallel Laboratory) z Uniwersytetu Delaware. Uważamy, że przyszłość obliczeń powinna mieć mocną podstawę w teorii przepływu danych (którą wyjaśnimy później w tej instrukcji, jeśli jesteś zainteresowany).

Kieszonkowe dzieci

Ta lista opisuje materiały wymagane do zbudowania 4-płytowego klastra

- 4 karty Parallella (można je zdobyć od DigiKey lub innych dostawców, więcej informacji można znaleźć na ich stronie internetowej

- 4 karty micro-SD o pojemności co najmniej 16Gb (tutaj jest bardzo tani 10-pak lub coś w tym rodzaju bardziej elastyczne kombinacje)

- 4 kable micro-USB o długości min 30 cm (1 ft) (polecam te)

- Ładowarka USB [z co najmniej 4 portami typu A] (polecam tę z 6 portami lub taką samą, ponieważ obudowa zasilania jest do niej przeznaczona)

- Wentylator chłodzący [max rozmiar 100 mm x 100 mm x 15 mm] (polecam ten bo jest tani i działa, ale inne o podobnych wymiarach i konfiguracji okablowania działają)

- Zasilacz do wentylatora chłodzącego (jeśli twoja konfiguracja obejmuje więcej niż 8 płyt, polecam tę lub coś podobnego [AC 100 V/240 V do DC 12 V 10 A 120 W], która ma ładną metalową obudowę i może być również dołączona do przełącznika) (Jeśli zamierzasz podłączyć tylko dwa wentylatory lub mniej, możesz użyć dowolnego zasilacza 12 V z co najmniej 1 A wyjściowym zasilaczem, który możesz mieć w pobliżu)

- 5 kabli Ethernet (4 mogą być krótkie, w zależności od odległości od przełącznika do płyt, jeden powinien być wystarczająco długi, aby połączyć przełącznik z komputerem lub modemem w celu uzyskania dostępu do sieci klastra)

>> Ważna uwaga: wymagany jest system chłodzenia, w przeciwnym razie płyty mogą się przegrzać! <<<

Części drukowane w 3D

- 4 tace na płyty (Frame_01)

- 1 obudowa płyty (Frame_02)

- 1 obudowa wentylatora (rama_03_B i rama_03_T)

- 1 obudowa zasilania (Frame_04)

Krok 1: O DEMAC

O DEMAC
O DEMAC

DEMAC jest częścią szerszego obrazu, elastycznej i skalowalnej platformy, która pozwala nam opracowywać i testować nowe modele wykonywania programowania (PXM) do obliczeń równoległych. PXM to coś więcej niż sposób opisania obliczeń, reprezentuje szkielet, który zapewnia zgodność między sposobem wyrażania programu a tym, jak jest tłumaczony na wspólny język, który może być wykonywany przez maszynę. Opisujemy zestaw elementów pozwalających użytkownikowi na generowanie programów oraz sposób organizowania wykonania programu. Program może być zoptymalizowany pod kątem określonej architektury przez użytkownika lub zautomatyzowanego narzędzia opartego na tym wspólnym tle.

Możesz dowiedzieć się więcej o tym projekcie na końcu tej instrukcji, możesz również kliknąć tutaj, aby uzyskać więcej informacji o DEMAC lub tutaj, aby uzyskać więcej informacji o CAPSL)

Krok 2: Druk 3D DEMAC

Druk 3D DEMAC!
Druk 3D DEMAC!
Druk 3D DEMAC!
Druk 3D DEMAC!
Druk 3D DEMAC!
Druk 3D DEMAC!

W tej sekcji znajdziesz przewodnik po drukowaniu w 3D ram, które otaczają inne komponenty i zapewniają wsparcie konstrukcyjne. Nawet jeśli jesteś mistrzem drukowania 3D, oto kilka wskazówek, które możesz wziąć pod uwagę podczas drukowania tych ramek. Wszystkie ramki można drukować za pomocą dyszy 0,4 mm o wysokości warstwy 0,3 lub 0,2 (można również użyć adaptacji). Wszystko wydrukowałem przy użyciu PLA, ale nie ma większego znaczenia, czy chcesz użyć innych materiałów (o ile zapewniają stabilność strukturalną i mogą tolerować wyższe lub równe temperatury niż PLA).

Pliki STL:

www.thingiverse.com/thing:4493780

cults3d.com/pl/3d-model/various/demac-a-mo…

www.myminifactory.com/object/3d-print-dema…

Taca płyty (Frame_01)

Nie są wymagane żadne dodatkowe podpory. Ten jest dość prosty, po prostu umieść go płaską powierzchnią skierowaną do powierzchni drukowania.

Obudowa płyty (Frame_02)

Ten może wymagać podparcia w belkach środkowych. Można argumentować, że dobrze dostrojona maszyna/krajarka może drukować te mostki bez dodatkowego wsparcia. Jeśli chcesz drukować bez podpór, wypróbuj najpierw kilka testów obciążeniowych mostu, ponieważ pomysł polegał na tym, że nie będą ich wymagały. Z drugiej strony słupki boczne i ścianki zapewniają wystarczające podparcie, aby można je było drukować bez dodatkowych konstrukcji wsporczych.

Obudowa wentylatora (rama_03_B i rama_03_T)

Nie są wymagane żadne dodatkowe podpory. Wystarczy umieścić obie części płaską powierzchnią skierowaną do powierzchni drukowania.

Obudowa zasilania (klatka_04)

Podobnie jak Rama_02, ta może wymagać podparcia w środkowych belkach. Możesz również spróbować wydrukować ten bez dodatkowych materiałów pomocniczych (zgodnie z przeznaczeniem). Słupki boczne i ścianki zapewniają wystarczające podparcie, aby można je było drukować bez dodatkowych konstrukcji wsporczych.

Wyjściowa obudowa chłodząca (rama_05_B i rama_05_T)

Nie są wymagane żadne dodatkowe podpory. Wystarczy umieścić obie części płaską powierzchnią skierowaną do powierzchni drukowania.

Krok 3: Złóż DEMAC

Zmontuj DEMAC!
Zmontuj DEMAC!

Teraz, gdy masz już wszystkie wymagane części, nadszedł czas na rozpoczęcie montażu klastra.

Pamiętaj, aby usunąć materiał podporowy, który możesz mieć na ramkach.

Krok 4: Umieść wentylator na obudowie

Umieść wentylator na obudowie
Umieść wentylator na obudowie
Umieść wentylator na obudowie
Umieść wentylator na obudowie

Wystarczy wsunąć wentylator do wnętrza Frame_03_B (z kablem w prawym dolnym rogu), dolna część powinna zmieścić się w małych zakrzywionych ściankach, które utrzymują wentylator na miejscu.

Umieść ramę_03_T małymi zakrzywionymi ścianami skierowanymi w dół na ramę_03_B (z wentylatorem już na miejscu). Uważaj, aby najszerszą pokrywę ramy_03_T skierować w stronę szerszej (tylnej) powierzchni ramy_03_B. Ramki powinny klikać, a pokrywki powinny utrzymywać je na miejscu.

Krok 5: Dołącz do obudowy płyty z obudową zasilania

Dołącz do obudowy płyty z obudową zasilania
Dołącz do obudowy płyty z obudową zasilania
Dołącz do obudowy płyty z obudową zasilania
Dołącz do obudowy płyty z obudową zasilania

Umieść ramkę_02 na górze ramkę_04, te dwie są zaprojektowane tak, aby się ze sobą zatrzasnęły. W dolnej części ramy_02 znajduje się małe wgłębienie, które pasuje do złączy na górze ramy_04. Zastosuj delikatną siłę, aby je połączyć.

Krok 6: Zainstaluj urządzenie chłodzące

Zainstaluj urządzenie chłodzące
Zainstaluj urządzenie chłodzące

Rama_03 (B&T) jest zaprojektowana tak, aby sczepić się z Ramą_02, umieścić wentylator przodem do desek (przepływ powietrza powinien iść do środka Rama_02). Na kolumnach Frame_02 są małe wgniecenia, które powinny pasować do oznaczeń w Frame_03_B. Delikatnie dociśnij boczne powierzchnie konstrukcji, aż do zatrzaśnięcia ramek.

Krok 7: Umieść deski na tackach na deski

Umieść deski na tackach na deski
Umieść deski na tackach na deski

Frame_01 ma 4 piny, które pasują do otworów w płycie Parallella. Deska powinna bez problemu zmieścić się w tacy. W zależności od kalibracji drukarki 3D mogą być za duże lub za małe, możesz użyć odrobiny płynnego kleju silikonowego, aby utrzymać je na miejscu lub lekko docisnąć szczypcami, aby zmniejszyć średnicę.

>> Ważna uwaga: Pamiętaj o umieszczeniu radiatorów na tablicy <<<

Krok 8: Wsuń tace płyt do obudowy płyty

Wsuń tace płyt do obudowy płyty
Wsuń tace płyt do obudowy płyty

Rama_01 zapewnia gniazda pasujące do szyn Frame_02 na każdym poziomie. Zwróć uwagę, że jest tylko jedna strona otwarta, aby uzyskać tacę na deskę. Jest też mały guzek, który pomaga utrzymać Frame_01 na miejscu (szczerze, mogą one wymagać pewnych ulepszeń w przyszłej wersji).

Wsuń wszystkie 4 tace na deski z deskami już na miejscu, po 1 na każdy poziom.

Krok 9: Umieść zasilacz wewnątrz obudowy zasilacza

Umieść zasilacz wewnątrz obudowy zasilacza
Umieść zasilacz wewnątrz obudowy zasilacza

Umieść zasilacz USB wewnątrz ramki_04 z portami USB skierowanymi na zewnątrz. Po drugiej stronie znajduje się mały otwór na kabel zasilający, który zasila koncentrator.

Krok 10: Podłącz wentylator do zasilacza chłodzącego

Wentylator powinien być teraz podłączony do zasilania 12 V, które dostarcza energię do klimatyzatora.

>> Ważna uwaga: Utrzymuj pracę systemu chłodzenia przez cały czas, gdy masz płyty podłączone do zasilania <<<

Krok 11: Skonfiguruj system operacyjny

1. Pobierz zalecany system operacyjny (Parabuntu) tutaj

Istnieją dwie wersje układów (z7010 [P1600/P1601] i z7020 [P1602/A101040], które wymagają różnych plików.

W przypadku obu wersji dostępna jest wersja bezgłowa (bez graficznego interfejsu użytkownika) oraz wersja zapewniająca obsługę HDMI i graficzny interfejs użytkownika)

Jeśli chcesz korzystać z wyjścia HDMI, pamiętaj o zaopatrzeniu się w kabel mini-HDMI.

Możesz komunikować się z wersją bezgłową przez sieć.

Więcej informacji i szczegółowe wyjaśnienie można znaleźć tutaj na oficjalnej stronie internetowej.

Oto kroki instalacji systemu operacyjnego przy użyciu dystrybucji opartej na systemie Linux. Możesz użyć poleceń w terminalu (bez symbolu $) w kolejnych krokach lub sprawdzić inne procedury na stronie internetowej.

2. Zainstaluj

- Włóż kartę micro-SD do zwykłego komputera - Rozpakuj obraz Ubuntu. Zmień [nazwa wersji] na nazwę obrazu.

$ gunzip -d [nazwa wydania].img.gz

3. Sprawdź ścieżkę urządzenia karty SD

Dokładna ścieżka urządzenia do karty SD zależy od dystrybucji systemu Linux i konfiguracji komputera. Użyj poniższego polecenia, aby uzyskać właściwą ścieżkę. Jeśli z danych wyjściowych nie wynika, która ścieżka jest właściwa, wypróbuj polecenie z włożoną kartą SD i bez niej. W Ubuntu zwrócona ścieżka może wyglądać jak „/dev/mmcblk0p1”.

$ df -h

4. Odmontuj kartę SD Przed wypaleniem karty musisz odmontować wszystkie partycje na kartach SD. [ścieżka partycji sd] pochodzi z polecenia „df” w kroku 3.

$ umount [ścieżka-partycji-sd]

5. Wypal obraz dysku Ubuntu na karcie micro-SD

Wypal obraz na karcie SD za pomocą narzędzia „dd” pokazanego w poniższym przykładzie polecenia. Zachowaj ostrożność i upewnij się, że poprawnie określiłeś ścieżkę, ponieważ to polecenie jest nieodwracalne i nadpisze wszystko w ścieżce! Przykładowe polecenie w Ubuntu to: „sudo dd bs=4M if=my_release.img of=/dev/mmcblk0”. Prosimy o cierpliwość, może to chwilę potrwać (wiele minut) w zależności od używanego komputera i karty SD.

$ sudo dd bs=4M if=[nazwa wydania].img of= [ścieżka-partycji-sd]

6. Upewnij się, że wszystkie zapisy na karcie SD zostały zakończone

$ synchronizacja

7. Włóż kartę SD do gniazda karty SD w płycie

Krok 12: Podłącz płytkę do zasilacza

Użyj kabla miniUSB do USB-A, aby podłączyć jedną z płytek do koncentratora USB. Możesz oznaczyć porty i kable lub zdefiniować kolejność połączeń na wypadek konieczności późniejszego odłączenia płytki.

Krok 13: Konfiguracja routera

Konfiguracja routera
Konfiguracja routera

Jeśli wykonujesz instalację bezgłowego systemu operacyjnego, gdy jesteś w dużej sieci, musisz użyć routera i podłączyć go do Internetu, płyt Parallella i komputera osobistego.

Jeśli nie możesz połączyć się z routerem, możesz również podłączyć płytkę bezpośrednio do komputera za pomocą kabla Ethernet, ta procedura może być nieco trudniejsza i nie zostanie omówiona w tej instrukcji.

Po podłączeniu wszystkiego otwórz interfejs routera, aby dowiedzieć się, jaki adres IP jest domyślnie podawany do Parallella. Poszukaj karty z napisem Sieć. Następnie znajdź sekcję o nazwie Lista klientów DHCP. Tam powinieneś zobaczyć swoją płytę Parallella i jej adres IP.

Za pomocą tego adresu IP możesz SSH do Parallella i skonfigurować statyczny adres IP.

Krok 14: Łączenie z płytą Parallella za pomocą SSH

Uwaga: W tej sekcji [default_IP] to dynamiczny adres IP znaleziony na liście klientów DHCP.

Sprawdź połączenie z płytą

$ ping [domyślny_IP]

SSH do tablicy po raz pierwszy (domyślne hasło to Parallella)

$ ssh parallella@[domyślny_IP]

Krok 15: Konfiguracja sieci

- Zmień nazwę hosta: edytuj /etc/hostname

Tutaj możesz przypisać dowolną nazwę, zalecamy użycie NOPA##

Gdzie ## oznacza numer tablicy (tj. 01, 02, …)

- Ustaw adresy IP innych tablic: edytuj /etc/hosts

Ustaw statyczny adres IP: dodaj poniższy tekst dla /etc/network/interfaces.d/eth0

#Główny interfejs sieciowy auto eth0

iface eth0 inet statyczne

adres 192.168.10.101 #IP powinien być w zasięgu routera

maska sieci 255.255.255.0

brama 192.168.10.1 #To powinien być adres routera

serwer nazw 8.8.8.8

serwer nazw 8.8.4.4

Po przypisaniu adresu IP do tablicy możesz ponownie uruchomić połączenie za pomocą polecenia

$ ifdown eth0; ifup eth0

lub zrestartuj tablicę

Krok 16: Konfiguracja generowania kluczy i dostępu bez hasła na tablicach

Skonfiguruj parę prywatnych kluczy publicznych na każdym węźle (w tym w węźle głównym). Utwórz folder tymczasowy, wygeneruj nowy klucz i ustaw go jako klucz autoryzowany i dodaj wszystkie NOPA do znanych hostów, jak pokazano poniżej.

mkdir tmp_sshcd tmp_ssh ssh-keygen -f./id_rsa

#Naciśnij dwukrotnie enter, aby ustawić i potwierdzić puste hasło

cp id_rsa.pub autoryzowane_klucze

dla i w `seq 0 24`; do j=$(echo $i | awk '{printf "%02d\n", $0}');

ssh-keyscan NOPA$J >> znane_hosty; Gotowe

Krok 17: Instalacja Sshfs

- Korzystanie z sshfs umożliwia udostępnianie plików między tablicami w klastrze. Uruchom następujące polecenie:

$ sudo apt-get install -y sshfs

- Sprawdzanie / tworzenie grupy bezpieczników

Sprawdź, czy istnieje grupa bezpieczników:

$ kot /etc/grupa | grep „bezpiecznik”

Jeśli grupa istnieje, wykonaj następujące polecenie

$ bash sudo usermod -a -G bezpiecznik równoległy

- Jeśli grupa nie istnieje, utwórz ją i dodaj do niej użytkownika

$ sudo groupadd bezpiecznik

$ sudo usermod -a -G bezpiecznik równoległy

- Odkomentuj linię user_allow_other w pliku fuse.config

$ sudo vim /etc/fuse.conf

Krok 18: Skonfiguruj folder NFS

- Zmodyfikuj plik /etc/fstab

$ sudo vim /etc/fstab

- Zastąp zawartość tekstem pokazanym poniżej

# [system plików] [punkt montowania] [typ] [opcje]

sshfs#parallella@NOPA01:/home/parallella/DEMAC_nfs /home/parallella/DEMAC_nfs fuse comment=sshfs, noauto, users, exec, rw, uid=1000, gid=1000, allow_other, reconnect, transform_symlinks, BatchMode=yes, niepusty, _netdev, identityfile=/home/parallella/.ssh/id_rsa, default_permissions 0 0

Krok 19: Podłącz płytkę do przełącznika

Umieść przełącznik poniżej klastra lub gdzieś w pobliżu, użyj kabli Ethernet, aby podłączyć płytkę, którą już skonfigurowałeś do przełącznika. Możesz również podłączyć przełącznik i komputer do routera, aby uzyskać dostęp do klastra.

Powinieneś być w stanie pingować i ssh do płyty, która jest teraz podłączona do przełącznika ze statycznym adresem IP.

Możesz także dodać adres IP i nazwę hosta do pliku /etc/hosts. Będziesz mógł użyć nazwy hosta do połączenia zamiast wpisywać cały adres IP.

Krok 20: Powtórz kroki od 11 do 19 dla każdej tablicy

Postępuj zgodnie z procedurą konfiguracji systemu operacyjnego i sieci dla każdej płyty.

>> Ważna uwaga: Używaj różnych hostów i adresów IP dla każdej płyty! Powinny być unikalne w sieci! <<<

Krok 21: Podłącz urządzenia peryferyjne

Podłącz urządzenia peryferyjne!
Podłącz urządzenia peryferyjne!

Upewnij się, że wentylator działa:

Upewnij się, że wentylator jest zasilany, a przepływ powietrza wchodzi do wnętrza obudowy. Połączenie powinno być stabilne i niezależne od innych elementów. Pamiętaj, że deski mogą się przegrzać, jeśli nie zostaną prawidłowo schłodzone.

Upewnij się, że płytki są podłączone do przełącznika:

W tym momencie powinieneś skonfigurować każdą kartę niezależnie. Płytki należy również podłączyć do przełącznika. Instrukcja obsługi przełącznika powinna zawierać informacje, które można wykorzystać do sprawdzenia, czy proces uruchamiania zakończył się prawidłowo, mogą być widoczne diody LED wskazujące stan.

Podłącz płyty do zasilacza:

Użyj kabla micro-USB do USB-A, aby podłączyć każdą z płytek do koncentratora USB. Możesz oznaczyć porty lub zdefiniować kolejność w przypadku konieczności odłączenia jednej płytki.

Krok 22: Zastosuj moc

1. Wentylator powinien działać.

2. Płytki należy podłączyć do przełącznika Ethernet.

3. Sprawdź, czy karty są podłączone do koncentratora USB.

4. Podłącz zasilanie do koncentratora USB.

5. Włącz DEMAC!

6. Zysk!

Krok 23: Zasoby oprogramowania

MPI (interfejs przekazywania wiadomości)

MPI to protokół komunikacyjny do programowania komputerów równoległych. Obsługiwana jest zarówno komunikacja punkt-punkt, jak i komunikacja zbiorowa.

www.open-mpi.org/

OpenMP (Otwarte przetwarzanie wielokrotne)

Interfejs programowania aplikacji (API) OpenMP (Open Multi-Processing) obsługuje wieloplatformowe programowanie wieloprocesowe z pamięcią współdzieloną w językach C, C++ i Fortran na wielu platformach. Składa się z zestawu dyrektyw kompilatora, procedur bibliotecznych i zmiennych środowiskowych, które wpływają na zachowanie w czasie wykonywania.

www.openmp.org/

Oprogramowanie Parallella

Deweloperzy zapewniają stos oprogramowania o otwartym kodzie źródłowym, w tym SDK do interfejsu z akceleratorem.

www.parallella.org/software/

Możesz również znaleźć instrukcje i bardziej szczegółowe informacje.

Mają też repozytoria GitHub:

github.com/parallella

Zapraszam do pobrania i uruchomienia niektórych przykładów, jedną z moich ulubionych jest gra życia oparta na słynnej grze Conway's Game of Life.

Zastrzeżenie: Definicje mogą być kopiowane z wikipedii

Zalecana: