Politechnika Rzeszowska

Wielkość: px
Rozpocząć pokaz od strony:

Download "Politechnika Rzeszowska"

Transkrypt

1 Politechnika Rzeszowska i m. I g n a c e g o Ł u k a s i e w i c z a Wydział Elektrotechniki i Informatyki Katedra Informatyki i Automatyki Bogusław Rymut ŚLEDZENIE OBIEKTÓW PRZY WYKORZYSTANIU GPU Praca dyplomowa magisterska Opiekun pracy: dr hab. inż. Bogdan Kwolek, prof. PRz Rzeszów 2010

2 Spis treści WSTĘP... 1 ROZDZIAŁ 1 WPROWADZENIE PRZETWARZANIE RÓWNOLEGŁE I ROZPROSZONE WYKORZYSTANIE UKŁADÓW GPU PROGRAMOWANIE RÓWNOLEGŁE... 5 ROZDZIAŁ 2 TECHNOLOGIA NVIDIA CUDA ARCHITEKTURA URUCHAMIANIE FUNKCJI JĄDRA HIERARCHIA PAMIĘCI Pamięć globalna Pamięć współdzielona Pamięć lokalna Pamięć stała Pamięć tekstury METODA REDUKCJI INTERAKCJA Z GRAFIKĄ ROZDZIAŁ 3 ALGORYTMY WYKORZYSTANIE W PRACY MODEL ADAPTACYJNY METODA ROJU CZĄSTECZEK METODA FILTRU CZĄSTECZKOWEGO ROZDZIAŁ 4 IMPLEMENTACJA PROGRAMOWA ŚRODOWISKO PROGRAMISTYCZNE TECHNIKI OGÓLNE Model aplikacji Pliki konfiguracyjne Dane wejściowe Skalowanie obrazów Generowanie liczb losowych IMPLEMENTACJA MODELU ADAPTACYJNEGO Wzorzec Normalizacja obrazu Inicjalizacja wzorca Obliczanie wartości funkcji celu oraz wag cząsteczek Aktualizacja modelu I -

3 4.4 IMPLEMENTACJA METODY ROJU CZĄSTECZEK Dekompozycja danych Tworzenie roju cząsteczek Wyszukiwanie najlepszej cząsteczki Aktualizacja pozycji cząsteczek i wektorów Eksperyment IMPLEMENTACJA METODY FILTRU CZĄSTECZKOWEGO Dekompozycja danych Predykcja pozycji cząsteczek Resampling Eksperyment PORÓWNANIE WYNIKÓW EKSPERYMENTÓW PODSUMOWANIE BIBLIOGRAFIA DODATEK A PLIK KONFIGURACYJNY SPIS ILUSTRACJI SPIS TABEL SPIS STOSOWANYCH SKRÓTÓW II -

4 Wstęp W niniejszej pracy zaprezentowane zostaną techniki programowania równoległego w oparciu o technologię NVIDIA CUDA. Technologia ta służy do programowania układów graficznych GPU (ang. Graphics Processing Unit) tej firmy. Układy te są często wykorzystywane do celów czysto obliczeniowych, oraz badawczych. Ich wykorzystanie w ten sposób określane jest mianem GPGPU (ang. General-Purpose computing on Graphics Processing Units) i jest obecnie bardzo popularne w środowiskach naukowych na całym świecie. Celem pracy jest opracowanie algorytmu, który umożliwi przyspieszenie działania układu śledzącego poprzez implementację filtru cząsteczkowego (ang. Particle Filter, PF), implementację metody roju cząsteczek (ang. Particle Swarm Optimization, PSO), oraz implementację modelu adaptacyjnego w środowisku równoległym GPU. W pracy zaproponowano oryginalne sposoby dekompozycji algorytmów filtru cząsteczkowego, metody roju cząsteczek, oraz modelu adaptacyjnego. Do realizacji celu pracy zaprojektowano system wizyjny, w którym obliczenia realizowane są na GPU. Do modelowania obiektu zainteresowania wykorzystano adaptacyjne mieszaniny gaussowskie. Motywacją do podjęcia prac był problem śledzenia obiektów w czasie rzeczywistym przy wykorzystaniu modelu adaptacyjnego. Model adaptacyjny pomimo wysokiej precyzji i niezawodności śledzenia nie jest wykorzystywany w inteligentnych systemach monitoringu z powodu znacznych wymagań obliczeniowych. Analiza możliwości obliczeniowych obecnie dostępnych układów GPU, oraz analiza wspomnianego algorytmu śledzącego były podstawą po przyjęcia hipotezy, że dzięki układom GPU możliwe będzie śledzenie obiektu w czasie rzeczywistym. Problem wydajności poruszono w końcowej części pracy. W tej części pracy przedstawiono wyniki wydajności implementacji wszystkich metod na kartach graficznych firmy NVIDIA, oraz implementacji w środowisku jednowątkowym na procesorach CPU (ang. Central Processing Unit) firmy Intel. Praca została podzielona na cztery rozdziały. W rozdziale pierwszym krótko omówiono historię programowania równoległego, jego zalety oraz praktyczne przykłady wykorzystania przetwarzania równoległego, w tym także przetwarzania bazującego na technologii GPU

5 Rozdział drugi prezentuje technologię NVIDA CUDA. W rozdziale tym przedstawiono narzędzia programistyczne, techniki oraz metodologię tworzenia aplikacji w oparciu o wspomnianą technologię. Jej wykorzystanie zostanie zilustrowane kilkoma prostymi przykładami. Trzeci rozdział prezentuje wykorzystane w pracy metody, oraz prezentuje ich zastosowanie do śledzenia obiektów. Rozdział czwarty przedstawia programową implementację algorytmów przedstawionych w rozdziale trzecim, opisuje on także metody wykorzystane w celu zrównoleglenia algorytmów filtru cząsteczkowego oraz roju cząsteczek. W tej części pracy prezentowane są przyspieszenia obliczeń, a także czasy obliczeń dla GPU/CPU dla filtru cząsteczkowego oraz metody roju cząsteczek

6 Rozdział 1 Wprowadzenie 1.1 Przetwarzanie równoległe i rozproszone Ciągle rosnące zapotrzebowanie na moc obliczeniową, w instytutach i jednostkach badawczych stanowi wyzwanie dla inżynierów na całym świecie. Ich zadaniem jest dostarczenie jak największej mocy obliczeniowej przy często ograniczonym budżecie projektowym. Skłania to inżynierów do poszukiwania wysoko skalowalnych i tanich urządzeń obliczeniowych wysokiej mocy. Często moc powstających w ten sposób superkomputerów jest niewyobrażalna, czego przykładem może być projekt FASTRA II 1. Porównanie aktualnie najpotężniejszych superkomputerów obliczeniowych można znaleźć na liście TOP Klasycznym rozwiązaniem problemu deficytu mocy obliczeniowej jest zakup nowego układu obliczeniowego, lub procesora CPU. Niestety jest to rozwiązanie krótko dystansowe, ponieważ napotyka w pewnym memencie granicę technologiczną brak dostępności wydajniejszych układów obliczeniowych. Drugą wiodącą metodą jest budowa równoległego środowiska obliczeniowego. W podejściu tym skomplikowany problem jest dzielony pomiędzy wiele jednostek obliczeniowych, które współpracują ze sobą w celu rozwiązania wspólnego zadania. Przy rozwiązywaniu problemów, które można zrównoleglić, często wykorzystuje się procesory wielordzeniowe, maszyny wieloprocesorowe lub infrastrukturę sieciową w przypadku rozproszenia jednostek obliczeniowych. Głównym problemem środowisk rozproszonych są opóźnienia wprowadzane przez kanał komunikacyjny. Z tego powodu środowiska rozproszone rzadko wykorzystuje się do rozwiązywania problemów w czasie rzeczywistym. Przykładami projektów wykorzystujących obliczenia rozproszone są platformy SETI@Home, wykorzystywanej do szukania śladów życia pozaziemskiego oraz Floding@Home, której celem jest badanie zjawiska zwijania białek. Obie platformy osiągają gigantyczną moc obliczeniową dzięki pomocy wolontariuszy, którzy 1 Strona domowa projektu 2 Aktualna lista znajduje się pod adresem

7 udostępniają moc obliczeniową prywatnych komputerów osobistych do celu realizacji wspólnych obliczeń. Poszukiwanie coraz większej mocy obliczeniowej skłoniło inżynierów do zwrócenia uwagi na rozwijające się bardzo szybko dedykowane układy graficzne. Wykorzystywanie układów graficznych w celach obliczeniowych jest obiektem badań od wielu lat. Tendencje rozwojowe nakreśliły takie maszyny jak Ikonas, Pixel Machine i Pixel-Planes 5. Szybki postęp multimediów spowodował drastyczny rozwój układów GPU, co w przeciągu ostatnich kilkunastu lat zaowocowało ogromną ilością eksperymentów i symulacji prowadzonych wyłącznie przy użyciu wydajnych układów graficznych takich jak NVIDIA Tesla. 1.2 Wykorzystanie układów GPU Układy GPU zapewniają idealne środowisko do rozwiązywania złożonych obliczeniowo problemów takich jak śledzenie obiektów. Wysoka wydajność i duża skalowalność takiego środowiska pozwala na przetwarzanie serii zbiorów testowych w czasie rzeczywistym. Sama budowa GPU w znaczącym stopniu odbiega od klasycznego procesora CPU (Rys. 1.1), gdyż układ taki zbudowany jest z kilku lub nawet kilkudziesięciu multiprocesorów. Każdy multiprocesor posiada własną pomięć podręczną, jednostkę sterującą oraz określoną ilość rdzeni. Procesor układu graficznego może posiadać nawet kilkaset rdzeni w odróżnieniu od standardowych procesorów CPU firmy Intel oraz AMD, które posiadają obecnie maksymalnie osiem rdzeni. Kolejną istotną różnicą jest taktowanie zegara. W tym wypadku należy podkreślić, że procesory CPU charakteryzują się znacznie wyższym taktowaniem. Warto jednak podkreślić ogromną moc obliczeniową GPU wynikającą w dużej mierze z zastosowanej architektury sprzętowej. Architektura sprzętowa procesorów GPU bazuje na rozszerzonej koncepcji SIMD (ang. Single Instruction Multiple Data) nazywanej SIMT (ang. Single Instruction Multiple Thread), natomiast procesory CPU budowane są w oparciu o architekturę CISC (ang. Complex Instruction Set Computers). Od pewnego czasu procesory CPU zyskują jednak pewne cechy architektury SIMD, dzięki wprowadzeniu rozszerzeń takich jak: MMX, czy SSE (ang. Streaming SIMD Extensions), które wprowadzają dodatkowe rozkazy zapożyczone z architektury SIMD

8 Rys Budowa procesora CPU i GPU Wykorzystanie karty graficznej na potrzeby przetwarzania obrazów nie jest nowym elementem w informatyce. Przykładów projektów, których celem jest przystosowanie GPU do zadań przetwarzania i rozpoznawania obrazów jest wiele. Najpopularniejszym z nich jest projekt OpenVIDIA. Istnieje także sporo dedykowanych projektów i prac naukowych skupiających się na jednym konkretnym problemie komputerowego przetwarzania obrazów, który jest implementowany na GPU. 1.3 Programowanie równoległe Rozwiązywanie problemów w środowisku równoległym zawsze stwarza pewne problemy. Pierwszym z nich jest odmienna metodologia tworzenia algorytmu. Większość klasycznych algorytmów działa w środowisku wielowątkowym wykorzystując bibliotekę OpenMP, pozwalającą zrównoleglić pewne fragmenty algorytmu napisanego w środowisku jednowątkowym. Biblioteka ta nie posiada odpowiednika na platformę GPU, z tego powodu wszystkie stosowane algorytmy wymagają przeprojektowania. W środowisku równoległym mogą także występować trudności praktyczne takie jak konflikty dostępu do pamięci oraz zakleszczenia, które nie występują w środowisku jednowątkowym. Z tego powodu tworzenie aplikacji równoległych jest zadaniem trudnym i czasochłonnym

