Zabrakło Wam kiedyś mocy obliczeniowej na Raspberry Pi lub BeagleBone Black? Jeśli tak, to poznajcie NVidia Jetson TK1 rozwiązaniez procesorem wyposażonym w 192 rdzenie CUDA!
Jeśli nie zajmowaliście się wcześniej komputerami jednopłytkowymi, to tym bardziej jest to artykuł dla Was. Może zaczniecie właśnie od Jetsona?
Jest rok 1995 - następuje koniec ery milionera Kowalskiego (denominacja złotego), po 70 latach planowania otworzono pierwszy odcinek warszawskiego metra, a na fotel prezydencki zasiada Aleksander Kwaśniewski. Podczas, gdy Polska stara się otrząsnąć z resztek komunizmu świat ogarnia cyfrowa gorączka - oto do sprzedaży wchodzi potężnie reklamowany Windows 95.
Aplikacje okienkowe zdobywają serca zarówno użytkowników domowych, jak i biurowych. Powstają również epickie trójwymiarowe gry takie jak Wolfenstein 3D, czy Doom. Interfejs graficzny staje się nieodłączną częścią każdego komputera oferując niezapomniane doznania wizualne. Jedynym, który może narzekać na taki rozwój zdarzeń jest procesor CPU, który jest odpowiedzialny za renderowanie każdego obrazu na ekranie monitora.
Termin karta graficzna po raz pierwszy użyła firma Nvidia wprowadzając w roku 1999 na rynek pierwsze układy GeForce. Były one wyspecjalizowane w renderowaniu grafiki 3D, jednak bardzo szybko środowiska akademickie zorientowały się o możliwościach ich wykorzystania w zadaniach ogólnego przeznaczenia.
W ten sposób układy teksturujące przeszły drogę od Quake'a do medycyny, zagadnień algebry liniowej, czy nawet symulacji kosmicznych.
Nvidia GeForce256 - pierwszy układ noszący zaszczytne miano GPU.
Dzisiaj, kilkanaście lat od wprowadzenia terminu GPGPU (ang. General-Purpose computing on Graphics Processing Units) stajemy przed niewyobrażalnymi możliwościami z punktu widzenia tamtej epoki. Oto na rynku dostępny jest jednopłytkowy komputer o niskim zapotrzebowaniu prądowym oferujący wydajność na poziomie 300 GFLOPS.
Nie krępujcie się: spróbujcie mu dorównać i wykonać
300 miliardów operacji zmiennorzecinkowych na sekundę!
Przed oczami staje setki możliwych aplikacji. Ktoś pokusi się o realizację domowego serwera opartego na tym układzie, ktoś inny zbuduje drona z jetsonowym mózgiem, a jeszcze ktoś inny będzie realizował algorytmy przetwarzania obrazów na pokładzie robota mobilnego.
Te wszystkie zastosowania łączy jeden wspaniały parametr: stosunek ilości możliwych operacji na sekundę do pobieranej energii, czyli to, co robotyczne tygryski lubią najbardziej.
Układ NVidia Jetson TK1.
Zawartość poradnika
Niniejszy artykuł jest próbą przyjrzenia się jednoukładowemu komputerowi Jetson TK1 pod kątem zastosowania w robotyce. Pierwsza część będzie poświęcona przedstawieniu płytki od strony sprzętowej. Następnie omówiona zostanie procedura wstępnej konfiguracji systemu w taki sposób, by umożliwić dalszą wygodną pracę.
Trzecia część będzie poświęcona odpowiednio programowaniu niskiego poziomu, zaś w ostatniej postaram się omówić przykładową aplikację układu jako sterownika robota mobilnego.
W związku ze specyfiką zagadnienia, nie jest to kolejny kurs Forbota, taki jak podstawy elektroniki, czy programowanie Arduino. Celem tej serii jest zainteresowanie Was Jetsonem oraz pokazanie jego możliwości.
NVidia Jetson TK1 - konfiguracja sprzętowa
Przed rozpoczęciem warto zapoznać się co układ ma do zaoferowania od strony sprzętowej. Postaram się przedstawić kilka najważniejszych elementów:
Zasilanie: komputer zasilany jest napięciem stałym 12V przez złącze typu Jack 2.1 mm. Napięcie tolerowane przez układ może zawierać się między 9.5V, a 13.5V. Pobór prądu zależny jest od liczby podłączonych peryferiów oraz obciążenia obliczeniowego układu.
Interfejs użytkownika: 3 przyciski POWER, RESET oraz RECOVERY. O ile pierwsze dwa są samotłumaczące się, o tyle ostatni wykorzystywany jest do przejścia w specjalny tryb pracy, podczas którego możliwe jest uaktualnienie systemu, konfiguracja bootloadera itp. Warto zaznaczyć, że komputer po podłączeniu zasilania jest domyślnie włączany i nie zachodzi potrzeba szukania przycisku POWER.
Dodatkowe interfejsy: port LCD, port ekranu dotykowego, UART, 3xI2C, 7xGPIO.
Podstawowe złącza i interfejsy układu Jetson TK1.
Multimedia: pełnowymiarowy port HDMI oraz złącze mikrofonowe i słuchawkowe obsługiwane układem ALC5639.
Komunikacja: gigabitowy port Ethernet wykorzystujący układ Realtek RTL8111GS. Komputer jest wyposażony w gniazdo mini-PCIe, które pozwala podpiąć różne karty rozszerzeń zaczynając od modułów WiFi, a kończąc na dyskach SSD. Bardzo ważne są porty USB 3.0 oraz 2.0 umieszczone na oddzielnych szynach. Dzięki temu można podłączyć dwa różne urządzenia przesyłające duże ilości danych (np. kamery RGB-D). Układ został również wyposażony w port szeregowy RS232, który jest bardzo cennym interfejsem w robotyce.
Pamięć: 2GB pamięci RAM typu DDR3L (L od Low Voltage) taktowanej zegarem o częstotliwości 933MHz. Należy pamiętać, że jest ona współdzielona między CPU i GPU, dlatego przy projektowaniu aplikacji należy pamiętać, że rzeczywista ilość pamięci do wykorzystania na GPU jest nieco mniejsza. Dodatkowo układ wyposażony jest w 16GB pamięci eMMC 4.51 typu storage, z czego sam system zajmuje około 2GB. Możliwe jest dołączenie karty pamięci SD/MMC oraz urządzenia pamięci masowej poprzez port SATA.
SoC: układ Tegra K1, w skład którego wchodzi CPU o architekturze 4+1 Cortex A15, układ GPU z rodziny Kepler posiadający 192 rdzenie CUDA, dwa procesory obrazowe oraz silnik wyświetlania grafiki na monitorach 4K.
Nie będę się rozpisywał dużo na ten temat, ponieważ w kolejnych częściach przyjrzymy się dokładnie temu procesorowi szczególnie pod kątem układu GPU.
Schemat blokowy procesora Tegra K1.
Przyjęta konwencja
W dalszych częściach serii często będziemy korzystać z powłoki systemu linux, dlatego warto przyjąć spójną konwencję rozróżniającą co jest komendą, a co jej wynikiem. Założę, że komendy będzie poprzedzone standardowym prefixem użytkownik@komputer:katalog$, zaś wynik programu takowego prefixu mieć nie będzie. Przykładowo zapis:
Shell
1
2
ubuntu@tegra-ubuntu:~$ whoami
ubuntu
Będzie on oznaczał wpisanie komendy whoami w katalogu głównym użytkownika ubuntu na maszynie nazwanej tegra-ubuntu (Jetson), zaś następna linijka ubuntuoznaczać będzie wyjście wpisanej komendy.
Oczywiście nie ma jednoznacznej odpowiedzi na to pytanie. Mogę tylko powiedzieć, że w moim niewielkim otoczeniu znam 4 duże projekty, które używają procesorów TK1/TX1, z czego w jednym z nich zrezygnowano z rozwiązania opartego na układzie FPGA na rzecz CUDA. Można? Można!
Przykładowy projekt SCOL (Super-Computer-On-Legs) zrealizowany w oparciu o Jetsona:
Nie chcesz przeoczyć kolejnych części kursu? Skorzystaj z poniższego formularza i zapisz się na powiadomienia o nowych artykułach!
Dołącz do 20 tysięcy osób, które otrzymują powiadomienia o nowych artykułach! Zapisz się, a otrzymasz PDF-y ze ściągami (m.in. na temat mocy, tranzystorów, diod i schematów) oraz listę inspirujących DIY na bazie Arduino i Raspberry Pi.
To nie koniec, sprawdź również
Przeczytaj powiązane artykuły oraz aktualnie popularne wpisy lub losuj inny artykuł »
Dołącz do 20 tysięcy osób, które otrzymują powiadomienia o nowych artykułach! Zapisz się, a otrzymasz PDF-y ze ściągami (m.in. na temat mocy, tranzystorów, diod i schematów) oraz listę inspirujących DIY z Arduino i RPi.
Trwa ładowanie komentarzy...