Co jest szkieletem superkomputerów?
Superkomputery pozwalają na dokładne przepowiadanie pogody, symulowanie zderzeń samochodów albo zjawisk z dziedziny fizyki jądrowej. Umożliwiają zrozumienie jak rozwijają się komórki nowotworowe albo jakie siły działają na skrzydła samolotu. Wykorzystując algorytmy z dziedziny uczenia maszynowego są w stanie nauczyć samochód jazdy bez kierowcy. Pojedynczy liczony problem to często kilka dni, czasem tygodni, a nawet miesięcy ciągłej pracy takiego superkomputera.
Superkomputery to nic innego jak tysiące procesorów równolegle wykonujących obliczenia na wspólnych danych. Listę największych instalacji na świecie można znaleźć na stronie https://www.top500.org (są tam również instalacje z Polski!). Ich całkowita moc obliczeniowa, a więc zdolność rozwiązywania skomplikowanych problemów, zależy od mocy obliczeniowej ich procesorów oraz od sprawności komunikacji między nimi.
Ale właśnie – co jest szkieletem tych superkomputerów, czyli w jaki sposób odbywa się komunikacja pomiędzy ich procesorami? Otóż technologie, które mamy w swoich domach czy biurach, i które tworzą znany nam wszystkim Internet, czyli protokół TCP/IP i sieć Ethernet, są dla superkomputera niewystarczające. Żeby w skończonym czasie uzyskać wyniki skomplikowanej symulacji, konieczne jest przesyłanie danych pomiędzy procesorami z prędkością setek gigabitów na sekundę (czyli 1000 razy szybciej, niż domowa sieć Wi-Fi) i z opóźnieniem wielokrotnie mniejszym, niż w najlepszej sieci Ethernet.
Takie wymagania może spełnić tylko sieć typu fabric, przypominająca strukturą właśnie tkaninę. Chodzi tu o topologię sieci, gdzie komponenty przesyłają dane przez wzajemnie połączone przełączniki. Aby działo się to optymalnie potrzeba natomiast znacznie więcej, niż tylko odpowiedniego połączenia sprzętu.
Jak to wygląda w praktyce?
Inżynierowie z oddziału Intela w Gdańsku pracują nad jednym z rozwiązań dla sieci typu fabric – Intel® Omni-Path Architecture. Główne elementy, z których składa się to rozwiązanie, to sprzęt i oprogramowanie, a w szczególności:
- Karta Host Fabric Interface (HFI) – karta PCIe, która na pierwszy rzut oka przypomina zwykłą kartę sieciową, ale o przepustowości 100Gb/s. To ona odpowiada za komunikację pojedynczej maszyny z resztą klastra.
- Przełączniki – 24- i 48-portowe przełączniki wspierające porty o przepustowości 100Gb/s i wprowadzające bardzo małe opóźnienie podczas przekazywania danych.
- Przewody sieciowe - zapewniające wysoką jakość transmisji – zarówno kable miedziane (chociaż coraz mniej używane), jak i światłowody.
- Zestaw oprogramowania – zarówno firmware na dedykowane układy scalone na kartach i przełącznikach oraz software oparty o system operacyjny GNU/Linux, który działa zarówno w obszarze jądra (sterowniki do kart), jak i warstwie użytkownika (np. biblioteki komunikacyjne MPI)
Aby cały układ pracował wydajnie trzeba sprawić, żeby opóźnienia w transmisji między węzłami były jak najmniejsze. Dlatego w naszej architekturze wykorzystujemy zoptymalizowaną konstrukcję układów przełączających typu ASIC (application-specific integrated circuit). Dodatkowo ramki pakietów są o wiele prostsze niż w TCP/IP. To pozwala na trzykrotnie szybsze przetwarzanie pakietu na przełączniku niż w sieci Ethernet.
Kolejnym wyzwaniem jest uzyskanie wysokiej prędkości transmisji na poziomie 100 Gb/s. Taka prędkość jest możliwa nie tylko dzięki specjalnym kartom sieciowym, ale i wysokiej jakości przewodom.
Tworzy to dobre podstawy do uzyskania wysokiej wydajności superkomputera. Jednak cała architektura przewiduje cały szereg optymalizacji, który pozwala maksymalnie wykorzystać dostępne zasoby. Są one możliwe dzięki temu, że w sieci fabricowej istnieje wiele alternatywnych połączeń między węzłami sieci, a ruch jest centralnie monitorowany i sterowany. Niektóre z mechanizmów optymalizacji to:
- Trasowanie Adaptacyjne(Adaptive Routing) - monitoruje wydajność dostępnych połączeń sieciowych w ramach klastra i automatycznie dobiera najszybszą ścieżkę do przesłania danych.
- Trasowanie Dyspersyjne(Dispersive Routing) - zamiast przesyłu kompletu danych jedną trasą, dane są rozdzielane, wysyłane różnymi ścieżkami, a następnie sprawnie i szybko składane do pierwotnej postaci.
- Optymalizacja Ruchu Sieciowego(Traffic Flow Optimization) - dzieli pakiety o zmiennej długości na identyczne części – tzw. kontenery, które następnie przesyłane są jako pakiety LTP (Link Transfer Packets). Rozdzielanie danych na mniejsze pakiety sprawia, że pakiet o wyższym priorytecie może być przesłany poza kolejką, przed pakietami o niższym priorytecie. Przykładowo transfer plików może dostać niższy priorytet niż dane związane z symulacją, dzięki czemu nie będzie jej zakłócać.
- Ochrona Integralności Pakietów(Packet Integrity Protection) - pozwala na usunięcie błędów zarówno podczas transmisji między węzłem, a przełącznikiem, jak i pomiędzy przełącznikami. Dzięki temu możliwe stało się wyeliminowanie błędów typu timeout w warstwie transportowej. Nie trzeba też ponawiać prób połączeń typu end-to-end, co znacznie obniża opóźnienia.
- Dynamiczne Skalowanie Kanałów(Dynamic Lane Scaling) – pozwala na kontynuowanie przesyłu danych nawet, jeśli jeden lub więcej kanałów z poczwórnego połączenia zostanie niespodziewanie wyłączony z użytku. Dzięki temu rozwiązaniu nie jest potrzebne ponawianie całej lub części operacji przesyłania danych, co umożliwia kontynuowanie działania aplikacji uruchomionej na klastrze. Może ona ukończyć zadanie przed rozpoczęciem procedury rozwiązywania zaistniałego problemu.
Dopiero połączenie sprzętu i software’u pozwala na stworzenie super-wydajnego klastra.
Co ma z tym wspólnego Intel w Gdańsku?
Zespół w Gdańsku tworzą programiści i testerzy, pracujący nad oprogramowaniem do Intel Omni-Path. Odbiorcami naszych rozwiązań są najważniejsze ośrodki obliczeniowe na całym świecie, a bezpośrednimi użytkownikami najwybitniejsi naukowcy. Działamy w ramach Open Source community, gdzie ceniona jest otwartość rozwiązań i wzajemna współpraca. Wdrażamy metodologie Agile do produkcji oprogramowania niskopoziomowego, zwinnie dopasowując je do specyfiki produktu i wymagań klientów.
Poszukujemy inżynierów oprogramowania do tworzenia sterowników w jądrze Linuxa, do programowania bibliotek działających w warstwie użytkownika, oprogramowania zarządzającego ruchem sieciowym w wielowęzłowym systemie oraz do tworzenia, automatyzacji i nadzorowania wykonywania testów naszych produktów.
Jeżeli chciałbyś dowiedzieć się więcej, nie wahaj się i zaaplikuj już dziś!