AUTOMATYKA 2008 Tom 12 Zeszyt 3 Zbigniew Bubliñski*, Miros³aw Jab³oñski* Rozszerzenia SIMD w przetwarzaniu obrazów** 1. Wprowadzenie Przetwarzanie i analiza obrazów cyfrowych jest dzia³alnoœci¹ stosunkowo czasoch³onn¹ g³ównymi przyczynami takiego stanu rzeczy s¹ z jednej strony z³o one i wyrafinowane algorytmy, z drugiej zaœ wykorzystywana w nich ogromna iloœæ danych. O ile na samo skomplikowanie metod obróbki obrazów niewiele mo na poradziæ, to obróbkê du ej iloœci danych mo na w odpowiedni sposób usprawniæ, co pozwoli albo na skrócenie czasu przetwarzania, albo na u ycie lepszych, ale bardziej kosztownych czasowo procedur bez koniecznoœci zbytniego wyd³u ania ca³ego procesu. Takim usprawnieniem mo e byæ przyk³adowo realizacja ca³oœci analizy (lub jej wybranych fragmentów) na drodze sprzêtowej. Jest to jednak ma³o elastyczne i kosztowne podejœcie wiêkszoœæ istniej¹cych systemów przetwarzania i analizy obrazów cyfrowych ma charakter czysto programowy, wiêc usprawnieñ nale a³oby raczej szukaæ w lepszym dopasowaniu wykonywanego programu do mo liwoœci samego procesora. W dalszej czêœci niniejszej publikacji przedstawiono podstawowe informacje dotycz¹ce rozszerzeñ SIMD architektury procesora x86 oraz przyk³ad wykorzystania rozkazów MMX i SSE do szybkiej modyfikacji jasnoœci obrazu cyfrowego. Prace by³y prowadzone w œrodowisku VirtualDub [8], bowiem stanowi ono od d³u szego czasu jedno z najczêœciej wykorzystywanych narzêdzi w Laboratorium Biocybernetyki. 2. Rozszerzenia SIMD Rozszerzenia SIMD (Single Instruction, Multiple Data) pojawi³y siê jako próba wzbogacenia mo liwoœci klasycznego procesora o wykonywanie pewnych prostych instrukcji jednoczeœnie na kilku danych. Iloœæ przetwarzanych danych i rodzaj operacji zale y od poziomu ewolucyjnego procesora. Ju w procesorze Pentium pojawi³a siê mo liwoœæ wykonywania kilku niezbyt z³o onych instrukcji na danych bêd¹cych liczbami ca³kowitymi by³y to tzw. rozkazy MMX (MultiMedia extension albo MatrixMathematics extension [5]), a co * Katedra Automatyki, Akademia Górniczo-Hutnicza w Krakowie ** Praca zrealizowana w ramach badañ w³asnych umowa AGH nr 10.10.120.783 609
610 Zbigniew Bubliñski, Miros³aw Jab³oñski ciekawe do ich realizacji wykorzystano zasoby udostêpnione przez jednostkê zmiennoprzecinkow¹ (koprocesor matematyczny). Nastêpne procesory z rodziny x86 potrafi³y ju wykonywaæ operacje na liczbach zmiennoprzecinkowych, wykorzystuj¹c dedykowany do tego celu zasoby sprzêtowe procesora. Ogólna nazwa nowych rozszerzeñ to tzw. SSE (Streaming SIMD Extension), zaœ dodany numer identyfikowa³ poziom rozszerzeñ, a co za tym idzie, udostêpniane mo liwoœci w najnowszych procesorach wystêpuje kilka wariantów SSE4. Jak ju wspomniano, rozkazy MMX mog¹ dzia³aæ tylko na danych ca³kowitych [5, 7]. Wydaje siê to znacz¹cym ograniczeniem, ale w wielu zastosowaniach operacje ca³kowitoliczbowe s¹ zupe³nie wystarczaj¹ce. Przyk³adowo przetwarzanie sygna³ów multimedialnych (obraz, dÿwiêk) to jeden z takich obszarów. Rozszerzenie MMX pozwala na wykonywanie operacji na danych o maksymalnej wielkoœci 64 bitów, a wiêc zak³adaj¹c e przetwarzane dane s¹ jednobajtowe, mamy mo liwoœæ wykonania pewnych operacji jednoczeœnie na oœmiu danych (bajtach) tak jak to pokazano na rysunku 1. Rys. 1. Rozszerzenie MMX reprezentacja danych i przyk³adowa operacja Teoretycznie pozwoli³oby to na oœmiokrotne skrócenie czasu przetwarzania, ale jak wiadomo, praktyka zwykle odbiega od teorii istnieje kilka powa nych przeszkód znacz¹co utrudniaj¹cych wykorzystanie rozszerzeñ SIMD. Po pierwsze, lista operacji mo liwych do zrealizowania w sposób równoleg³y jest dosyæ ograniczona, a wiêc nie ka dy algorytm mo e byæ zaimplementowany w taki w³aœnie sposób. Po drugie, zwykle operacja SIMD wymaga odpowiedniego przygotowania danych zanim zostanie zrealizowana, dane musz¹ byæ przeniesione z pamiêci i w³aœciwie upakowane w rejestrach, zaœ po operacji trzeba dane rozpakowaæ i ponownie umieœciæ w pamiêci. Wi¹ e siê z tym dodatkowy nak³ad pracy (czasu) i w pewnych sytuacjach mo e siê okazaæ, e te dodatkowe czynnoœci trwaj¹ d³u ej, ni mo na zyskaæ poprzez równoleg³e przetwarzanie danych. Po trzecie i to chyba najwiêkszy problem dostêpne kompilatory jêzyków wysokiego poziomu nie najlepiej sobie radz¹ z generacj¹ kodu efektywnie wykorzystuj¹cego mo liwoœci samego procesora. Chc¹c wiêc uzyskaæ taki kod, konieczne jest napisanie ca³ego programu lub jego krytycznych czasowo
Rozszerzenia SIMD w przetwarzaniu obrazów 611 fragmentów, w jêzyku najni szego poziomu w asemblerze. W nastêpnym rozdziale przedstawiono operacjê zmiany jasnoœci obrazu zrealizowan¹ programowo za pomoc¹ filtrów dzia³aj¹cych w œrodowisku VirtualDub, zaœ istotne ze wzglêdu na czas ich wykonania czêœci kodów napisano w asemblerze wykorzystuj¹c rozkazy MMX oraz SSE2. 3. Zmiana jasnoœci obrazu w œrodowisku VirtualDub realizacja Modyfikacja jasnoœci monochromatycznego obrazu cyfrowego jest bardzo prost¹ operacj¹ i sprowadza siê do dodania pewnej sta³ej do wartoœci jasnoœci poszczególnych punktów obrazu [2, 3]. Komplikacje pojawiaj¹ siê w przypadku obrazów kolorowych najczêœciej spotykan¹ reprezentacj¹ barw jest RGB, czyli kolor ka dego punktu obrazu jest opisany trójk¹ liczb okreœlaj¹cych zawartoœæ poszczególnych sk³adowych barwnych (Red, Green, Blue). Przy takiej reprezentacji zmiana jasnoœci nie mo e ju byæ dokonana poprzez dodanie tej samej sta³ej do wartoœci poszczególnych sk³adowych, gdy ze wzglêdu na ró n¹ charakterystykê czu³oœci oka ludzkiego w ró nych zakresach widmowych, taka modyfikacja skutkowa³aby zmian¹ postrzeganej barwy punktu, a celem jest zmiana jasnoœci, a nie koloru. Aby w sensowny sposób przeprowadziæ tak¹ operacjê, konieczne jest przetransformowanie obrazu z przestrzeni RGB w inn¹ tak¹, w której jedn¹ ze sk³adowych bêdzie jasnoœæ. Warunek ten spe³nia kilka reprezentacji przyk³adowo HLS, HSV, YUV. W praktyce najczêœciej wykorzystywany jest jeden z wielu wariantów tej ostatniej, w której sk³adowa Y to w³aœnie jasnoœæ (luminancja) a U i V to sk³adowe chrominancyjne zawieraj¹ce informacjê o kolorze punktu. Dysponuj¹c ju reprezentacj¹ YUV, modyfikacja jasnoœci obrazu przebiega identycznie jak w przypadku obrazów monochromatycznych zmieniana jest tylko sk³adowa Y. Po dokonaniu modyfikacji konieczne jest przeprowadzenie transformacji odwrotnej, czyli powrót do reprezentacji RGB. Stosowne wzory transformacyjne mo na znaleÿæ w [1, 4, 6]. W œrodowisku VirtualDub wewnêtrzn¹ reprezentacj¹ obrazów kolorowych jest RGB. Z tego wzglêdu konieczne by³o dodanie do implementowanego filtru kodu realizuj¹cego transfomaty RGB->YUV i YUV->RGB, ale w niniejszym opracowaniu skupiono siê jedynie na samej modyfikacji jasnoœci. Poniewa w reprezentacji RGB ka dy piksel obrazu opisany jest 32 bitami (po osiem bitów na ka d¹ sk³adow¹ R, G, B i osiem bitów niewykorzystanych), przyjêto podobn¹ reprezentacjê obrazu w przestrzeni YUV, ale poszczególne sk³adowe przechowywane s¹ oddzielnie, co pozwala zmniejszyæ zapotrzebowanie na pamiêæ o 25%. Punktem wyjœcia by³o napisanie stosownej funkcji w jêzyku C, która realizuje modyfikacjê jasnoœci obrazu o zadan¹ wartoœæ, zgodnie z przedstawionymi wy ej za³o eniami. Funkcja ta i zmierzone czasy przetwarzania uzyskane przy jej u yciu stanowi¹ uk³ad odniesienia do kolejnych funkcji, napisanych w asemblerze jednej, wykorzystuj¹cej rozkazy MMX do jednoczesnej modyfikacji oœmiu punktów obrazu, oraz drugiej, w której u yto rozkazów SSE2, co pozwoli³o na jednoczesn¹ modyfikacjê szesnastu punktów obrazu.
612 Zbigniew Bubliñski, Miros³aw Jab³oñski 4. Wyniki testów Opracowane filtry przetestowano w œrodowisku VirtualDub, modyfikuj¹c jasnoœæ obrazów zawartych w trzech filmach w formacie AVI. Filmy ró ni³y siê liczb¹ klatek, rozmiarami klatek, a tak e zawartoœci¹. Ka dy z filmów by³ przetwarzany kilkukrotnie, za ka - dym razem jego jasnoœæ by³a zmieniana w innym stopniu. Czas przetwarzania (samej modyfikacji jasnoœci) by³ mierzony dla ka dej klatki, a nastêpnie czasy te zosta³y zsumowane, pozwalaj¹c uzyskaæ ³¹czny czas przetwarzania filmu. W kolejnym kroku uzyskane wyniki zosta³y uœrednione dla ka dego filmu. Na rysunku 2 pokazano œrodowisko VirtualDub w trakcie przetwarzania jednego z filmów. Rys. 2. Wygl¹d ekranu w czasie testów Testy przeprowadzono na dwóch komputerach typu PC pierwszy (oznaczony liter¹ A) by³ wyposa ony w wiekowy ju procesor AMD Athlon XP2000 (z zegarem 1667 MHz), drugi (oznaczony liter¹ B) w procesor Intel Q6600 (z zegarem 2400 MHz). Taki dobór sprzêtu mia³ z jednej strony pozwoliæ na ocenê przyspieszenia algorytmów poprzez wykorzystanie rozszerzeñ SIMD, z drugiej zaœ dostarczyæ informacji o tym, jak unowoczeœnienie
Rozszerzenia SIMD w przetwarzaniu obrazów 613 architektury procesora wp³ywa na realne czasy przetwarzania. Uzyskane wyniki zestawiono w tabeli 1. Brak wyników dla procesora A i instrukcji SSE2 wynika z faktu, e rozszerzenie SSE2 pojawi³o siê dopiero w procesorze Pentium 4. Tabela 1 Œrednie czasy przetwarzania porównanie metod Film 1 2 3 Procesor Filtr C [ms] Filtr ASM+MMX [ms] Przysp. Filtr ASM+SSE2 [ms] Przysp. A 54,71 17,02 3,2 B 27,99 3,59 7,8 1,86 15,0 A 38,06 12,08 3,1 B 19,04 2,44 7,8 1,27 16,0 A 257,27 83,72 3,1 B 128,81 16,54 7,8 8,60 15,0 Z przedstawionych wyników wyraÿnie widaæ, e samo u ycie nowoczeœniejszego i szybszego procesora bez zmiany algorytmu (mechanizmu przetwarzania) niewiele daje. Wykorzystanie kodu napisanego w czystym C na lepszym procesorze wi¹ e siê jedynie z mniej wiêcej dwukrotnym skróceniem czasu obliczeñ (wyniki w trzeciej kolumnie tabeli). Zdecydowanie lepsze rezultaty mo na uzyskaæ, wykorzystuj¹c rozszerzenia SIMD nawet na tym samym sprzêcie. U ycie rozkazów MMX w kodzie napisanym w asemblerze pozwala na skrócenie czasów przetwarzania od 3,1 raza dla procesora A a do prawie osiem razy dla procesora B. Jeszcze lepsze wyniki mo na uzyskaæ, stosuj¹c rozkazy SSE mo liwe jest wówczas oko³o piêtnastokrotne skrócenie czasu obliczeñ, choæ konieczna jest do tego odpowiednia infrastruktura (w miarê nowoczesny sprzêt). Œwiadczy to o du o lepszej efektywnoœci rozszerzeñ SIMD w stosunku do konwencjonalnych instrukcji wspó³czesnych procesorów. 5. Podsumowanie Wykorzystanie rozszerzeñ SIMD zawartych w architekturze wspó³czesnych procesorów pozwoli³o w znacz¹cy sposób przyspieszyæ czas przetwarzania obrazu cyfrowego. Warto zwróciæ uwagê, e wykorzystanie tych mechanizmów umo liwi³o uzyskanie znacznie lepszych rezultatów ni w sytuacji, gdy u yto nowoczeœniejszego i szybszego procesora realizuj¹cego klasyczny algorytm. Otrzymanie takich wyników wymaga pewnej dodatkowej pracy, jest czasoch³onne zw³aszcza na etapie uruchamiania kodu oraz znacz¹co zmniejsza przenaszalnoœæ kodu, jednak skutecznie przyspiesza dzia³anie ca³ego systemu przetwarzania i analizy obrazów.
614 Zbigniew Bubliñski, Miros³aw Jab³oñski Literatura [1] Keith J., Video Demystified: A Handbook for the Digital Engineer. 5th Edition, Elsevier 2005. [2] Parker J.R., Algorithms for Image Processing and Computer Vision. New York, Wiley Computer Publishing 1997. [3] Pratt W.K., Digital Image Processing. New York, John Wiley & Sons, Inc., 1991. [4] Skarbek W., Metody reprezentacji obrazów cyfrowych. Warszawa, Akademicka Oficyna Wydawnicza PLJ 1993. ród³a internetowe: [5] INTEL Corp. www.intel.com [6] Konwersja YUV-RGB http://www.fourcc.org/fccyvrgb.php [7] MMX Primer http://www.tommesani.com/mmxprimer.html [8] VirtualDub http://www,virtualdub.org