9 - 6 -

10 Rozdział 2 Technologia NVIDIA CUDA Firma NVIDIA jest liderem na rynku producentów układów graficznych. W 2007 roku firma ta stworzyła bardzo wydajne i przenośne API, środowisko programistyczne CUDA, umożliwiające programowanie kart graficznych. Środowisko to jest dostępne nieodpłatnie na najpopularniejsze systemy operacyjne takie jak: Microsoft Windows, Mac OS oraz Linux. Ponadto wszystkie produkowane obecnie układy graficzne firmy NVIDIA posiadają wsparcie ww. technologii. Dzięki temu do tworzenia aplikacji w środowisku CUDA nie jest potrzebny żaden dedykowany sprzęt. Środowisko to z roku na rok zyskuje sobie coraz większe grono zwolenników, co najlepiej świadczy o wszechstronności tej technologii. W kolejnych podrozdziałach zostanie przedstawiona architektura sprzętowa, wprowadzone zostaną także podstawowe pojęcia programistyczne związane z tą technologią. Zaprezentowane zostaną także podstawy tworzenia aplikacji w oparciu o tę technologię. 2.1 Architektura Architektura CUDA (ang. Compute Unified Device Architecture) środowiskiem programistycznym wspierającym tworzenie aplikacji dla GPU zaprojektowaną przez firmę NVIDIA. Wykorzystywana jest ona jako silnik obliczeniowy w kartach graficznych z serii GeForce, Quadro, Tesla firmy NVIDIA. Technologia CUDA przeznaczona jest do prowadzenia złożonych obliczeń równoległych (ang. Massively Parallel Computation, MPC) i pozwala uruchomić jednocześnie tysiące wątków w przeciwieństwie do klasycznych procesorów CPU, które zwykle operują na dziesiątkach wątków. Technologia ta jest idealnym rozwiązaniem dla problemów wysoko skalowalnych. Dla problemów niskiego scalenia technologia ta może się nie sprawdzić. Realizowane jest to dzięki temu, że jednostka centralna układu graficznego (GPU) zbudowana jest z wielu równoległych procesorów wielordzeniowych. Zapotrzebowanie na ogromną moc obliczeniową napędza od wielu lat rynek multimediów i grafiki trójwymiarowej wysokiej rozdzielczości (ang. High-Definition TV, HDTV). Dekodowanie multimediów wysokiej rozdzielczości wymaga ogromnej - 7 -

11 mocy obliczeniowej lub sprzętowej implementacji dekodera przy zastosowaniu dedykowanego procesora. Jednak zastosowanie takiego rozwiązania w przypadku renderingu sceny 3D okazuje się niemożliwe. Gigantyczna moc obliczeniowa potrzebna jest do generacji w czasie rzeczywistym efektów specjalnych w procesie renderingu realistycznej grafiki trójwymiarowej. Efektami takimi może być symulacja modelu fizycznego rysowanych obiektów oraz obliczanie złożonych efektów graficznych (Rys. 2.1). Przykładami takich obliczeń mogą być efekty specjalne takie jak wybuchy, rendering ognia, pyłu, dymu lub dynamicznego oświetlenia wykorzystywanego między innymi w grach komputerowych. Rys Gra Killzone 2 Do generacji złożonych efektów specjalnych służą zazwyczaj shadery czyli krótkie programy komputerowe napisane w specjalnym języku programowania (ang. shader language), które uruchomiane są bezpośrednio na karcie graficznej w środowisku równoległym. Programy te można sklasyfikować w zależności od przeznaczenia na trzy grupy: cieniowanie geometryczne (ang. Geometry Shader), cieniowanie wierzchołkowe (ang. Vertex Shader) oraz cieniowanie pikseli (ang Pixel Shader, Fragment Shader). Najpopularniejszymi językami w jakich tworzone są programy shaderów to: GLSL (ang. OpenGL Shading Language), HLSL (ang. High Level Shading Language) oraz Cg (ang. C for graphics). Języki te stanowiły swoisty przedsionek technologii CUDA dając możliwość programiście tworzenia programów w środowisku równoległym GPU

12 Ciągle rosnące zapotrzebowanie na moc obliczeniową na rynku skłoniło firmę NVIDIA do wprowadzenia technologii NVIDIA CUDA do własnej rodziny wiodących produktów. Obecnie większość aktualnie produkowanych układów graficznych tej firmy wspiera technologie CUDA, listę oficjalnie wspieranych przez firmę NVIDIA układów można znaleźć w Tab Tab Produkty firmy NVIDIA wspierające technologię CUDA Seria GeForce GTX 480, GTX 470, GTX 295, GTX 285, GTX 285 for Mac, GTX 280, GTX 275, GTX 260, GTS 250, GT 240, GT 220, GT 340, GT 330, GT 320, 315, 310, 210, GTS 150, GT 130, GT 120, G100, 9800 GX2, 9800 GTX+, 9800 GTX, 9800 GT, 9600 GSO, 9600 GT, 9500 GT, 9400GT, 8800 Ultra, 8800 GTX, 8800 GTS, 8800 GT, 8800 GS, 8600 GTS, 8600 GT, 8500 GT, 8400 GS, 9400 mgpu, 9300 mgpu, 8300 mgpu, 8200 mgpu, 8100 mgpu, GTX 285M, GTX 280M, GTX 260M, GTS 360M, GTS 350M,GTS 260M, GTS 250M,GTS 160M,GTS 150M,GT 335M, GT 330M,GT 325M, GT 240M,GT 230M, GT 130M, G210M, G110M, G105M, G102M, 310M, 305M, 9800M GTX, 9800M GT, 9800M GTS, 9800M GS, 9700M GTS, 9700M GT, 9650M GS, 9600M GT, 9600M GS, 9500M GS, 9500M G, 9400M G, 9300M GS, 9300M G, 9200M GS, 9100M G, 8800M GTS, 8700M GT, 8600M GT, 8600M GS, 8400M GT, 8400M GS, Seria Qadro FX 5800, FX 5600, FX 4800, FX 4800 for Mac, FX 4700 X2, FX 4600, FX 3800, FX 3700, FX 1800, FX 1700, FX 580, FX 570, FX 470, FX 380, FX 380 Low Profile, FX 370, FX 370 Low Profile, CX, NVS 450, NVS 420, NVS 295, NVS 290, Plex 2100 D4, Plex 2200 D2, Plex 2100 S4, Plex 1000 Model IV, FX 3800M, FX 3700M, FX 3600M, FX 2800M, FX 2700M, FX 1800M, FX 1700M, FX 1600M, FX 880M, FX 770M, FX 570M, FX 380M, FX 370M, FX 360M, NVS 320M, NVS 160M, NVS 150M, NVS 140M, NVS 135M, NVS 130M Inne: ION, Tesla C2050/C2070, Tesla S1070, Tesla M1060, Tesla C1060, Tesla C870, Tesla D870, Tesla S870, Cała architektura CUDA i procesory budowane w oparciu o tę technologię charakteryzują się niezwykle dużą mocą obliczeniową, kilkukrotnie przewyższającą moc procesorów CPU. Jest to spowodowane wysoką specjalizacją procesorów układów graficznych na wykonywanie złożonych obliczeń matematycznych. Prezentowe na Rys wykresy przedstawiają porównanie mocy obliczeniowej procesorów CPU oraz układów graficznych produkowanych przez dwóch największych producentów firmę ATI oraz NVIDIA

13 Rys Porównanie mocy obliczeniowej GPU i CPU Wysoka wydajność architektury zapewniana jest przez zastosowanie multiprocesorów strumieniowych (ang. Streaming Multiprocessor, SM). Każda karta graficzna posiada od kilku do kilkudziesięciu multiprocesorów strumieniowych, a każdy z tych multiprocesorów zawiera osiem procesorów strumieniowych (ang. Streaming Processor, SM) oraz dwie jednostki specjalne (ang. Special Function Unit, SFU) (Rys. 2.3). Rys Architektura CUDA

14 Oprócz wymienionych wcześniej elementów każdy multiprocesor posiada własny zbiór rejestrów (ang. register) ogólnego przeznaczenia, niewielkich rozmiarów pamięć współdzieloną (ang. shared memory) oraz pamięć podręczną (ang. cache). Ponadto cały układ graficzny jako urządzenie heterogoniczne posiada własną pamięć RAM (ang. Random Access Memory) nazywaną także VRAM (ang. Video RAM) oraz niewielkich rozmiarów pamięć stałą. Ilość uruchamianych wątków na jednym multiprocesorze powinna wynosić minimum trzydzieści dwa. Wielkość tą w nomenklaturze CUDA określa się mianem wrap i zależy ona od ilości procesorów strumieniowych budujących jeden multiprocesor. Maksymalna ilość wątków możliwych do uruchomienia na multiprocesorze ograniczona jest ilością dostępnych zasobów tego multiprocesora. Ilość ta nie może jednak przekraczać pięciuset dwunastu. Wątki uruchamiane w architekturze CUDA są nazywane niezwykle lekkimi (ang. Extremly lightweight). Oznacza to, że przełączanie kontekstu pomiędzy wątkami jest niezwykle szybkie, co ma ogromne znaczenie w przypadku uruchamiania ogromnej ilości wątków. Rys Interfejs programowy NVIDIA CUDA

15 Programowanie w technologii CUDA odbywa się przy wykorzystaniu niskopoziomowego API dla języka C. Interfejs ten zapewnia dostęp do karty graficznej wspierającej CUDA oraz możliwość zarządzania nimi. Niskopoziomowe API zapewnia także dostęp do podstawowej biblioteki matematycznej. Inne języki programowania takie jak Java, Pyton, Fortran wykorzystują interfejsy wyższego poziomu budowane na interfejsie języka C. Dzięki wykorzystaniu interfejsu języka C możliwa jest także integracja środowiska CUDA z pakietem Matlab. Aplikacje napisane w technologii NVIDIA CUDA wykorzystują procesor układu graficznego jako dodatkowy koprocesor matematyczny. Technologia ta nie pozwala na tworzenie samodzielnych aplikacji uruchomianych na GPU bez udziału procesora CPU. Rolą układu GPU jest wykonywanie ciągu instrukcji sterujących przesyłanych przez CPU. Instrukcje te zgrupowane są w funkcję nazywaną funkcją jądra (ang. kernel). W obecnej wersji technologia CUDA pozwala na uruchomienie tylko jednej funkcja jądra na jednym urządzeniu. Funkcje te uruchamiane są potokowo na urządzeniu. Oznacza to, że cała moc obliczeniowa karty graficznej będzie przeznaczona na rozwiązanie jednego problemu obliczeniowego. W takiej sytuacji układ CPU przyjmuje funkcję nadzorcy w aplikacji. W terminologii CUDA układ taki określa się mianem hosta (ang. host), natomiast układ graficzny określa się mianem urządzenia (ang. device). Jak wspomniano wcześniej rola hosta polega głownie na nadzorowaniu pracy urządzeń zainstalowanych na stanowisku roboczym, ponadto wykonuje on inne zadania, takie jak nadzorowanie wymiany danych pomiędzy hostem a urządzeniem (Rys. 2.5). Transmisja danych pomiędzy RAM a VRAM nie jest już konieczna począwszy od wersji 2.2 środowiska CUDA. Wprowadzono, bowiem możliwość bezpośredniego dostępu do pamięci hosta z poziomu urządzenia. Technologię ta nazywa się zero-copy. Niestety niesie ona za sobą duże opóźnienia czasowe spowodowane ciągłym tłumaczeniem adresów z GPU na CPU oraz wymianą danych pomiędzy tymi urządzeniami

