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 wykorzystywanej do szukania śladów życia pozaziemskiego oraz 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 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego Wątki Wątek - definicja Ciąg instrukcji (podprogram) który może być wykonywane współbieżnie (równolegle) z innymi programami, Wątki działają w ramach tego samego procesu Współdzielą dane (mogą operować

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

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02 METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się

Bardziej szczegółowo

GRAFIKA KOMPUTEROWA. Rozwiązania sprzętowe i programowe. Przyspieszanie sprzętowe. Synteza i obróbka obrazu

GRAFIKA KOMPUTEROWA. Rozwiązania sprzętowe i programowe. Przyspieszanie sprzętowe. Synteza i obróbka obrazu Synteza i obróbka 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

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik Wykład VII Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Kompilacja Kompilator C program do tłumaczenia kodu źródłowego na język maszynowy. Preprocesor

Bardziej szczegółowo

Programowanie Równoległe wykład 12. OpenGL + algorytm n ciał. Maciej Matyka Instytut Fizyki Teoretycznej

Programowanie Równoległe wykład 12. OpenGL + algorytm n ciał. Maciej Matyka Instytut Fizyki Teoretycznej Programowanie Równoległe wykład 12 OpenGL + algorytm n ciał Maciej Matyka Instytut Fizyki Teoretycznej CUDA z OpenGL 1. Dane dla kerneli znajdują się na karcie GFX. 2. Chcemy liczyć i rysować używając

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

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

Podstawy OpenCL część 2

Podstawy OpenCL część 2 Podstawy OpenCL część 2 1. Napisz program dokonujący mnożenia dwóch macierzy w wersji sekwencyjnej oraz OpenCL. Porównaj czasy działania obu wersji dla różnych wielkości macierzy, np. 16 16, 128 128, 1024

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

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

SPOSOBY POMIARU KĄTÓW W PROGRAMIE AutoCAD

SPOSOBY POMIARU KĄTÓW W PROGRAMIE AutoCAD Dr inż. Jacek WARCHULSKI Dr inż. Marcin WARCHULSKI Mgr inż. Witold BUŻANTOWICZ Wojskowa Akademia Techniczna SPOSOBY POMIARU KĄTÓW W PROGRAMIE AutoCAD Streszczenie: W referacie przedstawiono możliwości

Bardziej szczegółowo

Plan wykładu. Akcelerator 3D Potok graficzny

Plan wykładu. Akcelerator 3D Potok graficzny Plan wykładu Akcelerator 3D Potok graficzny Akcelerator 3D W 1996 r. opracowana została specjalna karta rozszerzeń o nazwie marketingowej Voodoo, którą z racji wspomagania procesu generowania grafiki 3D

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 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

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

Obróbka po realnej powierzchni o Bez siatki trójkątów o Lepsza jakość po obróbce wykańczającej o Tylko jedna tolerancja jakości powierzchni

Obróbka po realnej powierzchni o Bez siatki trójkątów o Lepsza jakość po obróbce wykańczającej o Tylko jedna tolerancja jakości powierzchni TEBIS Wszechstronny o Duża elastyczność programowania o Wysoka interaktywność Delikatne ścieżki o Nie potrzebny dodatkowy moduł HSC o Mniejsze zużycie narzędzi o Mniejsze zużycie obrabiarki Zarządzanie

Bardziej szczegółowo

Sprzęt komputera - zespół układów wykonujących programy wprowadzone do pamięci komputera (ang. hardware) Oprogramowanie komputera - zespół programów

Sprzęt komputera - zespół układów wykonujących programy wprowadzone do pamięci komputera (ang. hardware) Oprogramowanie komputera - zespół programów Sprzęt komputera - zespół układów wykonujących programy wprowadzone do pamięci komputera (ang. hardware) Oprogramowanie komputera - zespół programów przeznaczonych do wykonania w komputerze (ang. software).

Bardziej szczegółowo

NETBEANS PROFILER TOMASZ ŁUKASZUK

NETBEANS PROFILER TOMASZ ŁUKASZUK NETBEANS PROFILER TOMASZ ŁUKASZUK STRESZCZENIE: Dokument zawiera podstawowe informacje dotyczące programu NetBeans Profiler. Stanowi uproszczoną instrukcję jego używania. Dotyczy NetBeans Profiler w wersji

Bardziej szczegółowo

Rozdział 4 KLASY, OBIEKTY, METODY

Rozdział 4 KLASY, OBIEKTY, METODY Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej

Bardziej szczegółowo

Wykład 4: Klasy i Metody

Wykład 4: Klasy i Metody Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to

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

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

Przyspieszanie sprzętowe

Przyspieszanie sprzętowe 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

Programowanie współbieżne i rozproszone

Programowanie współbieżne i rozproszone Programowanie współbieżne i rozproszone WYKŁAD 1 dr inż. Literatura ogólna Ben-Ari, M.: Podstawy programowania współbieżnego i rozproszonego. Wydawnictwa Naukowo-Techniczne, Warszawa, 2009. Czech, Z.J:

Bardziej szczegółowo

Podstawy programowania

Podstawy programowania Podstawy programowania Część pierwsza Od języka symbolicznego do języka wysokiego poziomu Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót

Bardziej szczegółowo

LEKCJA TEMAT: Zasada działania komputera.

LEKCJA TEMAT: Zasada działania komputera. LEKCJA TEMAT: Zasada działania komputera. 1. Ogólna budowa komputera Rys. Ogólna budowa komputera. 2. Komputer składa się z czterech głównych składników: procesor (jednostka centralna, CPU) steruje działaniem

Bardziej szczegółowo

Modyfikacja algorytmów retransmisji protokołu TCP.

Modyfikacja algorytmów retransmisji protokołu TCP. Modyfikacja algorytmów retransmisji protokołu TCP. Student Adam Markowski Promotor dr hab. Michał Grabowski Cel pracy Celem pracy było przetestowanie i sprawdzenie przydatności modyfikacji klasycznego

Bardziej szczegółowo

OpenGL - Open Graphics Library. Programowanie grafiki komputerowej. OpenGL 3.0. OpenGL - Architektura (1)

OpenGL - Open Graphics Library. Programowanie grafiki komputerowej. OpenGL 3.0. OpenGL - Architektura (1) OpenGL - Open Graphics Library Programowanie grafiki komputerowej Rados$aw Mantiuk Wydzia$ Informatyki Zachodniopomorski Uniwersytet Technologiczny! OpenGL: architektura systemu do programowania grafiki

Bardziej szczegółowo

Julia 4D - raytracing

Julia 4D - raytracing i przykładowa implementacja w asemblerze Politechnika Śląska Instytut Informatyki 27 sierpnia 2009 A teraz... 1 Fraktale Julia Przykłady Wstęp teoretyczny Rendering za pomocą śledzenia promieni 2 Implementacja

Bardziej szczegółowo

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij. Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice

Bardziej szczegółowo

1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4

1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4 Spis treści 1 Wątki 1 2 Tworzenie wątków 1 3 Synchronizacja 3 4 Dodatki 3 5 Algorytmy sortowania 4 6 Klasa Runnable 4 Temat: Wątki Czym są wątki. Grafika. Proste animacje. Małe podsumowanie materiału.

Bardziej szczegółowo

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,

Bardziej szczegółowo

Porównanie generatorów liczb losowych wykorzystywanych w arkuszach kalkulacyjnych

Porównanie generatorów liczb losowych wykorzystywanych w arkuszach kalkulacyjnych dr Piotr Sulewski POMORSKA AKADEMIA PEDAGOGICZNA W SŁUPSKU KATEDRA INFORMATYKI I STATYSTYKI Porównanie generatorów liczb losowych wykorzystywanych w arkuszach kalkulacyjnych Wprowadzenie Obecnie bardzo

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

ZMODYFIKOWANY Szczegółowy opis przedmiotu zamówienia

ZMODYFIKOWANY Szczegółowy opis przedmiotu zamówienia ZP/ITS/11/2012 Załącznik nr 1a do SIWZ ZMODYFIKOWANY Szczegółowy opis przedmiotu zamówienia Przedmiotem zamówienia jest: Przygotowanie zajęć dydaktycznych w postaci kursów e-learningowych przeznaczonych

Bardziej szczegółowo

Modelowanie procesów współbieżnych

Modelowanie procesów współbieżnych Modelowanie procesów współbieżnych dr inż. Maciej Piotrowicz Katedra Mikroelektroniki i Technik Informatycznych PŁ piotrowi@dmcs.p.lodz.pl http://fiona.dmcs.pl/~piotrowi -> Modelowanie... Literatura M.

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 1. Wstęp do programowania w języku Java. Narzędzia 1. Aby móc tworzyć programy w języku Java, potrzebny jest zestaw narzędzi Java Development Kit, który można ściągnąć

Bardziej szczegółowo

Zastosowanie symulacji Monte Carlo do zarządzania ryzykiem przedsięwzięcia z wykorzystaniem metod sieciowych PERT i CPM

Zastosowanie symulacji Monte Carlo do zarządzania ryzykiem przedsięwzięcia z wykorzystaniem metod sieciowych PERT i CPM SZKOŁA GŁÓWNA HANDLOWA w Warszawie STUDIUM MAGISTERSKIE Kierunek: Metody ilościowe w ekonomii i systemy informacyjne Karol Walędzik Nr albumu: 26353 Zastosowanie symulacji Monte Carlo do zarządzania ryzykiem

Bardziej szczegółowo

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki Studia Podyplomowe INFORMATYKA Podstawy Informatyki Wykład V Rzut okiem na języki programowania 1 Kompilacja vs. interpretacja KOMPILACJA Proces, który przetwarza program zapisany w języku programowania,

Bardziej szczegółowo

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Część XVIII C++ Funkcje Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Umiemy już podzielić nasz

Bardziej szczegółowo

Środowiska i platformy programistyczne

Środowiska i platformy programistyczne Środowiska i platformy programistyczne 1 Rys historyczny lata 80-90: efektywność! Cel: zwiększyć efektywność programisty jedno narzędzie: integracja edytor kodu, funkcje programistyczne (kompilacja, łączenie,

Bardziej szczegółowo

Podstawy programowania.

Podstawy programowania. Kod przedmiotu: PPR Podstawy programowania. Rodzaj przedmiotu: kierunkowy; obowiązkowy Wydział: Informatyki Kierunek: Informatyka Specjalność (specjalizacja): - Poziom studiów: pierwszego stopnia Profil

Bardziej szczegółowo

Architektura komputerów

Architektura komputerów Architektura komputerów Wykład 13 Jan Kazimirski 1 KOMPUTERY RÓWNOLEGŁE 2 Klasyfikacja systemów komputerowych SISD Single Instruction, Single Data stream SIMD Single Instruction, Multiple Data stream MISD

Bardziej szczegółowo

Podstawy Programowania 2

Podstawy Programowania 2 Podstawy Programowania 2 Laboratorium 7 Instrukcja 6 Object Pascal Opracował: mgr inż. Leszek Ciopiński Wstęp: Programowanie obiektowe a programowanie strukturalne. W programowaniu strukturalnym, któremu

Bardziej szczegółowo

Język ludzki kod maszynowy

Język ludzki kod maszynowy Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza

Bardziej szczegółowo

Multimedia JAVA. Historia

Multimedia JAVA. Historia Multimedia JAVA mgr inż. Piotr Odya piotrod@sound.eti.pg.gda.pl Historia 1990 rozpoczęcie prac nad nowym systemem operacyjnym w firmie SUN, do jego tworzenia postanowiono wykorzystać nowy język programowania

Bardziej szczegółowo

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Programowanie obiektowe Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Java P. L. Lemay, Naughton R. Cadenhead Java Podręcznik 2 dla kaŝdego Języka Programowania Java Linki Krzysztof Boone oprogramowania

Bardziej szczegółowo

Większe możliwości dzięki LabVIEW 2009: programowanie równoległe, technologie bezprzewodowe i funkcje matematyczne w systemach czasu rzeczywistego

Większe możliwości dzięki LabVIEW 2009: programowanie równoległe, technologie bezprzewodowe i funkcje matematyczne w systemach czasu rzeczywistego Większe możliwości dzięki LabVIEW 2009: programowanie równoległe, technologie bezprzewodowe i funkcje matematyczne w systemach czasu rzeczywistego Dziś bardziej niż kiedykolwiek narzędzia używane przez

Bardziej szczegółowo

Budowa aplikacji ASP.NET z wykorzystaniem wzorca MVC

Budowa aplikacji ASP.NET z wykorzystaniem wzorca MVC Akademia MetaPack Uniwersytet Zielonogórski Budowa aplikacji ASP.NET z wykorzystaniem wzorca MVC Krzysztof Blacha Microsoft Certified Professional Budowa aplikacji ASP.NET z wykorzystaniem wzorca MVC Agenda:

Bardziej szczegółowo

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji. JAVA Java jest wszechstronnym językiem programowania, zorientowanym obiektowo, dostarczającym możliwość uruchamiania apletów oraz samodzielnych aplikacji. Java nie jest typowym kompilatorem. Źródłowy kod

Bardziej szczegółowo

Modelowanie diagramów klas w języku UML. Łukasz Gorzel 244631@stud.umk.pl 7 marca 2014

Modelowanie diagramów klas w języku UML. Łukasz Gorzel 244631@stud.umk.pl 7 marca 2014 Modelowanie diagramów klas w języku UML Łukasz Gorzel 244631@stud.umk.pl 7 marca 2014 Czym jest UML - Unified Modeling Language - Rodzina języków modelowania graficznego - Powstanie na przełomie lat 80

Bardziej szczegółowo

Dokumentacja końcowa projektu z ZPR

Dokumentacja końcowa projektu z ZPR Dokumentacja końcowa projektu z ZPR Temat projektu: Prowadzący projekt: Zespół projektowy: Losowe przeszukiwanie stanów dr inż. Robert Nowak Piotr Krysik Kamil Zabielski 1. Opis projektu Projekt ma za

Bardziej szczegółowo

Programowanie Równoległe wykład, 21.01.2013. CUDA, przykłady praktyczne 1. Maciej Matyka Instytut Fizyki Teoretycznej

Programowanie Równoległe wykład, 21.01.2013. CUDA, przykłady praktyczne 1. Maciej Matyka Instytut Fizyki Teoretycznej Programowanie Równoległe wykład, 21.01.2013 CUDA, przykłady praktyczne 1 Maciej Matyka Instytut Fizyki Teoretycznej Motywacja l CPU vs GPU (anims) Plan CUDA w praktyce Wykład 1: CUDA w praktyce l aplikacja

Bardziej szczegółowo

Zacznij Tu! Poznaj Microsoft 2012. Visual Basic. Michael Halvorson. Przekład: Joanna Zatorska

Zacznij Tu! Poznaj Microsoft 2012. Visual Basic. Michael Halvorson. Przekład: Joanna Zatorska Zacznij Tu! Poznaj Microsoft 2012 Visual Basic Michael Halvorson Przekład: Joanna Zatorska APN Promise, Warszawa 2013 Spis treści Wstęp...................................................................vii

Bardziej szczegółowo

Komputerowe Systemy Przemysłowe: Modelowanie - UML. Arkadiusz Banasik arkadiusz.banasik@polsl.pl

Komputerowe Systemy Przemysłowe: Modelowanie - UML. Arkadiusz Banasik arkadiusz.banasik@polsl.pl Komputerowe Systemy Przemysłowe: Modelowanie - UML Arkadiusz Banasik arkadiusz.banasik@polsl.pl Plan prezentacji Wprowadzenie UML Diagram przypadków użycia Diagram klas Podsumowanie Wprowadzenie Języki

Bardziej szczegółowo

Wydajność systemów a organizacja pamięci. Krzysztof Banaś, Obliczenia wysokiej wydajności. 1

Wydajność systemów a organizacja pamięci. Krzysztof Banaś, Obliczenia wysokiej wydajności. 1 Wydajność systemów a organizacja pamięci Krzysztof Banaś, Obliczenia wysokiej wydajności. 1 Motywacja - memory wall Krzysztof Banaś, Obliczenia wysokiej wydajności. 2 Organizacja pamięci Organizacja pamięci:

Bardziej szczegółowo

Programowanie MorphX Ax

Programowanie MorphX Ax Administrowanie Czym jest system ERP? do systemu Dynamics Ax Obsługa systemu Dynamics Ax Wyszukiwanie informacji, filtrowanie, sortowanie rekordów IntelliMorph : ukrywanie i pokazywanie ukrytych kolumn

Bardziej szczegółowo

Metodyki i techniki programowania

Metodyki i techniki programowania Metodyki i techniki programowania dr inż. Maciej Kusy Katedra Podstaw Elektroniki Wydział Elektrotechniki i Informatyki Politechnika Rzeszowska Elektronika i Telekomunikacja, sem. 2 Plan wykładu Sprawy

Bardziej szczegółowo

Zarządzanie pamięcią w systemie operacyjnym

Zarządzanie pamięcią w systemie operacyjnym Zarządzanie pamięcią w systemie operacyjnym Cele: przydział zasobów pamięciowych wykonywanym programom, zapewnienie bezpieczeństwa wykonywanych procesów (ochrona pamięci), efektywne wykorzystanie dostępnej

Bardziej szczegółowo

Politechnika Poznańska, Instytut Informatyki, TWO/GE. Programowanie dla ios

Politechnika Poznańska, Instytut Informatyki, TWO/GE. Programowanie dla ios Politechnika Poznańska, Instytut Informatyki, TWO/GE Programowanie dla ios 13 stycznia 2012 Urządzenia ios Urządzenie Data prezentacji iphone 9.01.2007/06.2007 ipod touch 5.09.2007 iphone 3G 9.06.2008

Bardziej szczegółowo

Plan. krótkie opisy modułów. 1 Uwagi na temat wydajności CPython a. 2 Podstawowe techniki poprawiające wydajność obliczeniową

Plan. krótkie opisy modułów. 1 Uwagi na temat wydajności CPython a. 2 Podstawowe techniki poprawiające wydajność obliczeniową Plan 1 Uwagi na temat wydajności CPython a 2 Podstawowe techniki poprawiające wydajność obliczeniową 3 Podstawowe techniki poprawiające zużycie pamięci krótkie opisy modułów 1 array - jak oszczędzić na

Bardziej szczegółowo

Spis treści WSKAŹNIKI. DYNAMICZNY PRZYDZIAŁ PAMIĘCI W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści WSKAŹNIKI. DYNAMICZNY PRZYDZIAŁ PAMIĘCI W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu Politechnika Białostocka Wydział Elektryczny Katedra Elektrotechniki Teoretycznej i Metrologii Instrukcja do pracowni specjalistycznej z przedmiotu Informatyka 2 Kod przedmiotu: ES1C300 016 (studia stacjonarne)

Bardziej szczegółowo

Java jako język programowania

Java jako język programowania Java jako język programowania Interpretowany programy wykonują się na wirtualnej maszynie (JVM Java Virtual Machine) Składnia oparta o język C++ W pełni zorientowany obiektowo (wszystko jest obiektem)

Bardziej szczegółowo

UML w Visual Studio. Michał Ciećwierz

UML w Visual Studio. Michał Ciećwierz UML w Visual Studio Michał Ciećwierz UNIFIED MODELING LANGUAGE (Zunifikowany język modelowania) Pozwala tworzyć wiele systemów (np. informatycznych) Pozwala obrazować, specyfikować, tworzyć i dokumentować

Bardziej szczegółowo