Pisz krótkie instrukcje asemblerowe dla siatki procesorów, które przekazują wartości sąsiadom, zamieniając strumień wejściowy na docelowy bez powodowania zatoru.
Jak grać
Programujesz siatkę bardzo małych komputerów. Każdy węzeł wykonuje własną krótką listę instrukcji i może komunikować się tylko z bezpośrednimi sąsiadami, przekazując wartości przez porty – więc liczba, która musi przekroczyć siatkę, musi być przekazywana ręcznie, węzeł po węźle.
Każdy węzeł ma akumulator i kilka instrukcji: przesuń wartość, dodaj, odejmij, skocz.
Węzeł może odczytywać lub zapisywać dane do sąsiada powyżej, poniżej, po lewej lub po prawej stronie, a także do strumieni wejściowych i wyjściowych.
Porty blokują. Węzeł zapisujący dane w prawo po prostu czeka, aż węzeł po jego prawej stronie odczyta dane z lewej strony.
Oznacza to, że dwa węzły muszą się zsynchronizować w czasie, a nie tylko co do wartości.
Jeśli cały cykl mija bez żadnego postępu, a ktoś nadal czeka, siatka doznaje zatoru.
Zadanie jest rozwiązane, gdy strumień wyjściowy odpowiada celowi wymaganemu przez poziom.
Sterowanie
Komputer: wpisz kod w polu tekstowym każdego węzła, wybierz poziom z listy rozwijanej, a następnie naciśnij Uruchom.
Telefon i tablet: gra działa, ale do pisania kodu zdecydowanie zaleca się zewnętrzna klawiatura.
Tryby gry
Codzienny: jedna wspólna łamigłówka wygenerowana na podstawie dzisiejszej daty.
Ćwiczenia: przełączaj się między nowymi, losowymi danymi wejściowymi za pomocą przycisku Nowe.
Wskazówki i strategia
Zaplanuj trasę przed arytmetyką. Większość błędów wynika z tego, że wartości nie trafiają tam, gdzie powinny, a nie z tego, że sumy wychodzą źle.
Dwa węzły czekające na siebie to klasyczny zator. Jeśli oba piszą w kierunku drugiego, zanim którykolwiek odczyta, żaden się nie ruszy.
Tam, gdzie to możliwe, utrzymuj przepływ danych w jednym kierunku. Siatka o spójnym kierunku jest znacznie łatwiejsza do analizy niż taka, w której wartości krzyżują się.
Używaj węzła jako czystego przekaźnika, gdy tego potrzebujesz. Robienie niczego innego niż przekazywanie wartości dalej to legalna i często konieczna rola.
Czytaj zablokowany węzeł, a nie błędny wynik. Gdy wyjście się zacina, kluczowa informacja to, który węzeł czeka i na kogo.
Czego się nauczysz
Node Network to łamigłówka o programowaniu równoległym, dotycząca przekazywania komunikatów i unikania zatorów w siatce procesorów.
Umiejętności: programowanie równoległe i współbieżne, przekazywanie komunikatów, unikanie zatorów.
Najlepsze dla: mniej więcej klasy 9–12 (wiek 14+).
Dla rodziców i nauczycieli: współbieżność i zatory w praktyce.
Początki
Siatka bardzo małych komputerów, z których każdy wykonuje własną krótką listę instrukcji i może komunikować się tylko z sąsiadami bezpośrednio obok, to TIS-100 — Zachtronics, lipiec 2015 — gra, która umieściła swoje łamigłówki na fikcyjnej, uszkodzonej maszynie z lat 70.
Nauczane ograniczenie jest prawdziwe i kluczowe dla obliczeń równoległych: bez pamięci współdzielonej wartość, która musi przejść przez siatkę, trzeba ręcznie przekazywać, węzeł po węźle, przez przekazywanie komunikatów.
A ręczne przekazywanie to sposób, w jaki spotyka się zakleszczenie — dwa węzły czekające na siebie nawzajem, oba zatrzymane na zawsze. To błąd, którego nie da się tak naprawdę wyjaśnić na tablicy, bo cała trudność polega na tym, że każdy węzeł z osobna zachowuje się poprawnie.
O grze Node Network
Node Network to łamigłówka o programowaniu równoległym, dotycząca przekazywania komunikatów i unikania zatorów w siatce procesorów. To oryginalna, darmowa gra przeglądarkowa stworzona wewnętrznie dla PlayPendium.