16 Rys Przepływ danych w technologii CUDA Technologia CUDA zapewnia wysoką skalowalność dzięki możliwości współpracy kilku układów graficznych jednocześnie. Uruchamianie funkcji jądra odbywa się przez wywołanie jej z parametrami określającymi ilość uruchamianych przez nią wątków, każdy z nich współdzieli ten sam kod maszynowy. Każdy wątek może przetwarzać inną porcję danych określanych na bazie identyfikatora wątku. Identyfikator wątku jest określany na bazie wektora trzyelementowego. Wątki muszą być zgrupowane w logiczne bloki, identyfikator bloku jest określany przez wektor trzyelementowy, ostatni element wektora musi być zawsze jedynką. Oznacza to, że wymiar bloku może być jedynie dwuwymiarowy. Ilość bloków oraz wątków, które uruchamia dana funkcja jądra nazywane jest w technologii CUDA siatką (ang. grid) (Rys. 2.6). Każdy z bloków może być uruchomiony na dowolnym multiprocesorze. Oznacza to, iż zadanie uruchomione w 1 bloku z 320 wątkami wykona się wolniej niż zadanie uruchomione w 4 blokach po 80 wątków przy założeniu, że układ graficzny posiada więcej niż jeden multiprocesor

17 Rys Hierarchia wątków Z poziomu funkcji jądra programista ma dostęp do predefiniowanych zmiennych takich jak: threadidx identyfikującego wątek w bloku, blockidx identyfikującego blok w siatce, blockdim określającego rozmiary bloku, griddim określającego rozmiar siatki. Należy tutaj dodać, że maksymalna ilość wątków uruchomionych w jednym bloku dla karty graficznej z rodziny G9X to uruchomionych na urządzeniu wynosi 9 2 (512), natomiast maksymalna ilość bloków 16 2 (65536). W rezultacie daje nam to 25 maksymalną ilość uruchomionych na urządzeniu wątków ( 2, ). Podział wątków pomiędzy bloki pozwala na implementację skalowalnych algorytmów, które będą się dostosowywać do możliwości konkretnych układów graficznych. Każdy z bloków w siatce (ang. grid) jest wykonywany poprzez jeden multiprocesor, jeśli nasz układ dysponuje większą ilością takich jednostek to bloki automatycznie zostaną rozdzielone (Rys. 2.7). Rys Podział bloków do multiprocesorów na GPU

18 Współpracę między watkami może odbywać się tylko w obrębie jednego multiprocesora jest to równoznaczne ze stwierdzeniem, że wątki mogą współpracować tylko w obrębie bloku w którym zostały uruchomione. Współpraca ta może się odbywać za pomocą pamięci globalnej (ang. global memory). Pamięć ta z powodu długiego czasu dostępu nie jest dobrym rozwiązaniem. Lepszym rozwiązaniem jest skorzystanie z pamięci współdzielonej (ang. shared memory), której rozmiar ograniczony jest do 16 KB na multiprocesor. Niewielki rozmiar jest nadrabiany niezwykle szybkim czasem dostępu. Jedyną operacją na wątkach, jaką może zarządzać programista jest synchronizacja wątków uruchomionych w bloku. Nie istnieje możliwość współpracy oraz synchronizacji wątków uruchomianych w różnych blokach. 2.2 Uruchamianie funkcji jądra W środowisku równoległym programista tworzący oprogramowanie obarczony jest zadaniem tworzenia nowych wątków oraz zarządzania nimi w trakcie działania aplikacji. W środowisku CUDA programista nie może samodzielnie tworzyć nowych wątków. Procesem tym zajmuje się środowisko programistyczne, zaś zadanie programisty polega wyłącznie na określeniu ilości wątków, które mają zostać uruchomione na urządzeniu. Oznacza to, że podejście do tworzenia aplikacji równoległej znacząco odbiega od klasycznej metodologii tworzenia aplikacji równoległych na procesorach CPU. Jak wspominano już wcześniej na urządzeniu można w jednym czasie uruchomić tylko jedną funkcję. Oznacza to, że każdy wątek będzie wykonywał dokładnie ten sam kod maszynowy, ale każdy z nich będzie przetwarzał inny fragment danych wejściowych. Podobna sytuacja występuje w procesorach z architekturą SIMD (ang. Single Instruction Multiple Data). Technologia CUDA wykorzystuje architekturę SIMT (ang. Single Instruction Multiple Thread), która pozwala programiście na większą swobodę tworzenia aplikacji przez wprowadzenie instrukcji określających zachowanie danej grupy wątków. Funkcją jądra definiuje się używając specyfikatora global. Funkcja ta musi spełniać kilka warunków: funkcja nie może korzystać z rekurencji, w ciele funkcji nie można zadeklarować zmiennych statycznych,

19 funkcja nie może zwracać wartości, ilość parametrów musi być określona łączny rozmiar parametrów nie może przekraczać 256 bajtów na urządzeniu wspierającym Compute Compability w wersji 1.x, lub 4KB na urządzeniu wspierającym Compute Compability w wersji 2.0. W technologii CUDA żadne funkcje uruchamiane na urządzeniu nie mogą stosować metod rekurencyjnych. Jednym z możliwych rozwiązań jest zastosowanie elementu języka C++ jakim są szablony (ang. template), które wykorzystywane w metaprogramowaniu. Poniższy przykład zilustruje implementację rekurencji: Listing 2.1. Szablony w języku C++ template <int N> struct Factorial { enum { value = N * Factorial<N - 1>::value }; }; template <> struct Factorial<0> { enum { value = 1 }; }; int factorial(int n) { if (n == 0) return 1; return n * factorial(n - 1); } factorial(4); // == (4 * 3 * 2 * 1 * 1) == 24 Factorial<4>::value; // == 24 W danej chwili host może uruchomić tylko jedną z funkcji jądra na jednym urządzeniu (Rys. 2.8). Podczas wywołania funkcji jądra należy określić siatkę w jakiej zostaną uruchomione wątki

20 Rys Wywoływanie funkcji jądra Specyfikator global określa, iż funkcja może być działać wyłącznie na urządzeniu, natomiast samo uruchomienie wywołania funkcji możliwe jest tylko z poziomu hosta. Wywołanie funkcji jądra musi być poprzedzone ustawieniem konfiguracji uruchomieniowej. Format tej konfiguracji zapisywany jest przy użyciu znaczników <<<>>>, które zostały wprowadzone na potrzeby CUDA. Pełna postać konfiguracji wygląda więc następująco: <<<Dg,Db,Ns,S>>>. Konfigurację uruchomienia umieszcza się pomiędzy nazwą wywołanej funkcji jądra a określeniem parametrów do funkcji. Parametry Dg oraz Db określają odpowiednio wymiary siatki oraz bloku uruchomieniowego iloczyn tych wartości określa łączną ilość uruchomionych wątków na urządzeniu. Parametr Ns określa ilość bajtów dynamicznie alokowanej pamięci współdzielonej, natomiast ostatni parametr określa zmienną synchronizacji. Parametry Ns oraz S posiadają wartość domyślną zero i można je pominąć, gdy nie są wykorzystywane

21 Listing 2.2. Uruchomienie funkcji jądra global void kernel(void) {... }... kernel<<<2, 32>>(); Hierarchia pamięci Urządzenie CUDA - karta graficzna posiada własną specjalizowaną pamięć VRAM (ang. Video RAM), która jest preferowanym miejscem zapisu i odczytu danych. Dane przechowywane w tej pamięci są dostępne jedynie dla funkcji uruchamianych na GPU. Z tego powodu dane powinny być transmitowane z pamięci RAM (ang. Random Access Memory) do VRAM przy użyciu niskopoziomowego API. Transfer danych może odbywać się w trybie synchronicznym lub asynchronicznym przy wykorzystaniu DMA (ang. Direct Memory Access). Niestety w przeciwieństwie do maszyn obliczeniowych, które posiadają kilkadziesiąt gigabajtów pamięci RAM, urządzenia klasy GPU posiadają maksymalnie cztery gigabajty. Nakłada to duże ograniczenia programowe na aplikacje. Wątek w technologii CUDA ma dostęp do kilku rodzajów pamięci, do których może się odwoływać (Rys. 2.9). Pamięć tą można podzielić na następujące grupy: pamięć rejestrów, pamięć lokalną, pamięć współdzieloną, pamięć stałą, pamięć tekstur, pamięć globalną

22 Rys Hierarchia pamięci CUDA Każdy z wątków uruchomiony na multiprocesorze ma dostęp do rejestrów oraz pamięci współdzielonej multiprocesora na której jest on uruchomiony. Każdy wątek może korzystać z pamięci globalnej, tekstury oraz pamięci urządzenia Pamięć globalna Pamięć VRAM nazywana jest w nomenklaturze CUDA pamięcią globalną. Zmienne korzystające z tej pamięci muszą posiadać specyfikator device. Określa on, iż dostęp do danej zmiennej będą posiadały tylko funkcje jądra i funkcje uruchamiane na urządzeniu. Deklaracja zmiennych typu wskaźnikowego nie wymaga specyfikatora device, wymaga jednak skorzystania z specjalnych funkcji z grupy cudamalloc, oraz cudafree w celu alokacji oraz zwolnienia pamięci. Zobrazowano to w sposób poglądowy poniżej: Listing 2.3. Alokacja pamięci na urządzeniu global float dev_value = 10; Float *dev_ptr = NULL; cudamalloc(&dev_ptr, sizeof(float));... cudafree(&dev_ptr); dev_ptr = NULL;

23 2.3.2 Pamięć współdzielona Podstawowym typem pamięci wykorzystywanej przez CUDA jest pamięć współdzielona. Pamięć ta spełnia dwie ważne role, pierwszą z nich jest synchronizacja pomiędzy wątkami które działają w obrębie jednego bloku. Natomiast drugą ważną rolą tej pamięci jest spełnianie funkcji pamięci podręcznej zarządzanej przez programistę. Dzięki takiemu wykorzystaniu tej pamięci możliwe jest zwiększenie przepustowości pamięci. Proces wykorzystania pamięci współdzielonej jako pamięci podręcznej jest bardzo prosty i można go zobrazować w następujących krokach: wczytanie wartości z pamięci globalnej do pamięci współdzielonej, synchronizacja pamięci współdzielonej, upewnienie się czy wszystkie elementy zostały wczytane, przetworzenie danych w pamięci współdzielonej, synchronizacja pamięci współdzielonej, upewnienie się czy wszystkie wątki zapisały wyniki do pamięci, zapisanie danych z pamięci współdzielonej do pamięci globalnej. Głównymi zaletami wykorzystywania pamięci współdzielonej jest redukcja odwołań do pamięci globalnej, a co za tym idzie zwiększenie przepustowości pamięci, oraz możliwość odczytu całych bloków pamięci jednocześnie (ang. coalesced memory access). Pamięć współdzielona może zostać zdefiniowana wyłącznie w funkcji jądra, ponadto typ zmiennej musi zostać poprzedzony specyfikatorem shared. Zmienna zdefiniowana w pamięci współdzielonej nie może być zainicjowana w deklaracji. Inicjalizacja wartości musi odbyć się przez dany wątek lub grupę wątków. Rozmiar pamięci współdzielonej może być deklarowany statycznie, przez określenie rozmiaru zmiennej współdzielonej, lub też dynamicznie. W przypadku dynamicznej alokacji pamięci deklaracja przyjmuje postać extern shared typ shmem[], w przypadku deklaracji więcej niż jednej zmiennej współdzielonych alokowanych dynamicznie, obie będą wskazywały na ten sam adres pamięci. W gestii programisty jest utworzenie zmiennych lokalnych odwołujących się o odpowiedni adres pamięci współdzielonej

