Optymalizacja wybranych algorytmów przetwarzania obrazów przy użyciu zestawu instrukcji NEON dla urządzeń z procesorem ARM Promotor: dr hab. prof. WWSI.

Slides:



Advertisements
Podobne prezentacje
Programowanie w języku Matlab
Advertisements

Jerzy F. Kotowski1 Informatyka I Wykład 15 PIERWSZE KROKI.
1 Zagadnienia na egzamin. 2 Język C podsumowanie Struktura programu w języku C Zmienne, Stałe Operacje arytmetyczne Operatory logiczne Priorytety operatorów.
Temat 2: Podstawy programowania Algorytmy – 1 z 2 _________________________________________________________________________________________________________________.
GIS - elementy. Zasilanie systemu GIS Przetwarzanie graficzno-numeryczne: grafika rastrowa i wektorowa Oto jak będzie wyglądała mała literka "a" po powiększeniu.
© IEn Gdańsk 2011 Technika fazorów synchronicznych Łukasz Kajda Instytut Energetyki Oddział Gdańsk Zakład OGA Gdańsk r.
Obowiązki pracodawcy dotyczące zapewnienia pracownikom profilaktycznej ochrony zdrowia, właściwego postępowania w sprawach wypadków przy pracy oraz chorób.
Regionalna Sieć Szerokopasmowa Województwa Podlaskiego „ INTERNET BLIŻEJ WSZYSTKICH Departament Społeczeństwa Informacyjnego Urząd Marszałkowski Województwa.
1 Dr Galina Cariowa. 2 Legenda Iteracyjne układy kombinacyjne Sumatory binarne Sumatory - substraktory binarne Funkcje i układy arytmetyczne Układy mnożące.
Plan Czym się zajmiemy: 1.Bilans przepływów międzygałęziowych 2.Model Leontiefa.
NIE TAKI KOMPUTER STRASZNY JAK GO MALUJĄ PODSTAWY OBSŁUGI KOMPUTERA.
InMoST, Analiza architektury metodą ATAM Jerzy Nawrocki
Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego Benchmarking – narzędzie efektywnej kontroli zarządczej.
„Program dofinansowania zakupu i montażu odnawialnych źródeł energii ze środków Wojewódzkiego Funduszu Ochrony Środowiska i Gospodarki Wodnej w Opolu”
© Kazimierz Duzinkiewicz, dr hab. inż. Katedra Inżynierii Systemów Sterowania 1 Metody optymalizacji - Energetyka 2015/2016 Metody programowania liniowego.
Ekonometria stosowana Autokorelacja Piotr Ciżkowicz Katedra Międzynarodowych Studiów Porównawczych.
Do not put content on the brand signature area ING BANK ŚLĄSKI Bankowość mobilna 1.
Poczta elektroniczna – e- mail Gmail zakładanie konta. Wysyłanie wiadomości.
Grafika komputerowa.
UKE URZĄD KOMUNIKACJI ELEKTRONICZNEJDEBATA O CZĘSTOTLIWOŚCIACH, 4 lipca 2006 r. DEBATA NA TEMAT KRAJOWEJ STRATEGII GOSPODARKI CZĘSTOTLIWOŚCIOWEJ Zamierzenia.
Badania elastooptyczne Politechnika Rzeszowska Katedra Samolotów i Silników Lotniczych Ćwiczenia Laboratoryjne z Wytrzymałości Materiałów Temat ćwiczenia:
Solphy GlassNexus System Elektronicznej Wymiany Danych Dla Producentów Szyb Zespolonych.
Ewolucja S tandardu L eśnej M apy N umerycznej III Krajowa Konferencja pt. „System Informacji Przestrzennej w Lasach Państwowych – stan i perspektywy wdrażania.
IEN 2010 © wszelkie prawa zastrzeżone SEMINARIUM Pakiet MATLAB w Zakładzie OGM Możliwości posiadanych produktów.
TEORIE OSZCZĘDNOŚCI I INWESTYCJI Wykład 6 1. Teorie oszczędności i inwestycji 2  Zainteresowanie kapitałem i jego oszczędzaniem pojawiła się w połowie.
Powtórzenie wiadomości – arkusz kalkulacyjny. Co muszę wiedzieć i umieć, żeby dostać dwie piątki na sprawdzianie? 1.Znasz pojęcia: arkusz kalkulacyjny,
Lista Rozkazów: Język komputera Większość slajdów do tego wykładu to tłumaczenia i przeróbki oficjalnych sladjów do podręcznika Pattersona i Hennessy’ego.
Specjalista w dziedzinie Urządzeń do Granulacji. Mieszarka z Procesem Optymalnej Absorpcji (OAP) poprawia absorpcję pary i cieczy poprzez automatyczne.
© 2014 IBM Corporation COMMON POLSKA 2014 JDBC z IBM System i Tomasz Piela & Marcin Wilk Global Technlonogy Services, IBM.
Wyższa Szkoła Informatyki i Zarządzania w Bielsku-Białej Wydział Informatyki Kierunek: Informatyka Specjalność: Systemy Informatyczne PRACA DYPLOMOWA INŻYNIERSKA.
Gimnazjum nr 2 z Oddziałami Integracyjnymi w Woli Gimnazjum i co dalej?
Sieci komputerowe. Podział sieci. Podstawowe pojęcia związane z sieciami. Internet - określenia podstawowych terminów. Komunikacja w sieci.
Przewodnik – od sygnału do mapy- wykorzystanie urządzeń GPS w pomiarach geodezyjnych Technik geodeta Technikum nr 6 w Głogowie Technik geodeta Technikum.
Rodzaje grafiki komputerowej. Lekcja 5. Spis treści Rodzaje grafiki komputerowej. Format graficzny, piksel, raster. Modele barwne zapisu plików graficznych.
Python. Języki Programistyczne Microcode Machine code Assembly Language (symboliczna reprezentacja machine code) Low-level Programming Language (FORTRAN,
Analiza, projekt i implementacja zintegrowanego systemu zarządzania i promocji dla branży gastronomicznej Krzysztof Grabalski 5921.
Metody sztucznej inteligencji - Technologie rozmyte i neuronowe 2015/2016 Perceptrony proste nieliniowe i wielowarstwowe © Kazimierz Duzinkiewicz, dr hab.
Katarzyna Rychlicka Wielomiany. Katarzyna Rychlicka Wielomiany Przykłady Wykresy funkcji wielomianowych Równania wielomianowe Działania na wielomianach.
Projektowanie systemów cyfrowych z wykorzystaniem języka VHDL Układy sekwencyjne.
BURZA MÓZGÓW  Pierwszym etapem w pracy nad filmem były długie godziny rozmyślań nad doświadczeniem, które by nas naprawdę zaciekawiło i spełniało wymogi.
Opracowanie Joanna Szymańska Konsultacja Bożena Hołownia.
Zapraszam na spotkanie z wyrażeniami algebraicznymi!
{ NADLEŚNICTWO OSTRÓW MAZOWIECKA –WCZORAJ, DZIŚ I JUTRO…
Mobilne Systemy wykrywania obiektów z sygnałów wizyjnych Pracę dyplomową opracował: inż. Michał Szepielak Promotor: dr inż. Krzysztof Różanowski.
1 Definiowanie i planowanie zadań budżetowych typu B.
Urządzenia i technologie mobilne. Tablet Mobilny komputer większy niż telefon komórkowy, którego główną właściwością jest posiadanie dużego ekranu z zastosowaną.
Leśle trasy rekreacyjne TPK – część sopocka
Karta produktowa MODECOM FreeWAY SX7.1.
Programowanie Obiektowe – Wykład 1
Systemy wizyjne - kalibracja
Mikołaj Radwan JUnit Mikołaj Radwan
Liczby pierwsze.
Octave Instalacja i konfiguracja środowiska. Wektory i macierze.
ALGORYTMY I STRUKTURY DANYCH
Państwowa Wyższa Szkoła Zawodowa, Tarnów Dr inż. Marek Gorgoń
Elementy fizyki kwantowej i budowy materii
Obliczenia w Matlabie Operatory, instrukcje sterujące, operacje bitowe
System operacyjny cz.2.
PRZYKŁADY Metody obrazowania obiektów
Zmiana koła Narzędzia i urządzenia używane podczas zmiany koła w warunkach warsztatowych.
temat stwierdzenie Grafika SmartArt z obrazami na czerwonym tle
Kąty w wielościanach.
Implementacja rekurencji w języku Haskell
Koncepcja Gazyfikacji Gminy WĘGIERSKA GÓRKA
Język C++ Operatory Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła.
Prawa ruchu ośrodków ciągłych c. d.
Autor: Magdalena Linowiecka
Informacje ogólne Mgr Inż. Jerzy Orlof
Zapis prezentacji:

Optymalizacja wybranych algorytmów przetwarzania obrazów przy użyciu zestawu instrukcji NEON dla urządzeń z procesorem ARM Promotor: dr hab. prof. WWSI Michał GrabowskiAutor: Piotr Hechelski

Plan prezentacji 1.Cel pracy 2.Architektura ARM i instrukcje NEON 3.Prezentacja aplikacji 4.Implementacja i optymalizacja algorytmów na przykładzie 2 efektów 5.Wyniki testów 6.Podsumowanie

Cel pracy Implementacja i optymalizacja wybranych algorytmów do nakładania efektów na zdjęcia w językach C#, C++ i C++ z instrukcjami NEON Stworzenie aplikacji na system Windows Phone 8 wykorzystującej zaimplementowane algorytmy Przeprowadzenie testów wydajnościowych na różnych urządzeniach

Architektura ARM Advanced RISC Machine – zredukowany zestaw instrukcji, 32 i 64 bitowa przestrzeń adresowa Systemy wbudowane i niewielkie urządzenia elektroniczne, niski pobór mocy

Instrukcje NEON (intrinsics) 64 i 128-bitowy zestaw instrukcji typu SIMD Instrukcje wywoływane z C++ po dołączeniu pliku nagłówkowego „arm_neon.h” Operacje na wektorach danych – max. 16 elementów int8x8_t int8x16_t int16x4_t int16x8_t int32x2_t int32x4_t int64x1_t int64x2_t

Wybrane efekty Sepia Dwa kolory Znajdowanie krawędzi Farby olejne

Działanie aplikacji DEMONSTRACJA

Efekt „Dwa kolory”

Implementacja w C# byte intensity = (byte)((red + green + blue) / 3); if (intensity >= IntensityTreshold) { source.PixelBuffer[i * 4] = LightColor.Blue; //overwrite blue source.PixelBuffer[i * 4 + 1] = LightColor.Green; //overwrite green source.PixelBuffer[i * 4 + 2] = LightColor.Red; //overwrite red } else { source.PixelBuffer[i * 4] = DarkColor.Blue; source.PixelBuffer[i * 4 + 1] = DarkColor.Green; source.PixelBuffer[i * 4 + 2] = DarkColor.Red; }

Implementacja w NEONIE (R+G+B)/3 ≈ (R+G+B) * 85 >> 8 //załadowanie kanałów do tablicy wektorów uint8x8x4_t bgra = vld4_u8(pixels + i); //zsumowanie kanałów kolorów uint16x8_t tempIntensity = vaddw_u8(vaddl_u8(bgra.val[0], bgra.val[1]), bgra.val[2]); //wymnożenie przez liczbę 85 (multiplyNumber) tempIntensity = vmulq_u16(tempIntensity, multiplyNumber); //przesunięcie w prawo o 8 bitów (dzielenie przez 256) i zawężenie komórek z 16 bitów do 8 bitów uint8x8_t intensity = vshrn_n_u16(tempIntensity, 8);

Efekt „znajdowanie krawędzi”

Koncepcja

Implementacja w NEONIE – wersja 1 1.Oblicz intensywność każdego piksela wykorzystując wektor danych (8 pikseli naraz) 2.Stwórz macierze sąsiednich intensywności i załaduj do 8- elementowego wektora, pomijając wartość środkową 3.Wykorzystaj macierze przekształceń załadowane do 8- elementowego wektora, pomijając wartość środkową

//wymnóż wektory int16x8_t vectorMultiplied = vmulq_s16(kernelX, area); //po pierwszym zsumowaniu zostają 4 pary, a po drugim już tylko 2 int64x2_t pair = vpaddlq_s32(vpaddlq_s16(vectorMultiplied)); //zsumuj ostatnie dwa elementy int64_t gradientX = vgetq_lane_s64(pair, 0) + vgetq_lane_s64(pair, 1);

Implementacja w NEONIE – wersja 2 1.Oblicz intensywność każdego piksela wykorzystując wektor danych (8 pikseli naraz) 2.Wykorzystaj współbieżną pętlę przy tworzeniu macierzy sąsiednich intensywności i mnożeniu skalarnym macierzy. Wykorzystaj standardowe macierze przekształceń.

Concurrency::parallel_for(1, source->PixelHeight - 1, [source, buffer, &KernelX, &KernelY](int row) { for (int column = 1; column PixelWidth - 1; column++) { byte area[3][3] = { 0 }; area[0][0] = buffer[GetPixelOffsetInGrayScaleArray(row - 1, column - 1, source->PixelWidth)]; area[0][1] = buffer[GetPixelOffsetInGrayScaleArray(row - 1, column, source->PixelWidth)]; area[0][2] = buffer[GetPixelOffsetInGrayScaleArray(row - 1, column + 1, source->PixelWidth)]; (…) int gradientX = KernelX[0][0] * area[0][0] + KernelX[0][1] * area[0][2] + KernelX[1][0] * area[1][0] + KernelX[1][1] * area[1][2] + KernelX[2][0] * area[2][0] + KernelX[2][1] * area[2][2]; int gradientY = KernelY[0][0] * area[0][0] + KernelY[0][1] * area[0][1] + KernelY[0][2] * area[0][2] + KernelY[1][0] * area[2][0] + KernelY[1][1] * area[2][1] + KernelY[1][2] * area[2][2]; int gradient = (int)sqrt((double)(gradientX * gradientX + gradientY * gradientY)); int pixelOffset = source->GetPixelOffset(row, column); source->PixelBuffer[pixelOffset] = source->PixelBuffer[pixelOffset + 1] = source->PixelBuffer[pixelOffset + 2] = MathHelper::ClampToByte(gradient); } });

Wyniki testów – zdjęcie 1280x720

Podsumowanie - metody optymalizacji Współbieżne pętle (Concurrency::parallel_for) Wykorzystanie instrukcji NEON Mnożenie i przesunięcie bitów wyniku w prawo zamiast dzielenia Operacje na pikselach wykonywane w osobnym wątku Stosowanie typów prostych w złożonych algorytmach (WinRT) Implementacja algorytmów w językach natywnych (np. C++) zamiast w językach kompilowanych do kodu bajtowego (np. C#, Java)

Podsumowanie – co zostało wykonane Implementacja 4 efektów – sepia, dwa kolory, znajdowanie krawędzi i farby olejne – w C#, C++ i C++ z instrukcjami NEON Aplikacja na Windows Phone 8 wykorzystująca algorytmy efektów do nakładania na zdjęcia oraz testująca ich wydajność Testy wydajnościowe algorytmów Analiza sposobów optymalizacji algorytmów