Zapraszam do zapoznania się z nowymi poradnikami w dziale Arduino:
- Diody LED WS2812 ze sterownikiem WS2811: przeczytaj artykuł
- Super wyświetlacz TFT z kontrolerem FT800: przeczytaj artykuł
- Przekaźniki elektromagnetyczne i bistabilne: przeczytaj artykuł
- Moduł MP3 z układem YX5300: przeczytaj artykuł
Gorąco zachęcam również do zajrzenia na mój kanał YouTube o tematyce Arduino
Reklama
NVIDIA zapowiedziała nowy procesor mobilny Tegra X1 wykonany w procesie litograficznym 20nm, który przynosi z sobą architekturę Maxwell dla urządzeń mobilnych.
NVIDIA Tegra X1 oczywiście wspiera technologię big.LITTLE oferując cztery 64-bitowe rdzenie Cortex-A57 oraz cztery rdzenie Cortex-A53 przeznaczone do mniej wymagających zadań.
Dużą zmianą jest również wykorzystanie pamięci LPDDR4 zamiast LPDDR3, a także obsługa rozdzielczości 3840x2160 przy odświeżaniu 60Hz. Nowy procesor obsługuje standard HDMI 2.0.
Wedle informacji prasowej - Tegra X1 posiada 256 rdzeni CUDA i ma być dwukrotnie szybszy od swojego poprzednika Tegra K1.
Nowy X1 bez kłopotów wspiera Unreal Engine 4, DirectX 12, OpenGL 4.5, CUDA, a także OpenGL ES 3.1, konsumując zaledwie 10W energii elektrycznej.
HTPC idealny? ODROID-XU3 + Android
Jak wspomniałem w poprzednim wpisie, ODROID-XU3 będzie głównie służył mi jako domowy HTPC, zastępując tym samym wysłużony już model X2.
Na pierwszy ogień poszedł "goły" Android 4.4.4 oznaczony wewnętrznym numerem Alpha 1.3. Instalacja na karcie eMMC przebiegła bezboleśnie. Standardowo wystarczyło wgrać obraz systemu na kartę pamięci za pomoca polecenia dd. Na stronie producenta dostępna jest również wersja przeznaczona do pracy na karcie SD, a także instalator z karty SD na eMMC. Ta ostatnia opcja jest na tyle ciekawa, że nie musimy martwić się o złącze karty eMMC podczas czętego jej wpinania i wypinania.
Domyślnie ustawioną rozdzielczością jest 720p, którą możemy zmienić na 1080p za pomocą narzędzia ODROID Utility. Zanim to jednak nastąpi, przeprowadźmy kilka testów.
ODROID-XU3 720p / 1080p vs. HTC One M8
Na początek program AnTuTu. W rozdzielczości 720p ODROID-XU3 uzyskuje zawrotny wynik 49.765 punktów, natomiast w rozdzielczości 1080p wynik spada zaledwie do 46.213 punktów. Poprzednie generacje XU oraz X2 w rozdzielczości 720p osiągały wynik kolejno 30.054 oraz 19.574 punktów. Mój HTC One M8 uzyskał tym czasem wynik 42.519 punktów.
Porównanie z innymi urządzeniami
AnTuTu | 720p | 1080p |
ODROID-XU3 | 49.765 | 46.213 |
ODROID-XU | 30.054 | -- |
ODROID-X2 | 19.574 | -- |
HTC One M8 | -- | 42.519 |
Nie obyło się również porównania wyników 3D Mark Ice Strom. ODROID-XU3 deklasuje na tym polu swoich starszych braci, ustępując jedynie HTC One M8. Jest to dla mnie sporą niespodzianką, biorąc pod uwagę poprzednie wyniki w programie AnTuTu.
Dla rozdzielczości 720p
Dla rozdzielczości 1080p
Porównanie z innymi urządzeniami
3DMark | 720p Normal | 720p Unlimited | 720p Extreme | 1080p Normal | 1080p Unlimited | 1080p Extreme |
ODROID-XU3 | Maxed out! | 15.237 | 10.485 | Maxed out! | 15.073 | 10.044 |
ODROID-XU | Maxed out! | -- | 7.363 | -- | -- | -- |
ODROID-X2 | 2.612 | -- | 1.947 | -- | -- | -- |
HTC One M8 | -- | -- | -- | Maxed out! | 19.272 | Maxed out! |
Na koniec sprawdziłem jeszcze jak wygląda sytuacja w androidowej wersji PCMark. Wyniki są porównywalne dla obu rozdzielczości. Wyniosły one kolejno 3.979 punktów dla rozdzielczości 720p oraz 3.898 punktów dla rozdzielczości 1080p. HTC One M8 w rozdzielczości 1080p wypadł trochę słabiej, osiągając wynik o włos mniejszy 3.726 punktów.
Dla rozdzielczości 720p
Dla rozdzielczości 1080p
CyanogenMod 11
Jeśli najdzie nas ochota, możemy pokusić się o instalację CyanogenMod 11, który daje znacznie większe możliwości konfiguracji i personalizacji Androida.
KitKat 4.4.4 PocketRocket
PocketRocket to rozwiązanie dla osób, które nie mają czasu na instalację niezbędnego oprogramowania. Znajdziemy w niej preinstalowane proramy, takie jak: Firefox, XBMC 13.1, ES File Explorer, Ultra Explorer, Terminal Emulator, MX Player , tTorrent, serię gier Angry Birds i wiele innych.
XBMC radzi sobie bardzo dobrze nawet z materiałem wideo z bitrate, wynoszącym 120MBps - to pozwala mi sądzić, że ODROID-X2 właśnie przeszedł na emeryturę. Osobiście jednak zdecyduję się na instalację czystego Androida z samodzielnym doborem aplikacji.
Tym samym muszę stwierdzić, że ODROID-XU3 to obecnie najlepszy sprzęt do pracy z Androidem z jakim zdarzyło mi się spotkać. Może mu zagrozić jedynie posiadany prze zemnie Jetson TK1, o ile Android spisze się na nim również wyjątkowo dobrze.
Pierwsze podejście do ODROID-XU3
ODROID-XU3 to obecnie najmocniejszy model oferowany przez koreańską firmę Hardkernel. Uzbrojony jest w 8 rdzeniowy procesor Exynos5422 z czterema rdzeniami Cortex A15 oraz dodatkowymi czterema Cortex A7. W przypadku rdzeni A15 zastosowano taktowanie zegarem 2GHz, natomiast A7 taktowane są zegarem 1.4GHz. Najciekawszą jednak technologią (oprócz big.LITTLE) jest tutaj HMP (Heterogeneous Multi-Processing), która umożliwia wykorzystywanie wszystkich ośmiu rdzeni w dowolnej konfiguracji, zwiększając wydajność systemu nawet o 20%. Nie ma tutaj więc sztywnego przydziału rdzeni na mniej lub bardziej wymagające zadania.
Hardkernel wypuścił również odchudzoną wersję ODRDOID-XU3 Lite, która posiada wolniejsze zegary taktowania 1.8GHz dla rdzeni A15 oraz 1.3GHz dla rdzeni A7. Została również pozbawiona portu DisplayPort i układów mierzączych pobór energii przez kluczowe podsystemy, takie jak procesor, pamięć i GPU.
Ubuntu 14.04.1 bez większych problemów
Na chwilę obecną jest dostępna dystrybucja Ubuntu 14.04.1 z jądrem 3.10.61. Nie zauważyłem żadnych większych problemów w jego działaniu. Bez obaw możemy dokonać aktualizacji systemu, nie martwiąc się o losy kolejnego restartu.
Wraz z Ubuntu 14.04.1, dostajemy dwa specjalne narzędzia: EnergyMonitor, który pozwala nam obserwować i mierzyć zapotrzebowanie na moc poszczególnych układów oraz ODROID Utility, za pomocą którego w łatwy sposób pobierzemy nowszą wersję jądra i ustawimy niektóre opcje.
Kilka testów na początek
W przypadku kompresji i dekompresji pliku BZIP oraz kompresji pliku WAV do MP3, ODROID-XU3 wypada odrobinę gorzej niż NVIDIA Jetson TK1. Różnice są praktycznie niezauważalne.
Sytuacja zmienią się w przypadku pomiaru prędkości nośnika eMMC. Prędkość odczytu ODROID-XU3 oscyluje w granicach 96MB/s, a w przypadku Jetsona wartość ta wynosi 79MB/s. Tak spora różnica wynika z zastosowanego nośnika eMMC, gdzie Hardkernel zastosował kości pamięci w wersji 5.0, natomiast NVIDIA w wersji 4.41.
Sytuacja odwraca się jednak przy Timing cached reads, gdzie Jetson pokazuje przewagę w zastosowanej pamięci DDR3L taktowanej zegarem 933MHz:
Zobaczmy zatem, jak wypadną wyniki testu OpenSSL Speed AES. Najpierw dla jednego rdzenia, a potem wszystkich dostępnych:
Niestety nawet dostępność HMP w ODROID-XU3, nie pozwoliło przegonić wyników jakie osiągnął Jetson TK1. Na koniec zobaczmy wyniki programu sysbench:
OpenGL / OpenGL ES 3.0 ?
Na tym polu ciężko porównać wyniki, ponieważ Jetson TK1 ma problem z programem glmark2-es2, a z kolei ODROID-XU3 nie obsługuje OpenGL. Wyniki zatem będą prawie na pewno nie do porównania. Ale, co tam.
Standardowo nie uda się uzyskać dobrych wyników, ponieważ sterowniki nie pozwalają przekroczyć 70 fps, uzyskując tym samym ogólny wynik 65 punktów.
=======================================================
glmark2 2012.08
=======================================================
OpenGL Information
GL_VENDOR: ARM
GL_RENDERER: Mali-T628
GL_VERSION: OpenGL ES 3.0
=======================================================
[build] use-vbo=false: FPS: 63 FrameTime: 15.873 ms
[build] use-vbo=true: FPS: 72 FrameTime: 13.889 ms
[texture] texture-filter=nearest: FPS: 71 FrameTime: 14.085 ms
[texture] texture-filter=linear: FPS: 71 FrameTime: 14.085 ms
[texture] texture-filter=mipmap: FPS: 71 FrameTime: 14.085 ms
[shading] shading=gouraud: FPS: 71 FrameTime: 14.085 ms
[shading] shading=blinn-phong-inf: FPS: 71 FrameTime: 14.085 ms
[shading] shading=phong: FPS: 71 FrameTime: 14.085 ms
[bump] bump-render=high-poly: FPS: 70 FrameTime: 14.286 ms
[bump] bump-render=normals: FPS: 72 FrameTime: 13.889 ms
[bump] bump-render=height: FPS: 72 FrameTime: 13.889 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 71 FrameTime: 14.085 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 71 FrameTime: 14.085 ms
[pulsar] light=false:quads=5:texture=false: FPS: 71 FrameTime: 14.085 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 62 FrameTime: 16.129 ms
[desktop] effect=shadow:windows=4: FPS: 67 FrameTime: 14.925 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 34 FrameTime: 29.412 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 34 FrameTime: 29.412 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 42 FrameTime: 23.810 ms
[ideas] speed=duration: FPS: 55 FrameTime: 18.182 ms
[jellyfish] <default>: FPS: 71 FrameTime: 14.085 ms
[terrain] <default>: FPS: 30 FrameTime: 33.333 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 71 FrameTime: 14.085 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 70 FrameTime: 14.286 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 71 FrameTime: 14.085 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 72 FrameTime: 13.889 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 72 FrameTime: 13.889 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 72 FrameTime: 13.889 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 72 FrameTime: 13.889 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 70 FrameTime: 14.286 ms
=======================================================
glmark2 Score: 65
=======================================================
Dopiero pomiar w trybie --off-screen daje miarodajne rezultaty:
=======================================================
glmark2 2012.08
=======================================================
OpenGL Information
GL_VENDOR: ARM
GL_RENDERER: Mali-T628
GL_VERSION: OpenGL ES 3.0
=======================================================
[build] use-vbo=false: FPS: 796 FrameTime: 1.256 ms
[build] use-vbo=true: FPS: 926 FrameTime: 1.080 ms
[texture] texture-filter=nearest: FPS: 1009 FrameTime: 0.991 ms
[texture] texture-filter=linear: FPS: 1002 FrameTime: 0.998 ms
[texture] texture-filter=mipmap: FPS: 1018 FrameTime: 0.982 ms
[shading] shading=gouraud: FPS: 720 FrameTime: 1.389 ms
[shading] shading=blinn-phong-inf: FPS: 748 FrameTime: 1.337 ms
[shading] shading=phong: FPS: 675 FrameTime: 1.481 ms
[bump] bump-render=high-poly: FPS: 408 FrameTime: 2.451 ms
[bump] bump-render=normals: FPS: 1077 FrameTime: 0.929 ms
[bump] bump-render=height: FPS: 1001 FrameTime: 0.999 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 767 FrameTime: 1.304 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 261 FrameTime: 3.831 ms
[pulsar] light=false:quads=5:texture=false: FPS: 965 FrameTime: 1.036 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 180 FrameTime: 5.556 ms
[desktop] effect=shadow:windows=4: FPS: 400 FrameTime: 2.500 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 132 FrameTime: 7.576 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 128 FrameTime: 7.812 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 162 FrameTime: 6.173 ms
[ideas] speed=duration: FPS: 229 FrameTime: 4.367 ms
[jellyfish] <default>: FPS: 532 FrameTime: 1.880 ms
[terrain] <default>: FPS: 33 FrameTime: 30.303 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 940 FrameTime: 1.064 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 733 FrameTime: 1.364 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 919 FrameTime: 1.088 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 882 FrameTime: 1.134 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 676 FrameTime: 1.479 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 881 FrameTime: 1.135 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 882 FrameTime: 1.134 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 780 FrameTime: 1.282 ms
=======================================================
glmark2 Score: 662
=======================================================
glmark2 dla OpenGL ES 3.0 zwrócił ogólny wynik 662 punktów. Jak wspomniałem wcześniej, uruchomienie glmark2-es2 na Jetson TK1 kończy się wywrotką programu, ale doskonale za to działa glmark2 dla OpenGL. Zobaczmy jak wyniki będą wyglądać tutaj, po ustawieniu wszystkich rdzeni w tryb performance:
=======================================================
glmark2 2012.08
=======================================================
OpenGL Information
GL_VENDOR: NVIDIA Corporation
GL_RENDERER: GK20A/NullRM/AXI
GL_VERSION: 4.4.0 NVIDIA 21.1
=======================================================
[build] use-vbo=false: FPS: 1739 FrameTime: 0.575 ms
[build] use-vbo=true: FPS: 3660 FrameTime: 0.273 ms
[texture] texture-filter=nearest: FPS: 2436 FrameTime: 0.411 ms
[texture] texture-filter=linear: FPS: 2459 FrameTime: 0.407 ms
[texture] texture-filter=mipmap: FPS: 2538 FrameTime: 0.394 ms
[shading] shading=gouraud: FPS: 1830 FrameTime: 0.546 ms
[shading] shading=blinn-phong-inf: FPS: 1790 FrameTime: 0.559 ms
[shading] shading=phong: FPS: 1764 FrameTime: 0.567 ms
[bump] bump-render=high-poly: FPS: 1595 FrameTime: 0.627 ms
[bump] bump-render=normals: FPS: 3215 FrameTime: 0.311 ms
[bump] bump-render=height: FPS: 3063 FrameTime: 0.326 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 520 FrameTime: 1.923 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 201 FrameTime: 4.975 ms
[pulsar] light=false:quads=5:texture=false: FPS: 1954 FrameTime: 0.512 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 223 FrameTime: 4.484 ms
[desktop] effect=shadow:windows=4: FPS: 409 FrameTime: 2.445 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 322 FrameTime: 3.106 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 299 FrameTime: 3.344 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 449 FrameTime: 2.227 ms
[ideas] speed=duration: FPS: 1106 FrameTime: 0.904 ms
[jellyfish] <default>: FPS: 466 FrameTime: 2.146 ms
[terrain] <default>: FPS: 49 FrameTime: 20.408 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 2166 FrameTime: 0.462 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 1839 FrameTime: 0.544 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 2167 FrameTime: 0.461 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 2010 FrameTime: 0.498 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 1719 FrameTime: 0.582 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 2012 FrameTime: 0.497 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 2010 FrameTime: 0.498 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 1941 FrameTime: 0.515 ms
=======================================================
glmark2 Score: 1598
=======================================================
Wynik 1598 (!!) punktów robi wrażenie. Nie zapominajmy jednak, że układ graficzny zastosowany w Jetson TK1 to zupełnie inna bajka.
Wróćmy jednak do nośnika eMMC
Z reguły nie potrafię się przekonać do pomiarów programem hdparm. Dlatego sprawdziłem to jeszcze raz, bardziej naturalną metodą. Oczywiście wiemy już, że zastosowane pamięci eMMC 5.0 w ODROID XU3 przełożą się na lepsze wyniki.
time sh -c "dd if=/dev/zero of=/home/file bs=4k count=200000 && sync"
200000+0 records in
200000+0 records out
819200000 bytes (819 MB) copied, 12.1435 s, 67.5 MB/s
real 0m13.767s
user 0m0.100s
sys 0m6.300s
sync ; sh -c 'echo 3 > /proc/sys/vm/drop_caches'
time sh -c "dd if=/home/file of=/dev/zero bs=4k count=200000"
200000+0 records in
200000+0 records out
819200000 bytes (819 MB) copied, 6.6226 s, 124 MB/s
real 0m6.635s
user 0m0.055s
sys 0m2.200s
Oraz dla Jetson TK1:
time sh -c "dd if=/dev/zero of=/home/file bs=4k count=200000 && sync"
200000+0 records in
200000+0 records out
819200000 bytes (819 MB) copied, 17.9846 s, 45.5 MB/s
real 0m19.686s
user 0m0.216s
sys 0m6.588s
sync ; sh -c 'echo 3 > /proc/sys/vm/drop_caches'
time sh -c "dd if=/home/file of=/dev/zero bs=4k count=200000"
200000+0 records in
200000+0 records out
819200000 bytes (819 MB) copied, 10.2501 s, 79.9 MB/s
real 0m10.352s
user 0m0.125s
sys 0m2.101s
Prędkości odczytu 124MB/s vs. 79MB/s oraz zapisu 67MB/s vs.45 MB/s. Widać tutaj doskonale różnicę pomiędzy eMMC 5.0 i eMMC 4.41.
W przypadku Jetsona nie jest to jednak kluczowy problem, ponieważ możemy podłączyć dysk twardy bezpośrednio pod kontroler SATA, gdzie dla dysku HDD uzyskujemy wynik 88 MB/s podczas zapisu oraz 107 MB/s podczas odczytu. Oczwiście podłączenie dysku SSD to już inna historia :)
Podsumowanie
ODROID-XU3 nabyłem głównie pod kątem HTPC do pokoju dziennego, aby zastąpił wysłużonego już ODROID-X2. Pomimo tego, że Linux działa tutaj zaskakująco dobrze, to na chwilę obecną nie uraczymy niestety XBMC / Kodi z obsługą akceleracji sprzętowej. Tutaj zdecydowanie lepiej sprawdzi się Jetson TK1 z pełną obsługą OpenGL, który poradzi sobie nawet z bitrate 120Mbps oraz materiałem 4K. Za jakiś czas pewnie się to zmieni, ale póki co ODROID-y zawsze pozostaną dla mnie sprzętem szytym pod Androida - chyba, że myślimy o zastosowaniach serwerowych... no dobra, mini-serwerowych :)
Jak wypadnie Android na ODROID-XU3? O tym dowiecie się z kolejnego odcinka.
DIY: Statyw z OBI do nagrywania z "góry"
Od dłuższego czasu nosiłem się z zamiarem zrobienia sobie statywu do nagrywania z "góry", ponieważ nagrywanie kamerką internetową Logitech C910 zaczęło mnie już po mału irytować. Rzecz jasna statyw typu tripod za bardzo nie nadaje się do tego celu, więc trzeba było wykombinować coś innego na wzór trzepaka. Po wszystkie elementy wybrałem się OBI - no może za wyjątkiem mocowania kamery do ramy rowerowej.
Potrzebne nam będą: dwie nogi do stołu o długości 60cm, rurka aluminiowa fi=25mm, dwie obejmy do rur fi=25mm, dwie deseczki 30x7 cm (im bardziej masywne tym lepiej), dwie śruby z uciętymi główkami oraz wkręty do drewna. Konstrukcja jest prosta jak budowa cepa, więc nawet nie ma co opisywać. Tak to wygląda:
Dodatkowo jeśli chcielibyśmy doświetlić scenę, możemy pokusić się o takie rozwiązanie. Dwie 12V żarówki LED o temperaturze 6000K i jasności 250 lumenów umieszczonych w puszkach montażowych, przykręconych do mocowań przewodów elektrycznych fi=25mm. Pozwala nam to na regulację kąta świecenia. Oczywiście zasilacz, odrobina przewodów i kostki.
i gotowe :)