24 Listing 2.4. Dynamiczna deklaracja pamięci współdzielonej global void kernel(int *iin, char *cin, int num) { extern shared int ishared[]; int *iarray = &ishared[0]; char *carray = (char*)&csheared[num];... }... int threads = 32; size_t size = thread*(sizeof(int)+sizeof(char)); Kernel<<<1, threads, size>>>(iinput, cinptut, threads); Pamięć lokalna Dostęp do pamięci lokalnej występuje tylko w określonych przypadkach. Kompilator sam określa czy zmienne powinny znaleźć się w pamięci lokalnej. Kompilator najprawdopodobniej umieści w tej pamięci zmienne, które: są tablicami, których rozmiar jest nie określony w czasie kompilacji, są strukturami, które nie mieszczą się w rejestrach. Pamięć ta jest również wykorzystana w przypadku, gdy wszystkie rejestry są już wykorzystywane i brakuje miejsca na wczytywane dane lub wyniki obliczeń Pamięć stała Pamięć stała jak nazwa wskazuje pozostaje stała w trakcie wykonania funkcji jądra. Wartości przechowywane w tej pamięci nie mogą ulegać zmianie. Jest to pamięć tylko do odczytu, a jej modyfikacja może się odbywać wyłącznie przez hosta. Deklaracja zmiennej rezydującej w pamięci stałej poprzedzona jest specyfikatorem constant. Rozmiar dostępnej pamięci stałej jest stosunkowo mały i zazwyczaj wynosi 64 KB. Kopiowanie danych do tej pamięci przebiega analogicznie jak w przypadku kopiowania danych do pamięci globalnej Pamięć tekstury Technologia CUDA wspiera podzbiór funkcji obsługi tekstur GPU. Tekstura zapewnia dostęp do pamięci tylko do odczytu. Definicja tekstury może odbywać się przez wysokopoziomowe API

25 Dodatkowo do pamięci globalnej możemy odwoływać się pośrednio za pomocą tekstur. Tekstury te różnią się znacząco od tekstur wykorzystywanych w grafice trójwymiarowej. Tekstury CUDA mapują fragment pamięci globalnej, określając jednocześnie ją jako pamięć wyłącznie do odczytu. Dzięki temu odczyt danych z tego fragmentu pamięci może odbywać się przy wykorzystaniu pamięci podręcznej, przez co jest to proces znacznie szybszy niż bezpośredni dostęp do pamięci globalnej. 2.4 Metoda redukcji Jedną z najważniejszych metod programowania równoległego jest metoda redukcji. Metoda ta służy do rozwiązywana problemów, które można rozwiązać używając modelu drzewiastego (Rys. 2.10). Rys Sumowanie wartości metodą drzewa Model drzewiasty może zostać wykorzystany wszędzie tam gdzie wynik końcowy można uzyskać przez podzielenie zadania na mniejsze podzadania. Idealnymi przykładami tych zadań są operacje sumy oraz iloczynu. Metoda redukcji jest bardzo często wykorzystywana w aplikacjach wykonanych w technologii CUDA (Rys. 2.11). Każdy z wątków wykonuje daną operacje na dwóch elementach tablicy, zapisując wynik w jednym z elementów. W kolejnym kroku liczba współpracujących wątków zmniejsza się dwukrotnie, uruchomione wątki wykonują operacje na wynikach otrzymanych w kroku poprzednim. Po wykonaniu odpowiedniej ilości iteracji metody pracuje tylko jeden wątek, który zwraca wynik końcowy. W praktyce w celu przyspieszenia operacji dostępu do pamięci wykorzystuje się bardzo często pamięć współdzieloną

26 Rys Redukcja w technologii CUDA 2.5 Interakcja z grafiką Technologia CUDA umożliwia także interakcję z bibliotekami graficznymi takimi jak OpenGL, oraz Microsoft DirectX. Interakcja ta polega na mapowania pamięci globalnej CUDA z specjalnymi obiektami wykorzystywanymi w środowiskach graficznych. Przykładem takich obiektów są bufory (ang. Buffer Object). Obiekty te mogą przetrzymywać informacje o pikselach - PBO (ang. Pixel Buffer Object), lub informacje o wektorach VBO (ang. Vertex Buffer Object). Obiekty te spełniają rolę pośrednika w komunikacji między środowiskiem graficznym a technologią CUDA. OpenGL NVIDIA CUDA Buffor Object Rys Interakcja technologii CUDA z OpenGL

27 - 24 -

28 Rozdział 3 Algorytmy wykorzystanie w pracy W kolejnych podrozdziałach opisane zostaną kolejno algorytmy: modelu adaptacyjnego, roju cząsteczek oraz filtru cząsteczkowego. Zostaną przedstawione sekwencyjne wersje tych algorytmów oraz podstawowe zasady ich dekompozycji w celu implementacji w środowisku CUDA. 3.1 Model adaptacyjny W pracy wykorzystany został adaptacyjny model oparty na intensywności pikseli. Model ten składa się z trzech składowych, składowa W modeluje zmiany jasności pikseli pomiędzy dwoma klatkami śledzonej sekwencji, składowa S określa stan stabilny występujący w wszystkich poprzednich obserwacjach oraz składowej F określającej statyczny szablon startowy. Model A { W, S, F } = jest reprezentują t t t t wszystkich obserwacji do czasu t 1. Model ten jest mieszanką gaussianów ze średnimi 2 { µ k, t k = w, s, t}, wariancjami { k, t k w, s, t} { mk, t k w, s, f } =. σ = i współczynnikami prawdopodobieństwa Poniżej przyjęte zostały następujące oznaczenia: funkcja I (, ) piksela o współrzędnych p ( x, y) w czasie t. Zbiór R będzie zbiorem pozycji ( ) p t określa jasność = na obrazie I, który został pobrany { p j j 1,2,, J } = określających położenie pikseli w szablonie, natomiast Yt ( R ) będzie wektorem jasności pikseli na pozycjach p( j ) w analizowanym szablonie. Wartość funkcji celu można obliczyć z wzoru: ( t i ) p z x ( ) ( ) µ ( ) (3.1) 2 ( j) σ ( j) 2 J mk, t j 1 Yt j k, t j = exp j= 1 k = w, s, f 2πσ 2 k, t k, t gdzie k = w, s, f i j = 1, 2,, J.Funkcję tą wykorzystujemy w celu ustalenia najlepszego szablonu, który będzie najbardziej zbliżony do obserwowanego do tej pory wzorca oraz adaptacji i inicjalizacji modelu obiektu

29 Aktualizacja modelu A t odbywa się przy wykorzystaniu algorytmu EM 3 (ang. Expectation Maximization). Współczynnik podobieństwa o ( ) na podstawie wzoru: k, t j wyznaczany jest o k, t ( j) ( ) 2 ( j) ( ) µ ( ) σ ( j) m ˆ k, t j 1 Yt j k, t j = exp 2πσ 2 k, t k, t (3.2) W wspomnianej funkcji Yˆ ( j ) oznacza jasności pikseli w obrazie na wyestymowanej t pozycji. Współczynniki prawdopodobieństwa wyznacza się według następującego wzoru: ( ) γ ( ) ( γ ) ( ) mk, t+ 1 j = ok, t j + 1 mk, t j k = w, s, f (3.3) gdzie γ jest współczynnikiem adaptacji. Wtedy pierwszy i drugi moment obrazów określany jest przez wzory: ( ) = ( 1 γ ) ( ) + γ ( ) ˆ ( ) ( ) = ( 1 γ ) ( ) + γ 2 ( ) ˆ ( ) M j M j o j Y j 1, t+ 1 1, t s, t t M j M j o j Y j 2, t+ 1 2, t s, t t (3.4) W ostatnim kroku wyznaczamy średnią oraz wariancję według następujących wzorów: ( ) ( ) ( ) ( ) ( ) ( ) M j M j µ j =, σ j = + µ j (3.5) 1, t+ 1 2, t+ 1 2 s, t+ 1 s, t+ 1 s, t+ 1 ms, t+ 1 j ms, t+ 1 j ( j) Yˆ ( j), ( j) ( j) µ = σ = σ (3.6) w, t+ 1 t w, t+ 1 w,1 ( j) ( j), ( j) ( j) µ = µ σ = σ (3.7) f, t+ 1 t,1 f, t+ 1 f,1 Do inicjalizacji modelu A 1, początkowe wartości określone są przy użyciu następujących równań: M1,1 m ( ),1Y 0 s t ( ) ( ) 2 2 = R oraz M m σ Y ( ) = + R. 2,1 s,1 s,1 t0 W celu dekompozycji modelu adaptacyjnego w środowisku NVIDIA CUDA przyjęto następujące założenie: każdy wątek przetwarza tylko jeden element modelu. Jest to możliwe, ponieważ pojedynczy element modelu nie jest zależny od pozostałych elementów modelu. Wartości średniej i wariancji modelu możemy obliczyć przed rozpoczęciem pracy wątków operujących na danych elementach. Niestety nie zawsze w implementacji wątki będą niezależne, przykładem może być obliczanie wartości 3 Dempster, A., Laird, N., and Rubin, D. (1977). Maximum likelihood from incomplete data via the EM algorithm. Journal of the Royal Statistical Society, Series B, 39(1):

30 funkcji celu przy pomocy wzoru (3.1). Wymaga ona zastosowania operacji sumowania oraz iloczynu liczb. Operacja ta będzie realizowana przez zastosowanie metody redukcji przedstawionej w rozdziale wcześniejszym. 3.2 Metoda roju cząsteczek Wykorzystana w pracy metoda roju cząsteczek (ang. Particle Swarm Optimization) jest metodą optymalizacji. W konkretnym przypadku może to być problem śledzenia obiektu w serii obrazów. Metoda ta wykorzystuje grupę cząsteczek, które poruszając się w przestrzeni oddziaływują na siebie wzajemnie. Dzięki czemu rój kieruje się zawsze do najlepszej pozycji znalezionej przez cząsteczki (Rys. 3.1). Rys. 3.1 Metoda roju cząsteczek W klasycznym środowisku jednowątkowym, opierającym się na standardowych maszynach jednoprocesorowych algorytm roju cząsteczek będzie wykonywany m sekwencyjnie. W ramach pracy przyjęto następujące założenia: f : R R jest funkcją celu, która wylicza na podstawie przestrzeni wielowymiarowej metrykę jednowymiarową; n niech będzie liczbą cząsteczek. Każda cząsteczka określa pozycję m xi R, wektor m m vi R określa prędkość cząsteczki oraz xˆ i R oznacza najlepszą dotychczasową pozycję cząsteczki, gdzie i = 1,, n ; natomiast ĝ będzie najlepszą pozycją cząsteczki w roju. Sekwencyjny algorytm roju cząsteczek można przedstawić w następujący sposób: Ustaw ĝ na pozycję startową j 1,, n p G [ µ, σ ], gdzie 2 Generuj losowe pozycje cząsteczek [ ] j 2 G [ µ, σ ] reprezentuje liczby losowe z rozkładem normalnym o zadanych parametrach. Inicjalizuj cząsteczki: i [1,, n] xˆ = x = gˆ + p ; v = 0 i i i i Powtarzaj dopóki cząsteczki nie zbiegną się w jednej pozycji

31 o Generuj losowe wektory k [1,,3 n] r U[0,1], gdzie U [0,1] reprezentuje liczby losowe z rozkładem linowym o Aktualizuj prędkości cząsteczek: i [1,, n] v ωrv + c r ( xˆ x ) + c r ( gˆ x ) i 1 i 1 2 i i 2 3 i o Aktualizuj pozycje cząsteczek: i [1,, n] xi xi + vi o Aktualizuj najlepsze lokalne pozycje i [1,, n] jeśli f ( x ) < f ( xˆ ) x ˆi x i o Aktualizuj najlepszą globalną pozycję i [1,, n] jeśli f ( x ) < f ( gˆ ) gˆ x i ĝ jest optymalnym rozwiązaniem W algorytmie wykorzystane są wartości stałe takie jak: ω, której wartość powinna być nieco mniejsza od wartości jeden, może ona też być generowana losowo dla każdej cząsteczki. Wartości c 1 i c 2 określają w jakim stopniu cząsteczka ma się kierować do najlepszych pozycji globalnej oraz pozycji lokalnej. W celu podniesienia wydajności algorytm możemy go poddać zrównolegleniu, dzięki temu komputery wieloprocesorowe lub wyposażone w procesory wielordzeniowe będą w stanie efektywniej wykorzystać swoją moc obliczeniową, Prostą metodą zrównoleglenia algorytmu roju cząsteczek jest implementacja opierająca się na założeniu, iż każda cząstka wykonuje obliczenia w obrębie jednego wątku (Rys. 3.2). k i i i Rys Dekompozycji algorytmu roju cząsteczek

32 W celu opisu algorytmu należy dodać dodatkowe założenia: T i jest wątkiem skojarzonym z i -tą cząsteczką. Wątek ten ma dostęp do wszystkich elementów skojarzonych z przypadającą mu cząsteczką; S( T i ) będzie funkcją uruchamiającą wątek T i, natomiast J ( T i ) będzie funkcją oczekującą na zakończenie wątku T i. Algorytm roju cząsteczek w uniwersalnym środowisku wielowątkowym można przedstawić w następujących krokach: Ustaw ĝ na pozycję startową Generuj losowe wektory k [1,,3 n] r U[0,1], gdzie U [0,1] reprezentuje liczby losowe z rozkładem linowym. Inicjalizuj cząsteczki: i [1,, n] xˆ = x = gˆ + p ; v = 0 k i i i i Powtarzaj dopóki cząsteczki nie zbiegną się w jednej pozycji o Uruchom wątki i [1,, n] S( T ) i Generuj losowe wektory k [1,,3 n] r U[0,1], gdzie U [0,1] reprezentuje liczby losowe z rozkładem linowym k Aktualizuj prędkość cząsteczki: v ωrv + c r ( xˆ x ) + c r ( gˆ x ) i 1 i 1 1 i i 2 1 i Aktualizuj pozycje cząsteczki: xi xi + vi Aktualizuj najlepszą lokalne pozycję, jeśli f ( x ) f ( xˆ ) o Synchronizuj wątki i [1,, n] J ( T ) i i < i xˆi x i o Aktualizuj najlepszą globalną pozycję: i [1,, n] jeśli f ( x ) < f ( gˆ ) gˆ x i ĝ jest optymalnym rozwiązaniem i Algorytm ten w tej postaci można zaimplementować na GPU. Układy GPU przystosowane są do uruchomienia tysięcy wątków równocześnie, natomiast w przedstawionym modelu zadanie zostanie podzielone zawsze na n wątków w którym każdy odpowiada jednej cząsteczce. Wątki te powinny być równomiernie dystrybuowane na multiprocesory. W celu poprawy efektywności implementacji algorytmu na GPU, konieczne jest zdekomponowanie wątku jednostkowe, oraz połączenie tych operacji w jednej wspólnej funkcji jądra. T i na operacje

33 Funkcję tą będziemy oznaczali przez K n z = Tiz, gdzie z jest identyfikatorem zadania. i= 1 Dzięki podziałowi wątków na poszczególne zadania możliwe jest dopasowanie dla każdego z zadań odpowiedniej siatki. Ponadto w celu minimalizacji stałych czasowych związanych z transmisją danych pomiędzy CPU i GPU, wszystkie dane będą przetrzymywane tylko w pamięci VRAM. Rola CPU zostanie ograniczona wyłącznie do uruchamiania funkcji jąder. Natomiast sam algorytm można przedstawić następująco: Ustaw ĝ na pozycje startową 2 Uruchom K (, ) 1 µ σ - generacja liczb losowych z rozkładem normalnym Uruchom K ( ) 2 x - inicjalizacje cząsteczek Powtarzaj dopóki cząsteczki nie zbiegną się w jednej pozycji o Uruchom K 3 (0,1) - generuj losowe wektory o Uruchom K 4 ( v ) - aktualizuj prędkości cząsteczek o Uruchom K 5 ( x ) - aktualizuj pozycje cząsteczek o Uruchom K 6 ( x ˆ) - aktualizuj najlepsze lokalne pozycje cząsteczek o Uruchom K 7 ( g ˆ) - aktualizuj najlepszą globalną pozycję ĝ jest optymalnym rozwiązaniem Algorytm w tej postaci jest wysoce skalowalny. Ponieważ łączna ilość uruchamianych wątków w funkcji jądra nie musi być już równa ilości cząstek, a często będzie znacznie większa niż rozmiar roju. Dzięki temu każde z zadań można zdekompnować na mniejsze elementy zapewniając tym samym maksymalne wykorzystanie mocy obliczeniowej GPU. 3.3 Metoda filtru cząsteczkowego Metoda filtru cząsteczkowego (ang. Particle Filter) podobnie jak metoda roju cząsteczek jest metodą przeszukiwania przestrzeni. Posiada ona jednak jedną znaczącą zaletę nad metodą roju, metoda ta wymaga znacznie mniejszej mocy obliczeniowej niż metoda roju

34 Filtr cząsteczkowy 4 aproksymuje rozkład prawdopodobieństwa za pomocą zbioru próbek w przestrzeni stanów systemu. Gęstość występowania próbek w danym obszarze reprezentuje prawdopodobieństwo, iż obiekt znajduje się w określonym punkcie przestrzeni, punkt ten reprezentowany jest przez szablon przypisany do danej cząsteczki. Prawdopodobieństwo to wyraża się następującym wzorem: N 1 p( x) = δ ( i ) ( x) (3.8) x N i= 0 gdzie δ (i ) oznacza deltę Diraca w punkcie x i. Próbki losuje się z rozkładu x proponowanego q x z ), określającego prawdopodobieństwo pożądanej lokalizacji ( t 0: t cząstek. W praktycznej realizacji algorytmu dla każdej próbki wyznaczana jest waga, określająca trafność z jaką dana cząstka pasuje do określonego modelu adaptacyjnego. Dla każdej próbki waga ta obliczana jest ze wzoru: w = p( x z ) ( ) (3.9) ( i) ( i) t 0: t t ( i) q xt z0: t Jeżeli za rozkład proponowany przyjmie się probabilistyczny model propagacji cząstek, wówczas wartości wag można wyznaczać posługując się następującą zależnością rekurencyjną: p( x z ) p( z x ) p( x x ) w = w = p z x w (3.10) ( i) ( i) ( i) ( i) ( i) t 0: t t t t t 1 ( i) ( i) ( i) t ( ) ( ) ( ) 1 ( ) i i i t t t t 1 q( xt z0: t ) p( xt xt 1) Suma wyznaczonych tym sposobem wag musi sumować się do wartości jeden. Warunek ten można zapisać następująco: N i= 1 ( i) w = 1 (3.11) t W filtrze cząsteczkowym może występować zjawisko degeneracji próbek, które polega na propagowaniu do następnego kroku mało istotnych próbek. W celu zapobiegania tym zjawiskom stosuje się procedury ponownego próbkowania (ang. resampling). Dzięki temu zabiegowi w kolejnej iteracji brane są pod uwagę tylko próbki, które stosunkowo trafnie odwzorowują właściwy stan (Rys ) 4 Isard, M., Blake, A.: Condensation - conditional density propagation for visual tracking, Int. J. of Computer Vision, vol. 29, 1998, 5 28.; Doucet, A., Godsill, S., Andrieu, C.: On sequential Monte Carlo sampling methods for bayesian filtering, Statistics and Computing, 10(1), 2000,

35 czas t-1 p(z t -1 x t - 1 ) obserwacje x t - 1 p(x t x t 1 ) predykcja czas t p(z t x t ) x t Rys Ponowne próbkowanie w filtrze cząsteczkowym. Podobnie jak miało to miejsce w algorytmie roju cząsteczek, w celu zrównoleglenia tej metody na GPU przyjęte zostanie następujące założenie: każdej cząsteczce odpowiada jeden wątek. Wątki wymagają synchronizacji w celu przeprowadzenia operacji ponownego próbkowania oraz wyznaczenia najlepszej cząsteczki na bazie której będzie aktualizowany model. Schemat algorytmu filtru cząsteczkowego zaprezentowano na Rys Rys Dekompozycja algorytmu filtru cząsteczkowego

36 Rozdział 4 Implementacja programowa W rozdziale tym zaprezentowana zostanie implementacja programowa metody filtru cząsteczkowego oraz metody roju cząsteczek. Główny nacisk zostanie postawiony na przedstawienie implementacji aplikacji na GPU w oparciu o technologie NVIDIA CUDA. Rozdział ten został podzielony na pięć podrozdziałów. W pierwszym podrozdziale przedstawione zostaną narzędzia wykorzystane do budowy aplikacji. Drugi podrozdział przedstawia metodologię tworzenia aplikacji oraz dodatkowe techniki, które zostały wykorzystane w implementacji, a nie są bezpośrednio związane z żadnym z algorytmów. Kolejne podrozdziały będą przedstawiały implementacje algorytmów wykorzystanych w aplikacjach, czyli implementacje modelu adaptacyjnego, implementację metody roju cząsteczek oraz metodę filtru cząsteczkowego. 4.1 Środowisko programistyczne Przygotowywane aplikacje były budowane oraz testowane na systemie operacyjnym Microsoft Windows XP. W systemie zostały dodatkowo następujące narzędzia: Microsoft Visual Studio 2005 Express Edition NVIDIA CUDA SDK 3.0 Aplikacje tworzone były w środowiskiem programistycznym (ang. Integrated Development Environment, IDE) Microsoft Visual Studio C Express Edition (Rys. 4.1). Zostało ono wybrane z powodu jego niezawodności, ogólnej dostępności oraz wysokiej konkurencyjności w stosunku do produktów pokrewnych

37 Rys Środowisko programistyczne Microsoft Visual Studio 2005 Wersję instalacyjną środowiska programistycznego może pobrać z strony domowej pakietu Visual Studio Express 5, natomiast pakiet NVIDIA CUDA można pobrać z strony korporacji NVIDIA 6. W celu integracji środowiska programistycznego z pakietem NVIDIA CUDA wykorzystany został dodatek CUDA_VS_WIZARD 7, pozwalający tworzyć reguły budowy aplikacji NVIDIA CUDA w środowisku Microsoft Visual Studio.NET. Dzięki dodatkowi możliwe jest kompilowanie oraz tworzenie aplikacji NVIDIA CUDA z poziomu środowiska programistycznego. 4.2 Techniki ogólne Prezentowane w tym podrozdziale metody oraz założenia wykorzystywane zostaną w przygotowanych aplikacjach. Prezentowana treść stanowi część wspólną implementacji metody filtru cząsteczkowego oraz metody roju cząsteczek Dodatek do pobrania z strony -

38 4.2.1 Model aplikacji Aplikacja tworzona na potrzeby pracy, wykorzystuje wzorzec projektowy MVC 8 (ang. Model-View-Controller), popularnie nazywany modelem trójstopniowym. Główną koncepcją tego wzorca jest wyodrębnienie trzech podstawowych komponentów aplikacji: modelu danych, widoku, interfejsu użytkownika, logiki sterowania. W przypadku projektowanych w pracy aplikacji interfejs użytkownika został ograniczony do całkowitego minimum. Aplikacja nie wymaga żadnej interakcji z użytkownikiem. Wszystkie rezultaty i wyniki zapisywane są w formacie plików wynikowych. Obiekt reprezentowany jest w postaci modelu adaptacyjnego, który wykorzystywany jest w metodzie filtru cząsteczkowego oraz roju cząsteczek. Logika sterowania odpowiada za odpowiednie ustawienie parametrów modelu, widoku oraz wczytanie serii danych wejściowych Pliki konfiguracyjne W pracy prezentowane są dwie metody śledzenia obiektów: metoda filtru cząsteczkowego oraz metoda roju cząsteczek. Obie metody zostały zaimplementowane na CPU oraz GPU przy wykorzystaniu technologii NVIDIA CUDA. W rezultacie powstały cztery odrębne aplikacje. Każdą z aplikacji testowano pod względem wydajności różnych konfiguracji. Ustawianie konfiguracji algorytmów wymaga modyfikacji parametrów startowych obu metod. Z tego powodu istotnym elementem jest możliwość automatycznej konfiguracji wszystkich aplikacji, bez konieczności ingerowania w ich kod źródłowy i rekompilację. W tym celu zaproponowany został plik konfiguracyjny w formacie ini 9, nazwa formatu wywodzi się od nazwy pliku inicjalizacyjnego (ang. INItialization file, INI). Niestety format ten nie został nigdy ustandaryzowany i istnieje wiele nie spójnych wariancji tego formatu. Na potrzeby aplikacji zaimplementowana została biblioteka do odczytu danych z formatu ini. Implementacja nie zapewnia pełnej walidacji formatu

CUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu

CUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu CUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu inż. Daniel Solarz Wydział Fizyki i Informatyki Stosowanej AGH 1. Cel projektu. Celem projektu było napisanie wtyczki

Bardziej szczegółowo

Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1

Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1 Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1 Wprowadzenie Procesory graficzne GPU (Graphics Processing Units) stosowane są w kartach graficznych do przetwarzania grafiki komputerowej

Bardziej szczegółowo

Programowanie procesorów graficznych GPGPU

Programowanie procesorów graficznych GPGPU Programowanie procesorów graficznych GPGPU 1 GPGPU Historia: lata 80 te popularyzacja systemów i programów z graficznym interfejsem specjalistyczne układy do przetwarzania grafiki 2D lata 90 te standaryzacja

Bardziej szczegółowo

Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1

Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1 Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1 Metodologia programowania równoległego Przykłady podziałów zadania na podzadania: Podział ze względu na funkcje (functional

Bardziej szczegółowo

i3: internet - infrastruktury - innowacje

i3: internet - infrastruktury - innowacje i3: internet - infrastruktury - innowacje Wykorzystanie procesorów graficznych do akceleracji obliczeń w modelu geofizycznym EULAG Roman Wyrzykowski Krzysztof Rojek Łukasz Szustak [roman, krojek, lszustak]@icis.pcz.pl

Bardziej szczegółowo

Porównanie wydajności CUDA i OpenCL na przykładzie równoległego algorytmu wyznaczania wartości funkcji celu dla problemu gniazdowego

Porównanie wydajności CUDA i OpenCL na przykładzie równoległego algorytmu wyznaczania wartości funkcji celu dla problemu gniazdowego Porównanie wydajności CUDA i OpenCL na przykładzie równoległego algorytmu wyznaczania wartości funkcji celu dla problemu gniazdowego Mariusz Uchroński 3 grudnia 2010 Plan prezentacji 1. Wprowadzenie 2.

Bardziej szczegółowo

Programowanie kart graficznych

Programowanie kart graficznych Programowanie kart graficznych Sławomir Wernikowski swernikowski@wi.zut.edu.pl Wykład #1: Łagodne wprowadzenie do programowania w technologii NVIDIA CUDA Terminologia: Co to jest GPGPU? General-Purpose

Bardziej szczegółowo

CUDA część 1. platforma GPGPU w obliczeniach naukowych. Maciej Matyka

CUDA część 1. platforma GPGPU w obliczeniach naukowych. Maciej Matyka CUDA część 1 platforma GPGPU w obliczeniach naukowych Maciej Matyka Bariery sprzętowe (procesory) ok na. 1 10 00 la raz t y Gdzie jesteśmy? a ok. 2 razy n 10 lat (ZK) Rozwój 1985-2004 i dalej? O roku ów

Bardziej szczegółowo

PROGRAMOWANIE WSPÓŁCZESNYCH ARCHITEKTUR KOMPUTEROWYCH DR INŻ. KRZYSZTOF ROJEK

PROGRAMOWANIE WSPÓŁCZESNYCH ARCHITEKTUR KOMPUTEROWYCH DR INŻ. KRZYSZTOF ROJEK 1 PROGRAMOWANIE WSPÓŁCZESNYCH ARCHITEKTUR KOMPUTEROWYCH DR INŻ. KRZYSZTOF ROJEK POLITECHNIKA CZĘSTOCHOWSKA 2 Część teoretyczna Informacje i wstępne wymagania Cel przedmiotu i zakres materiału Zasady wydajnego

Bardziej szczegółowo

Programowanie kart graficznych

Programowanie kart graficznych CUDA Compute Unified Device Architecture Programowanie kart graficznych mgr inż. Kamil Szostek AGH, WGGIOŚ, KGIS Wykorzystano materiały z kursu Programowanie kart graficznych prostsze niż myślisz M. Makowski

Bardziej szczegółowo

Algorytmy i Struktury Danych

Algorytmy i Struktury Danych POLITECHNIKA KRAKOWSKA - WIEiK KATEDRA AUTOMATYKI i TECHNIK INFORMACYJNYCH Algorytmy i Struktury Danych www.pk.edu.pl/~zk/aisd_hp.html Wykładowca: dr inż. Zbigniew Kokosiński zk@pk.edu.pl Wykład 12: Wstęp

Bardziej szczegółowo

Wprowadzenie do programowania w środowisku CUDA. Środowisko CUDA

Wprowadzenie do programowania w środowisku CUDA. Środowisko CUDA Wprowadzenie do programowania w środowisku CUDA Środowisko CUDA 1 Budowa procesora CPU i GPU Architektura GPU wymaga większej ilości tranzystorów na przetwarzanie danych Control ALU ALU ALU ALU Cache DRAM

Bardziej szczegółowo

Moc płynąca z kart graficznych

Moc płynąca z kart graficznych Moc płynąca z kart graficznych Cuda za darmo! Czyli programowanie generalnego przeznaczenia na kartach graficznych (GPGPU) 22 października 2013 Paweł Napieracz /20 Poruszane aspekty Przetwarzanie równoległe

Bardziej szczegółowo

Karty graficzne możemy podzielić na:

Karty graficzne możemy podzielić na: KARTY GRAFICZNE Karta graficzna karta rozszerzeo odpowiedzialna generowanie sygnału graficznego dla ekranu monitora. Podstawowym zadaniem karty graficznej jest odbiór i przetwarzanie otrzymywanych od komputera

Bardziej szczegółowo

Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++

Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++ Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++ Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka

Bardziej szczegółowo

Obliczenia równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

Obliczenia równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz Obliczenia równoległe i rozproszone Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz 15 czerwca 2001 Spis treści Przedmowa............................................

Bardziej szczegółowo

Programowanie równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

Programowanie równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz Programowanie równoległe i rozproszone Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz 23 października 2009 Spis treści Przedmowa...................................................

Bardziej szczegółowo

Organizacja pamięci w procesorach graficznych

Organizacja pamięci w procesorach graficznych Organizacja pamięci w procesorach graficznych Pamięć w GPU przechowuje dane dla procesora graficznego, służące do wyświetlaniu obrazu na ekran. Pamięć przechowuje m.in. dane wektorów, pikseli, tekstury

Bardziej szczegółowo

Programowanie Współbieżne

Programowanie Współbieżne Programowanie Współbieżne Agnieszka Łupińska 5 października 2016 Hello World! helloworld.cu: #include global void helloworld(){ int thid = (blockidx.x * blockdim.x) + threadidx.x; printf("hello

Bardziej szczegółowo

Architektura komputerów

Architektura komputerów Architektura komputerów Wykład 7 Jan Kazimirski 1 Pamięć podręczna 2 Pamięć komputera - charakterystyka Położenie Procesor rejestry, pamięć podręczna Pamięć wewnętrzna pamięć podręczna, główna Pamięć zewnętrzna

Bardziej szczegółowo

Algorytmy dla maszyny PRAM

Algorytmy dla maszyny PRAM Instytut Informatyki 21 listopada 2015 PRAM Podstawowym modelem służącym do badań algorytmów równoległych jest maszyna typu PRAM. Jej głównymi składnikami są globalna pamięć oraz zbiór procesorów. Do rozważań

Bardziej szczegółowo

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja

Bardziej szczegółowo

Programowanie procesorów graficznych GPGPU. Krzysztof Banaś Obliczenia równoległe 1

Programowanie procesorów graficznych GPGPU. Krzysztof Banaś Obliczenia równoległe 1 Programowanie procesorów graficznych GPGPU Krzysztof Banaś Obliczenia równoległe 1 OpenCL projektowanie kerneli Przypomnienie: kernel program realizowany przez urządzenie OpenCL wątek (work item) rdzeń

Bardziej szczegółowo

Programowanie aplikacji równoległych i rozproszonych

Programowanie aplikacji równoległych i rozproszonych Programowanie aplikacji równoległych i rozproszonych Dr inż. Krzysztof Rojek krojek@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Strumienie operacji na GPU Domyślne

Bardziej szczegółowo

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1 Tworzenie programów równoległych Krzysztof Banaś Obliczenia równoległe 1 Tworzenie programów równoległych W procesie tworzenia programów równoległych istnieją dwa kroki o zasadniczym znaczeniu: wykrycie

Bardziej szczegółowo

Szablony funkcji i szablony klas

Szablony funkcji i szablony klas Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2011 Bogdan Kreczmer Niniejszy dokument

Bardziej szczegółowo

Przetwarzanie Równoległe i Rozproszone

Przetwarzanie Równoległe i Rozproszone POLITECHNIKA KRAKOWSKA - WIEiK KATEDRA AUTOMATYKI I TECHNOLOGII INFORMACYJNYCH Przetwarzanie Równoległe i Rozproszone www.pk.edu.pl/~zk/prir_hp.html Wykładowca: dr inż. Zbigniew Kokosiński zk@pk.edu.pl

Bardziej szczegółowo

Podstawy Informatyki Systemy sterowane przepływem argumentów

Podstawy Informatyki Systemy sterowane przepływem argumentów Podstawy Informatyki alina.momot@polsl.pl http://zti.polsl.pl/amomot/pi Plan wykładu 1 Komputer i jego architektura Taksonomia Flynna 2 Komputer i jego architektura Taksonomia Flynna Komputer Komputer

Bardziej szczegółowo

Struktura i funkcjonowanie komputera pamięć komputerowa, hierarchia pamięci pamięć podręczna. System operacyjny. Zarządzanie procesami

Struktura i funkcjonowanie komputera pamięć komputerowa, hierarchia pamięci pamięć podręczna. System operacyjny. Zarządzanie procesami Rok akademicki 2015/2016, Wykład nr 6 2/21 Plan wykładu nr 6 Informatyka 1 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr II, studia niestacjonarne I stopnia Rok akademicki 2015/2016

Bardziej szczegółowo

Tesla. Architektura Fermi

Tesla. Architektura Fermi Tesla Architektura Fermi Tesla Tesla jest to General Purpose GPU (GPGPU), GPU ogólnego przeznaczenia Obliczenia dotychczas wykonywane na CPU przenoszone są na GPU Możliwości jakie daje GPU dla grafiki

Bardziej szczegółowo

Zastosowanie technologii nvidia CUDA do zrównoleglenia algorytmu genetycznego dla problemu komiwojażera

Zastosowanie technologii nvidia CUDA do zrównoleglenia algorytmu genetycznego dla problemu komiwojażera Zastosowanie technologii nvidia CUDA do zrównoleglenia algorytmu genetycznego dla problemu komiwojażera Adam Hrazdil Wydział Inżynierii Mechanicznej i Informatyki Kierunek informatyka, Rok V hrazdil@op.pl

Bardziej szczegółowo

Budowa komputera Komputer computer computare

Budowa komputera Komputer computer computare 11. Budowa komputera Komputer (z ang. computer od łac. computare obliczać) urządzenie elektroniczne służące do przetwarzania wszelkich informacji, które da się zapisać w formie ciągu cyfr albo sygnału

Bardziej szczegółowo

Nowoczesne technologie przetwarzania informacji

Nowoczesne technologie przetwarzania informacji Projekt Nowe metody nauczania w matematyce Nr POKL.09.04.00-14-133/11 Nowoczesne technologie przetwarzania informacji Mgr Maciej Cytowski (ICM UW) Lekcja 2: Podstawowe mechanizmy programowania równoległego

Bardziej szczegółowo

Budowa Mikrokomputera

Budowa Mikrokomputera Budowa Mikrokomputera Wykład z Podstaw Informatyki dla I roku BO Piotr Mika Podstawowe elementy komputera Procesor Pamięć Magistrala (2/16) Płyta główna (ang. mainboard, motherboard) płyta drukowana komputera,

Bardziej szczegółowo

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1 Tworzenie programów równoległych Krzysztof Banaś Obliczenia równoległe 1 Tworzenie programów równoległych W procesie tworzenia programów równoległych istnieją dwa kroki o zasadniczym znaczeniu: wykrycie

Bardziej szczegółowo

Karta graficzna karta rozszerzeo odpowiedzialna generowanie sygnału graficznego dla ekranu monitora. Podstawowym zadaniem karty graficznej jest

Karta graficzna karta rozszerzeo odpowiedzialna generowanie sygnału graficznego dla ekranu monitora. Podstawowym zadaniem karty graficznej jest KARTA GRAFICZNA Karta graficzna karta rozszerzeo odpowiedzialna generowanie sygnału graficznego dla ekranu monitora. Podstawowym zadaniem karty graficznej jest odbiór i przetwarzanie otrzymywanych od komputera

Bardziej szczegółowo

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O Budowa komputera Magistrala Procesor Pamięć Układy I/O 1 Procesor to CPU (Central Processing Unit) centralny układ elektroniczny realizujący przetwarzanie informacji Zmiana stanu tranzystorów wewnątrz

Bardziej szczegółowo

JCuda Czy Java i CUDA mogą się polubić? Konrad Szałkowski

JCuda Czy Java i CUDA mogą się polubić? Konrad Szałkowski JCuda Czy Java i CUDA mogą się polubić? Konrad Szałkowski Agenda GPU Dlaczego warto używać GPU Budowa GPU CUDA JCuda Przykładowa implementacja Co to jest? GPU GPU Graphical GPU Graphical Processing GPU

Bardziej szczegółowo

Zapoznanie z technikami i narzędziami programistycznymi służącymi do tworzenia programów współbieżnych i obsługi współbieżności przez system.

Zapoznanie z technikami i narzędziami programistycznymi służącymi do tworzenia programów współbieżnych i obsługi współbieżności przez system. Wstęp Zapoznanie z technikami i narzędziami programistycznymi służącymi do tworzenia programów współbieżnych i obsługi współbieżności przez system. Przedstawienie architektur sprzętu wykorzystywanych do

Bardziej szczegółowo

Wykład 8: klasy cz. 4

Wykład 8: klasy cz. 4 Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD

Bardziej szczegółowo

Architektury komputerów Architektury i wydajność. Tomasz Dziubich

Architektury komputerów Architektury i wydajność. Tomasz Dziubich Architektury komputerów Architektury i wydajność Tomasz Dziubich Przetwarzanie potokowe Przetwarzanie sekwencyjne Przetwarzanie potokowe Architektura superpotokowa W przetwarzaniu potokowym podczas niektórych

Bardziej szczegółowo

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński ppelczynski@swspiz.pl

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński ppelczynski@swspiz.pl Programowanie niskopoziomowe dr inż. Paweł Pełczyński ppelczynski@swspiz.pl 1 Literatura Randall Hyde: Asembler. Sztuka programowania, Helion, 2004. Eugeniusz Wróbel: Praktyczny kurs asemblera, Helion,

Bardziej szczegółowo

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Język programowania prosty bezpieczny zorientowany obiektowo wielowątkowy rozproszony przenaszalny interpretowany dynamiczny wydajny Platforma

Bardziej szczegółowo

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE Studia podyplomowe dla nauczycieli INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE Przedmiot JĘZYKI PROGRAMOWANIA DEFINICJE I PODSTAWOWE POJĘCIA Autor mgr Sławomir Ciernicki 1/7 Aby

Bardziej szczegółowo

Praca dyplomowa magisterska

Praca dyplomowa magisterska Praca dyplomowa magisterska Implementacja algorytmów filtracji adaptacyjnej o strukturze transwersalnej na platformie CUDA Dyplomant: Jakub Kołakowski Opiekun pracy: dr inż. Michał Meller Plan prezentacji

Bardziej szczegółowo

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O Budowa komputera Magistrala Procesor Pamięć Układy I/O 1 Procesor to CPU (Central Processing Unit) centralny układ elektroniczny realizujący przetwarzanie informacji Zmiana stanu tranzystorów wewnątrz

Bardziej szczegółowo

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Object-oriented programming Najpopularniejszy obecnie styl (paradygmat) programowania Rozwinięcie koncepcji programowania strukturalnego

Bardziej szczegółowo

Podsystem graficzny. W skład podsystemu graficznego wchodzą: karta graficzna monitor

Podsystem graficzny. W skład podsystemu graficznego wchodzą: karta graficzna monitor Plan wykładu 1. Pojęcie podsystemu graficznego i karty graficznej 2. Typy kart graficznych 3. Budowa karty graficznej: procesor graficzny (GPU), pamięć podręczna RAM, konwerter cyfrowo-analogowy (DAC),

Bardziej szczegółowo

Temat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych

Temat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych PAŃSTWOWA WYŻSZA SZKOŁA ZAWODOWA W ELBLĄGU INSTYTUT INFORMATYKI STOSOWANEJ Sprawozdanie z Seminarium Dyplomowego Temat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych

Bardziej szczegółowo

INŻYNIERIA OPROGRAMOWANIA

INŻYNIERIA OPROGRAMOWANIA INSTYTUT INFORMATYKI STOSOWANEJ 2013 INŻYNIERIA OPROGRAMOWANIA Inżynieria Oprogramowania Proces ukierunkowany na wytworzenie oprogramowania Jak? Kto? Kiedy? Co? W jaki sposób? Metodyka Zespół Narzędzia

Bardziej szczegółowo

16. Taksonomia Flynn'a.

16. Taksonomia Flynn'a. 16. Taksonomia Flynn'a. Taksonomia systemów komputerowych według Flynna jest klasyfikacją architektur komputerowych, zaproponowaną w latach sześćdziesiątych XX wieku przez Michaela Flynna, opierająca się

Bardziej szczegółowo

PROGRAMOWANIE WSPÓŁCZESNYCH ARCHITEKTUR KOMPUTEROWYCH DR INŻ. KRZYSZTOF ROJEK

PROGRAMOWANIE WSPÓŁCZESNYCH ARCHITEKTUR KOMPUTEROWYCH DR INŻ. KRZYSZTOF ROJEK 1 PROGRAMOWANIE WSPÓŁCZESNYCH ARCHITEKTUR KOMPUTEROWYCH DR INŻ. KRZYSZTOF ROJEK POLITECHNIKA CZĘSTOCHOWSKA 2 Trendy rozwoju współczesnych procesorów Budowa procesora CPU na przykładzie Intel Kaby Lake

Bardziej szczegółowo

Sprzęt komputerowy 2. Autor prezentacji: 1 prof. dr hab. Maria Hilczer

Sprzęt komputerowy 2. Autor prezentacji: 1 prof. dr hab. Maria Hilczer Sprzęt komputerowy 2 Autor prezentacji: 1 prof. dr hab. Maria Hilczer Budowa komputera Magistrala Procesor Pamięć Układy I/O 2 Procesor to CPU (Central Processing Unit) centralny układ elektroniczny realizujący

Bardziej szczegółowo

Raport Hurtownie Danych

Raport Hurtownie Danych Raport Hurtownie Danych Algorytm Apriori na indeksie bitmapowym oraz OpenCL Mikołaj Dobski, Mateusz Jarus, Piotr Jessa, Jarosław Szymczak Cel projektu: Implementacja algorytmu Apriori oraz jego optymalizacja.

Bardziej szczegółowo

ZASADY PROGRAMOWANIA KOMPUTERÓW

ZASADY PROGRAMOWANIA KOMPUTERÓW POLITECHNIKA WARSZAWSKA Instytut Automatyki i i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW Język Język programowania: C/C++ Środowisko programistyczne: C++Builder 6 Wykład 9.. Wskaźniki i i zmienne dynamiczne.

Bardziej szczegółowo

Architektura von Neumanna

Architektura von Neumanna Architektura von Neumanna Klasyfikacja systemów komputerowych (Flynna) SISD - Single Instruction Single Data SIMD - Single Instruction Multiple Data MISD - Multiple Instruction Single Data MIMD - Multiple

Bardziej szczegółowo

Karta przedmiotu. Podstawy programowania procesorów graficznych. realizowanego w ramach projektu PO WER

Karta przedmiotu. Podstawy programowania procesorów graficznych. realizowanego w ramach projektu PO WER Karta przedmiotu Podstawy programowania procesorów graficznych realizowanego w ramach projektu PO WER 2017-2019 Wydział Inżynierii Elektrycznej i Komputerowej Kierunek studiów: Informatyka Profil: Ogólnoakademicki

Bardziej szczegółowo

RDZEŃ x86 x86 rodzina architektur (modeli programowych) procesorów firmy Intel, należących do kategorii CISC, stosowana w komputerach PC,

RDZEŃ x86 x86 rodzina architektur (modeli programowych) procesorów firmy Intel, należących do kategorii CISC, stosowana w komputerach PC, RDZEŃ x86 x86 rodzina architektur (modeli programowych) procesorów firmy Intel, należących do kategorii CISC, stosowana w komputerach PC, zapoczątkowana przez i wstecznie zgodna z 16-bitowym procesorem

Bardziej szczegółowo

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6 JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 6 1 SPECYFIKATOR static Specyfikator static: Specyfikator ten powoduje, że zmienna lokalna definiowana w obrębie danej funkcji nie jest niszczona

Bardziej szczegółowo

Wykorzystanie architektury Intel MIC w obliczeniach typu stencil

Wykorzystanie architektury Intel MIC w obliczeniach typu stencil Wykorzystanie architektury Intel MIC w obliczeniach typu stencil Kamil Halbiniak Wydział Inżynierii Mechanicznej i Informatyki Kierunek informatyka, Rok IV Instytut Informatyki Teoretycznej i Stosowanej

Bardziej szczegółowo

Lab 9 Podstawy Programowania

Lab 9 Podstawy Programowania Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany

Bardziej szczegółowo

Zaawansowane programowanie w języku C++

Zaawansowane programowanie w języku C++ Kod szkolenia: Tytuł szkolenia: C/ADV Zaawansowane programowanie w języku C++ Dni: 3 Opis: Uczestnicy szkolenia zapoznają się z metodami wytwarzania oprogramowania z użyciem zaawansowanych mechanizmów

Bardziej szczegółowo

Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1.

Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1. Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1. Grażyna Koba MIGRA 2019 Spis treści (propozycja na 2*32 = 64 godziny lekcyjne) Moduł A. Wokół komputera i sieci komputerowych

Bardziej szczegółowo

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Program, to lista poleceń zapisana w jednym języku programowania zgodnie z obowiązującymi w nim zasadami. Celem programu jest przetwarzanie

Bardziej szczegółowo

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę. Języki C i C++ to bardzo uniwersalne platformy programistyczne o ogromnych możliwościach. Wykorzystywane są do tworzenia systemów operacyjnych i oprogramowania użytkowego. Dzięki niskiemu poziomowi abstrakcji

Bardziej szczegółowo

Programowanie współbieżne Wykład 2. Iwona Kochańska

Programowanie współbieżne Wykład 2. Iwona Kochańska Programowanie współbieżne Wykład 2 Iwona Kochańska Miary skalowalności algorytmu równoległego Przyspieszenie Stały rozmiar danych N T(1) - czas obliczeń dla najlepszego algorytmu sekwencyjnego T(p) - czas

Bardziej szczegółowo

Sprzęt komputerowy 2. Autor prezentacji: 1 prof. dr hab. Maria Hilczer

Sprzęt komputerowy 2. Autor prezentacji: 1 prof. dr hab. Maria Hilczer Sprzęt komputerowy 2 Autor prezentacji: 1 prof. dr hab. Maria Hilczer Budowa komputera Magistrala Procesor Pamięć Układy I/O 2 Procesor to CPU (Central Processing Unit) centralny układ elektroniczny realizujący

Bardziej szczegółowo

Historia modeli programowania

Historia modeli programowania Języki Programowania na Platformie.NET http://kaims.eti.pg.edu.pl/ goluch/ goluch@eti.pg.edu.pl Maszyny z wbudowanym oprogramowaniem Maszyny z wbudowanym oprogramowaniem automatyczne rozwiązywanie problemu

Bardziej szczegółowo

Opracował: Jan Front

Opracował: Jan Front Opracował: Jan Front Sterownik PLC PLC (Programowalny Sterownik Logiczny) (ang. Programmable Logic Controller) mikroprocesorowe urządzenie sterujące układami automatyki. PLC wykonuje w sposób cykliczny

Bardziej szczegółowo

Architektura mikroprocesorów TEO 2009/2010

Architektura mikroprocesorów TEO 2009/2010 Architektura mikroprocesorów TEO 2009/2010 Plan wykładów Wykład 1: - Wstęp. Klasyfikacje mikroprocesorów Wykład 2: - Mikrokontrolery 8-bit: AVR, PIC Wykład 3: - Mikrokontrolery 8-bit: 8051, ST7 Wykład

Bardziej szczegółowo

Podstawy Programowania C++

Podstawy Programowania C++ Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:

Bardziej szczegółowo

Grafika komputerowa i wizualizacja

Grafika komputerowa i wizualizacja Grafika komputerowa i wizualizacja Radosław Mantiuk ( rmantiuk@wi.zut.edu.pl, p. 315 WI2) http://rmantiuk.zut.edu.pl Katedra Systemów Multimedialnych Wydział Informatyki, Zachodniopomorski Uniwersytet

Bardziej szczegółowo

GRAFIKA KOMPUTEROWA. Rozwiązania sprzętowe i programowe. Przyspieszanie sprzętowe. Synteza dźwięku i obrazu

GRAFIKA KOMPUTEROWA. Rozwiązania sprzętowe i programowe. Przyspieszanie sprzętowe. Synteza dźwięku i obrazu Synteza dźwięku i obrazu GRAFIKA KOMPUTEROWA Rozwiązania sprzętowe i programowe Przyspieszanie sprzętowe Generowanie obrazu 3D wymaga złożonych obliczeń, szczególnie jeżeli chodzi o generowanie płynnej

Bardziej szczegółowo

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa 1 Java Wprowadzenie 2 Czym jest Java? Język programowania prosty zorientowany obiektowo rozproszony interpretowany wydajny Platforma bezpieczny wielowątkowy przenaszalny dynamiczny Rozumiana jako środowisko

Bardziej szczegółowo

Wysokowydajna implementacja kodów nadmiarowych typu "erasure codes" z wykorzystaniem architektur wielordzeniowych

Wysokowydajna implementacja kodów nadmiarowych typu erasure codes z wykorzystaniem architektur wielordzeniowych Wysokowydajna implementacja kodów nadmiarowych typu "erasure codes" z wykorzystaniem architektur wielordzeniowych Ł. Kuczyński, M. Woźniak, R. Wyrzykowski Instytut Informatyki Teoretycznej i Stosowanej

Bardziej szczegółowo

Wydajność systemów a organizacja pamięci, czyli dlaczego jednak nie jest aż tak źle. Krzysztof Banaś, Obliczenia wysokiej wydajności.

Wydajność systemów a organizacja pamięci, czyli dlaczego jednak nie jest aż tak źle. Krzysztof Banaś, Obliczenia wysokiej wydajności. Wydajność systemów a organizacja pamięci, czyli dlaczego jednak nie jest aż tak źle Krzysztof Banaś, Obliczenia wysokiej wydajności. 1 Organizacja pamięci Organizacja pamięci współczesnych systemów komputerowych

Bardziej szczegółowo

Programowanie w modelu równoległości danych oraz dzielonej globalnej pamięci wspólnej. Krzysztof Banaś Obliczenia równoległe 1

Programowanie w modelu równoległości danych oraz dzielonej globalnej pamięci wspólnej. Krzysztof Banaś Obliczenia równoległe 1 Programowanie w modelu równoległości danych oraz dzielonej globalnej pamięci wspólnej Krzysztof Banaś Obliczenia równoległe 1 Model równoległości danych Model SPMD (pierwotnie dla maszyn SIMD) Zrównoleglenie

Bardziej szczegółowo

Wykład 3 Składnia języka C# (cz. 2)

Wykład 3 Składnia języka C# (cz. 2) Wizualne systemy programowania Wykład 3 Składnia języka C# (cz. 2) 1 dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD Wizualne systemy programowania Metody 2 Metody W C# nie jest

Bardziej szczegółowo

Wykład 5: Klasy cz. 3

Wykład 5: Klasy cz. 3 Programowanie obiektowe Wykład 5: cz. 3 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD - podstawy Konstruktor i destruktor (część I) 2 Konstruktor i destruktor KONSTRUKTOR Dla przykładu

Bardziej szczegółowo

Algorytmy estymacji stanu (filtry)

Algorytmy estymacji stanu (filtry) Algorytmy estymacji stanu (filtry) Na podstawie: AIMA ch15, Udacity (S. Thrun) Wojciech Jaśkowski Instytut Informatyki, Politechnika Poznańska 21 kwietnia 2014 Problem lokalizacji Obserwowalność? Determinizm?

Bardziej szczegółowo

Podstawy Programowania Obiektowego

Podstawy Programowania Obiektowego Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja

Bardziej szczegółowo

Modelowanie i Programowanie Obiektowe

Modelowanie i Programowanie Obiektowe Modelowanie i Programowanie Obiektowe Wykład I: Wstęp 20 październik 2012 Programowanie obiektowe Metodyka wytwarzania oprogramowania Metodyka Metodyka ustandaryzowane dla wybranego obszaru podejście do

Bardziej szczegółowo

Programowanie komputerów

Programowanie komputerów Programowanie komputerów Wykład 1-2. Podstawowe pojęcia Plan wykładu Omówienie programu wykładów, laboratoriów oraz egzaminu Etapy rozwiązywania problemów dr Helena Dudycz Katedra Technologii Informacyjnych

Bardziej szczegółowo

Literatura. 11/16/2016 Przetwarzanie równoległe - wstęp 1

Literatura. 11/16/2016 Przetwarzanie równoległe - wstęp 1 Literatura 1. Wprowadzenie do obliczeń równoległych, Zbigniew Czech, Wydawnictwo Naukowe PWN, 2010, 2013 2. Introduction to Parallel Computing; Grama, Gupta, Karypis, Kumar; Addison Wesley 2003 3. Designing

Bardziej szczegółowo

KRYPTOGRAFIA I OCHRONA DANYCH PROJEKT

KRYPTOGRAFIA I OCHRONA DANYCH PROJEKT KRYPTOGRAFIA I OCHRONA DANYCH PROJEKT Temat: Zaimplementować system kryptografii wizualnej http://www.cacr.math.uwaterloo.ca/~dstinson/visual.html Autor: Tomasz Mitręga NSMW Grupa 1 Sekcja 2 1. Temat projektu

Bardziej szczegółowo

Obliczenia Wysokiej Wydajności

Obliczenia Wysokiej Wydajności Obliczenia wysokiej wydajności 1 Wydajność obliczeń Wydajność jest (obok poprawności, niezawodności, bezpieczeństwa, ergonomiczności i łatwości stosowania i pielęgnacji) jedną z najważniejszych charakterystyk

Bardziej szczegółowo

Podstawy programowania. Wprowadzenie

Podstawy programowania. Wprowadzenie Podstawy programowania Wprowadzenie Proces tworzenia programu Sformułowanie problemu funkcje programu zakres i postać danych postać i dokładność wyników Wybór / opracowanie metody rozwiązania znaleźć matematyczne

Bardziej szczegółowo

Skalowalność obliczeń równoległych. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

Skalowalność obliczeń równoległych. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1 Skalowalność obliczeń równoległych Krzysztof Banaś Obliczenia Wysokiej Wydajności 1 Skalowalność Przy rozważaniu wydajności przetwarzania (obliczeń, komunikacji itp.) często pojawia się pojęcie skalowalności

Bardziej szczegółowo

Algorytm. a programowanie -

Algorytm. a programowanie - Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik

Bardziej szczegółowo

Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami

Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami dr inż. Mariusz Uchroński Wrocławskie Centrum Sieciowo-Superkomputerowe Agenda Cykliczny problem przepływowy

Bardziej szczegółowo

Programowanie z wykorzystaniem technologii CUDA i OpenCL Wykład 1

Programowanie z wykorzystaniem technologii CUDA i OpenCL Wykład 1 Programowanie z wykorzystaniem technologii CUDA i OpenCL Wykład 1 Organizacja przedmiotu Dr inż. Robert Banasiak Dr inż. Paweł Kapusta 1 2 Nasze kompetencje R n D Tomografia 3D To nie tylko statyczny obraz!

Bardziej szczegółowo

Architektura Systemów Komputerowych. Rozwój architektury komputerów klasy PC

Architektura Systemów Komputerowych. Rozwój architektury komputerów klasy PC Architektura Systemów Komputerowych Rozwój architektury komputerów klasy PC 1 1978: Intel 8086 29tys. tranzystorów, 16-bitowy, współpracował z koprocesorem 8087, posiadał 16-bitową szynę danych (lub ośmiobitową

Bardziej szczegółowo

Wykład Ćwiczenia Laboratorium Projekt Seminarium

Wykład Ćwiczenia Laboratorium Projekt Seminarium WYDZIAŁ ELEKTRONIKI KARTA PRZEDMIOTU Nazwa w języku polskim Języki programowania Nazwa w języku angielskim Programming languages Kierunek studiów (jeśli dotyczy): Informatyka - INF Specjalność (jeśli dotyczy):

Bardziej szczegółowo

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE WINDOWS 1 SO i SK/WIN 007 Tryb rzeczywisty i chroniony procesora 2 SO i SK/WIN Wszystkie 32-bitowe procesory (386 i nowsze) mogą pracować w kilku trybach. Tryby pracy

Bardziej szczegółowo

która metoda jest najlepsza

która metoda jest najlepsza która metoda jest najlepsza dr inż. Marek Żabka Instytut Matematyki Wydział Matematyki Stosowanej Politechnika Śląska 20 września 2012r Nowa metoda tworzenia grafiki na stronie internetowej: element,,canvas

Bardziej szczegółowo

Programowanie aplikacji na iphone. Wstęp do platformy ios. Łukasz Zieliński

Programowanie aplikacji na iphone. Wstęp do platformy ios. Łukasz Zieliński Programowanie aplikacji na iphone. Wstęp do platformy ios. Łukasz Zieliński Plan Prezentacji. Programowanie ios. Jak zacząć? Co warto wiedzieć o programowaniu na platformę ios? Kilka słów na temat Obiective-C.

Bardziej szczegółowo

Programowanie niskopoziomowe

Programowanie niskopoziomowe Programowanie niskopoziomowe Programowanie niskopoziomowe w systemie operacyjnym oraz poza nim Tworzenie programu zawierającego procedury asemblerowe 1 Programowanie niskopoziomowe w systemie operacyjnym

Bardziej szczegółowo

Technika mikroprocesorowa. Struktura programu użytkownika w systemie mikroprocesorowym

Technika mikroprocesorowa. Struktura programu użytkownika w systemie mikroprocesorowym Struktura programu użytkownika w systemie mikroprocesorowym start inicjalizacja niekończaca się pętla zadania niekrytyczne czasowo przerwania zadania krytyczne czasowo 1 Znaczenie problematyki programowania

Bardziej szczegółowo

QEMU działa na procesorach procesorach: emuluje procesory: dostępne dla s.o. hosta:

QEMU działa na procesorach procesorach: emuluje procesory: dostępne dla s.o. hosta: QEMU Stosunkowo szybki emulator procesora, korzystający z tzw. dynamicznej translacji i kilku innych ciekawych technik programistycznych i optymalizacyjnych. działa na procesorach procesorach: Intel x86,

Bardziej szczegółowo

INFORMATYKA TECHNICZNA Badanie możliwości wykorzystania języka AutoLISP i środowiska VisualLISP w systemie CAx

INFORMATYKA TECHNICZNA Badanie możliwości wykorzystania języka AutoLISP i środowiska VisualLISP w systemie CAx INFORMATYKA TECHNICZNA Badanie możliwości wykorzystania języka AutoLISP i środowiska VisualLISP w systemie CAx 1. WPROWADZENIE Program AutoCAD ma wielu użytkowników i zajmuje znaczące miejsce w graficznym

Bardziej szczegółowo