Programowanie równoległe Parallel Extensions

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

Download "Programowanie równoległe Parallel Extensions"

Transkrypt

1 Programowanie równoległe Parallel Extensions W. Grześkowiak Instytut Informatyki, Wydział Elektroniki i Technik Informacyjnych, Politechnika Warszawska, ul. Nowowiejska 15/19, Warszawa, Polska Streszczenie. Parallel Extensions to zbiór narzędzi przeznaczonych do programowania równoległego, wprowadzony w czwartej wersji platformy.net Framework firmy Microsoft. Zaproponowano nowy model programowania, oparty na fizycznej równoległości wykonywanych zadań. Takie podejście pozwala na pełne wykorzystanie aktualnie produkowanych procesorów wielordzeniowych. 1. Wstęp. Kiedy należy ocenić wydajność komputera, pierwszą rzeczą na którą powinno się zwrócić uwagę jest częstotliwość taktowania procesora. Większa liczba może oznaczać większą wydajność. Producenci układów nie mogli jednak przyśpieszać swoich procesorów w nieskończoność. Problemem okazała się technologia wytwarzania i rozmiary otrzymywanych tranzystorów bliskie rozmiarom atomów. Powstał problem który należało rozwiązać w inny sposób. Tak powstała idea procesorów wielordzeniowych i programowana kierowanego na te środowisko, określanego mianem programowania równoległego. 2. Rynek procesorów. W latach 90 w półświatku informatyków głośno krążyło prawo sformujłowane założyciela firmy Intel - Gordona Moora [1]. Mówiło ono że: Liczba tranzystorów w układzie elektrycznym podwaja się co miesiące. Prawo to w tamtych czasach zgadzało się z rzeczywistością, postęp techniczny był bardzo gwałtowny, coraz więcej tranzystorów można było umieszczać w jednym układzie krzemowym, a jak wiadomo ich liczba decyduje pośrednio o częstotliwości pracy procesora. Im więcej tranzystorów umieści się w jednym układzie, tym większą częstotliwość można osiągnąć. Z czasem inżynierowie doszli do rozmiarów rzędu 32 nm. [2], czyli bardzo blisko rozmiarów atomu (10-10 m). Pomimo faktu że produkcja w coraz to mniejszym wymiarze jest bardzo trudna, Intel aktualnie inwestuje w technologię 22 nm [3]. Procesory wytworzone w tym rozmiarze technologicznym nie trafią jednak na rynek wcześniej niż w 2011 roku. Na problem zwiększania częstotliwości od dawna szukano alternatywy chociaż odpowiedz wydawała się w miarę oczywista. Skoro nie można zwiększać prędkości rdzeni procesorów, to należy umieszczać ich więcej w jednym układzie. Takie rozwiązanie jako pierwszy wprowadził Intel tworząc rodzinę procesorów Core Duo [4]. Ciekawostką jest fakt, że funkcjonowały także jednostki Core Solo [5], które tak naprawdę były ukrytymi jednostkami Duo, z pracującym jednym rdzeniem. Zastosowano taką praktykę ponieważ proces technologiczny w którym produkuje się procesory jest bardzo skomplikowany i często dochodzi do uszkodzeń podzespołów. Intel stwierdził, że jeśli usterka nastąpi w jednym rdzeniu, to nie warto wyrzucać całego układu do kosza. Wyłączano uszkodzony rdzeń i sprzedawano układ pod inna nazwą. Intel z czasem wprowadził na rynek jednostki 4 rdzeniowe, a ostatnie z nich (np. model Intel Core 1

2 7 950 [6]) wyposażone w technologie HT [7] pozwalają na uruchamianie do 8 wątków równolegle. Na rynku pojawiły się więc procesory wielordzeniowe, co zyskano? Aby odpowiedzieć na to pytanie najlepiej posłużyć się wypowiedzią Dana Reeda z Microsoftu Różnica jest taka jak między szybkim sportowym autem, a autobusem szkolnym. Pierwszy szybko przewiezie dwie osoby, a drugi, choć trochę wolniej czterdzieści. Zauważyć należy, że rdzenie jednostek wielordzeniowych nie są tak samo szybkie jak rdzenie z procesorów jednordzeniowych, to jest ciągle jedna płytka krzemu i ciągle bardzo mało miejsca na umieszczenie wszystkich modułów procesora. Analitycy z firmy Forrester Research przewidują, że już w 2012 roku zbudowane zostaną procesory wyposażone w 64 rdzenie. Dan Reed ostrzega Już niedługo zabraknie programistów z doświadczeniem w tworzeniu aplikacji wykorzystujących przetwarzanie równoległe.. To już ostatni dzwonek, aby przekonać młodych programistów o wartości przetwarzania równoległego dodaje. 3. Równoległość, a współbieżność. Zanim zaprezentowane zostanie rozwiązanie Parallel Extensions, na potrzeby artykułu zostaną rozróżnione dwa aspekty programowania równoległego, które nazwane zostaną współbieżnością i równoległością. Obliczenia są współbieżne, jeżeli kolejne do wykonanie obliczenie, rozpocznie się wcześniej niż skończy się poprzednie. Obliczenia współbieżne wykonywane są jednej jednostce obliczeniowej (np. procesorze), pracującej z podziałem czasu. Aby łatwiej zobrazować współbieżność, należy zdefiniować dwa zadania, które powinny wykonać się współbieżnie Zadanie 1 oraz Zadanie 2. Podział czasu polega na udostępnieniu zasobów jednostki obliczeniowej na określony czas na przemian jednemu i drugiemu zadaniu. W każdym cyklu jednostka wykona jedynie część zadania i przełączy się na drugie. Obliczenia równoległe są realizowane fizycznie jednocześnie, na wielu jednostkach obliczeniowych. Obliczenia równoległe mogą być wykonywane co najmniej na dwóch jednostkach obliczeniowych. Rozważając dwa zadania z poprzedniego przykładu, możliwość wykonywania ich równolegle wymaga dwóch jednostek obliczeniowych (np. dwóch procesorów lub dwóch rdzeni). 4. Parallel Extensions. Opisane na początku wydarzenia z rynku procesorów miały miejsce na początku tego dziesięciolecia. Już wtedy firma Microsoft widziała w procesorach wielordzeniowych duży potencjał. Oddział badawcza firmy, Microsoft Research [8], rozpoczął wtedy pacę nad narzędziem które pozwoliłoby programistą w łatwy i przyjemny sposób tworzyć aplikację wykorzystujące możliwość równoległego wykonywania kodu. W ten sposób powstała biblioteka TPL (Task Parallel Library), która stanowi fundament Parallel Extensions. Biblioteka ta jest częścią czwartej wersji platformy.net Framework [9]. 5. Równoległość w praktyce. W rozdziale tym zostanie zaprezentowany przykład praktycznego wykorzystania zalety przetwarzania równoległego. Do tego celu posłużono się aplikacją demonstracyjną, dostarczoną wraz z nową wersją platformy. Aplikacja ta generuje dynamiczne sceny 3D wykorzystując czasochłonną technikę śledzenia promieni, z ang. Ray Tracing. Sposób generowania obrazu zaimplementowano dwojako, w pierwszym wypadku wykorzystano typowe podejście sekwencyjne, w drugim wykorzystano bibliotekę Parallel Extensions. Maszyna testowa to: procesor Intel Core Quad (4x 2.2GHz), 1GB pamięci RAM, system operacyjny Windows Server 2008 zwirtualizowany przy pomocy technologii Hyper-V. Przy uruchomieniu aplikacji z sekwencyjną generacją obrazu, menadżer zadań systemu Windows pokazał zużycie procesora w granicach 25-26%, co w przypadku czterech rdzeni świadczy o tym że wtkorzystywano tylko jeden z nich. 2

3 Ilość FPS Zużycie procesora Współbieżnie 0,7 26 % Równolegle 2,8 100% Tabela 1 - Obciążenie procesora aplikacją Ray Tracing Uruchomienie aplikacji w trybie równoległym (z wykorzystaniem Parallel Extensions) spowodowało wzrost obciążenia procesora do 100%, dzięki czemu wykorzystywano pełną moc dostępnej maszyny testowej. Liczba generowanych klatek na sekundę FPS (z ang. frame per second) w drugim przypadku była 4 razy większa niż w przypadku pierwszym (Tabela 1). Różnica w kodzie algorytmu generowania obrazu równolegle, różni się od wersji synchronicznej jedynie jedna instrukcją. Biblioteka Parallel Extsnions wprowadza wprowadza bardzo wysoka abstrakcję równoległości, dzięki czemu implementacja takiego podejścia jest bardzo łatwa. 6. Imperatywny paralelizm. Przykłady programowania równoległego zostaną omówione na podstawie prezentacji Daniela Motha Parallel Programming for Managed Developers with the Next Version of Microsoft Visual Studio [10] przedstawionej na corocznej konferencji dla programistów związanych z technologiami Microsoftu, Professional Developer Conference. Konferencja ta odbyła się w październiku 2008 roku. Przykład polega na implementacji metody pewnej aplikacji, której celem jest wykonanie czasochłonnych obliczeń na każdym węźle dostarczonego drzewa binarnego. Obliczenia na węzłach są niezależne względem siebie. Kod aplikacji prezentuje listing 1, ciało metody przechodzącej po drzewie jest puste. Zadaniem jest napisanie tej metody w sposób minimalizujący czas potrzebny do przetworzenia całego drzewa o wysokości 9 węzłów. Pierwszym pomysłem na rozwiązaniem tego problemu jest rekurencja. W ten sposób stworzono drzewo więc w podobny sposób można je przeglądać. Funkcja wykorzystująca rekurencje może wyglądać podobnie do funkcji przedstawionej na listingu 2. using System; using System.Diagnostics; using System.Threading; using System.Threading.Tasks; namespace Tree class Program static void Main(string[] args) TNode root = TNode.CreateTree(9, 1); Stopwatch watch = Stopwatch.StartNew(); WalkTree(root); Console.WriteLine( String.Format("Elapsed = 0", watch.elapsedmilliseconds)); /* To co musimy zaimplementować. */ public static int ProcessItem(int value) Thread.SpinWait( ); return value; class TNode public TNode LeftNode get; set; public TNode RightNode get; set; public int Value get; set; public static TNode CreateTree( int deep, int start) TNode root = new TNode(); root.value = start; if (deep > 0) root.leftnode = CreateTree( deep - 1, start + 1); root.rightnode = CreateTree( deep - 1, start + 1); return root; Listing 1- Kod aplikacji wykonującej obliczenia na węzłach drzewa 3

4 Rozwiązania będą testowe na maszynie z procesorem Intel Core 2 Duo T7100 (2x 1,8GHz), 4GB pamięci RAM oraz systemem operacyjnym Windows 7 64bit. if (node == null) return; WalkTree(node.LeftNode); WalkTree(node.RightNode); ProcessItem(node.Value); Listing 2 - Funkcja przeglądania drzewa wykorzystująca rekurencje Czas uzyskany przez rozwiązanie rekurencyjne to 24,998 s.. Zużycie procesora w tym teście wynosiło 50% (taką wartość pokazywał podczas testów menadżer zadań systemu Windows), czyli na dwa dostępne rdzenie, wykorzystywano tylko jeden z nich. Połowa mocy maszyny została niespożyta. Błędem w tym podejściu jest wykorzystanie jednego wątku (tak działa rekurencja). Skoro mamy procesor wielordzeniowy, to można wykorzystać wiele wątków, wtedy wszystkie rdzenie powinny pracować na pełnym obciążeniu. Funkcja implementująca takie podejście przedstawia listing 3. if (node == null) return; Thread left = new Thread((o) => WalkTree(node.LeftNode)); left.start(); Thread right = new Thread((o) => WalkTree(node.RightNode)); right.start(); left.join(); right.join(); ProcessItem(node.Value); Listing 3 - Funkcja przeglądania drzewa wykorzystująca wątki W powyższym rozwiązaniu wykorzystano składnie Lambda, dostępną w platformie.net od wersji 3.5, użyto także metody Join, aby rozwiązanie było funkcjonalnie porównywalne z rekurencją (czyli operacje na węzłach będą się odbywać w tej samej kolejności). Zmierzony czas to 14,116 s., czyli prawie 10 sekund szybciej. Podczas testowania uruchomiony menadżer zadań pokazywał stuprocentowe wykorzystanie mocy procesora, oto właśnie chodziło. Rozwiązanie wydaje się poprawne jednak należy dokładnie przemyśleć, takie podejście. Podczas obliczeń powstaje tyle wątków ile jest węzłów na których należy wykonać operację. W idealnym drzewie binarnym o wysokości 9 jest 511 węzłów, każdorazowe tworzenie wątku jest operacją bardzo czasochłonna ponieważ za każdym razem należy odwołać się do systemu, który przydzieli odpowiednie zasoby m.in. pamięć, licznik rozkazów itp. Ponadto przełączanie pomiędzy tak dużą liczbą wątków jest również czasochłonne. Jak można zrobić to lepiej? Tutaj z pomocą przychodzi Parallel Extensions, do takich właśnie celów stworzono tą bibliotekę. Rozwiązanie wykorzystujące nowe narzędzia i struktury danych, które zostaną opisane w dalszej części artykułu. Listing 4 prezentuje implementacje rozwiązania przy użyciu tej biblioteki. if (node == null) return; Task left = Task.Create((o) => WalkTree(node.LeftNode)); Task right = Task.Create((o) => WalkTree(node.RightNode)); left.wait(); right.wait(); ProcessItem(node.Value); Listing 4 - Funkcja przeglądania drzewa wykorzystująca bibliotekę Parallel Extensions Jak można zauważyć kod tej metody nie różni się znacząco od rozwiązania wielowątkowego. Słowo kluczowe Thread zastąpiono słowem Task, a metodę Join, metodą Wait. Zmierzony czas to 13,203 ms, czyli jedynie sekundę szybciej od rozwiązania wykorzystujące wątki. Największą 4

5 zaleta takiego podejścia jest pozyskana pamięć, która w niektórych przypadkach może mieć kluczowe znaczenie dla algorytmu przetwarzania. Czasy tych rozwiązań na maszynie 4 rdzeniowej, wykorzystanej podczas prezentacji Daniela Motha przedstawia Tabela 2, jak widać w tym przypadku otrzymano prawie 4 krotny wzrost wydajności. Rekurencja Wątki Zadania.NET ,022 s 5,801 s 3,918 s Tabela 2 - Czasy rozwiązań zadania przechodzenia po drzewie otrzymane przez Daniela Motha podczas prezentacji PDC Podejście której stosuje bezpośrednio obiekty typu Task, nazywane jest imperatywnym paralelizmem. 7. Deklaratywny paralelizm. Drugim podejściem do równoległości w bibliotece Parallel Extensions jest tzw. deklaratywny paralelizm. Polega on na wprowadzeni równoległości w zapytaniach LINQ [11]. Aby zobrazować taki przypadek należy prześledzić przykładowe zapytanie przedstawione na listingu 5. var q = from p in people where p.age < MaxAge && p.age > MinAge && p.state == STATE order by age ascending select p; Listing 5 - Przykładowe zapytanie LINQ Zapytanie to ma na celu wybranie w kolejności rosnącej tych obiektów z kolekcji people, które spełniają pewne zadane kryteria. Normalne wykonanie tego zapytanie polega na przeglądaniu kolekcji obiekt po obiekcie. Te obiekty które spełniają podane kryteria są zwracane. W przypadku kiedy kolekcja liczy tysiące obiektów operacja ta jest czasochłonna i może mieć bezpośredni wpływ na wydajność całego programu. Wprowadzanie równoległości w takim przypadku, może polegać na rozdzieleniu kolekcji na rozłączne zbiory i analizowanie ich osobno np. na innych rdzeniach. Po zakończeniu wyniki osobnych analiz powinny być łączone. Takie podejście właśnie wykorzystuje Parallel Extensions. Zmodyfikowane zapytanie prezentuje listing 6. var q = from p in people.asparallel() where p.age < MaxAge && p.age > MinAge && p.state == STATE order by age ascending select p; Listing 6 - Przykładowe zapytanie LINQ, zrównoleglone przy pomocy Parallel Extensions Jak widać równoległe zapytanie różni się od wersji sekwencyjnej jedynie jedną instrukcją - na obiekcie kolekcji wykonano dodatkowo metodę AsParallel. Powoduje to rozdzielenie kolekcji do analizy. Podział kolekcji może nie być równy i zależeć może od aktualnego obciążenia rdzeni np. jeden z rdzeni może dostać większą część kolekcji, niż inne rdzenie. Deklaratywny paralelizm wewnętrznie działa na fundamentach imperatywnego podejścia tj. tworzone są obiekty typu Task, które rozdziale są poprzez menadżera zadań. 8. Zasada działania. Podstawą kwestią jaką należy zrozumieć w Parallel Extensions jest sposób działania menadżera zadań tej biblioteki. Rysunek 1 przedstawia schematyczną budowie tego elementu na maszynie 4 rdzeniowej. Dokładną budowę menadżera zadań można opisać następująco: jeśli dany jest procesor o N rdzeniach, to dla każdego rdzenia tworzona jest grupa robocza (z ang. work group), zaznaczona na rysunku zielona elipsą z napisem WG). Każda taka grupa robocza posiada jednego aktywnego pracownika (z ang. worker). Pracownik to czerwona elipsa na obręczy doczepionej do grupy roboczej. Pracowników może być więcej, ale tylko jeden może być aktywny w danej chwili, tzn. nie w stanie zawieszenia. Pracownik wykonuje zadania na rdzeniu, do którego przypisana jest grupa robocza. Każda 5

6 grupa robocza posiada własną kolejkę zadań, które utożsamiane są z obiektami klasy Task tworzonymi w kodzie programu. Dodatkowo istnieje także globalna kolejka zadań. Grupa robocza przypisana jest do konkretnego rdzenia procesora i wszystkie obliczenia w ramach tej grupy wykonywane są w jednym wątku. Biblioteka Parallel Extensions tworzy tylko tyle wątków ile dostępnych jest rdzeni na maszynie na której aktualnie jest uruchomiona. Nie ma tutaj kosztu przełączania, ponieważ każdy rdzeń ma swój wątek. Rysunek 1 - Menadżer zadań Parallel Extensions Pierwsze tworzone zadania trafiają do globalnej kolejki zadań (z ang. global queue). Z tego miejsca zostają rozdzielone do poszczególnych kolejek grup roboczych. Podział ten nie musi być sprawiedliwy i może zależeć od aktualnego obciążenia rdzeni. Kiedy pracownik nie wykonuje żadnych zadań sięga do kolejki swojej grup roboczej i pobiera z niej pierwsze zadania do wykonania. Zakładając że w przykładowym programie do każdej lokalnej kolejki trafiły jakieś zadania, każdy pracownik sięga zadanie z lokalnej kolejki i zaczyna je wykonywać. W tym momencie na każdym rdzeniu wykonywany jest jeden wątek obsługujący któreś z zadań, a zużycie procesora wynosi 100%, czyli wykorzystywany jest cały potencjał maszyny. Co się stanie jeśli pracownik skończył wykonywać swoje zadanie a w kolejce jego grupy nie ma kolejnych zadań? Pracownik chce dalej pracować, zagląda więc do globalnej kolejki z nadzieją że znajdzie tam kolejne zadania do wykonania. Jeśli są tam nierozdzielone jeszcze zadania, pracownik pobiera jedno z nich i zajmuje się jego wykonywaniem. Co jednak jeśli tam również jest pusto? W tym momencie stosowany jest mechanizm kradzieży pracy (z ang. work stealing). Kradzież pracy polega na przeglądaniu przez pracownika wszystkich lokalnych kolejek sąsiednich grup roboczych w poszukiwaniu wolnego zadania do wykonania. Jeśli któraś z kolejek zawiera zadania, to te znajdujące się na końcu tej kolejki zostaje skradzione. Celem tego mechanizmu jest całkowite wykorzystanie wszystkich dostępnych jednostek obliczeniowych. W przykładzie o przechodzeniu drzewa, zadania tworzyły kolejne zadania do wykonania. Jeśli pracownik wykonuje zadanie, które tworzy nowe zadania, to te nowe zadania umieszczane są na początku kolejki grupy roboczej tego pracownika. Taka reguła ma bezpośredni związek z mechanizmem kradzieży pracy. Zadanie które zostało stworzone jako ostatnie, będzie wykonywane jako następne, ponieważ znajduje się na pierwszym miejscu kolejki. Dane potrzebne do wykonania tego zadania mogą być jeszcze trzymane w pamięci podręcznej rdzenia, więc dostęp do nich będzie o wiele szybszy niż do kolejnych zadań z kolejki. Z kolei zadania na końcu kolejki były stworzone najwcześniej, więc dane o nich mogły zostać wyrzucone z pamięci podręcznej. Właśnie te zadania są kradzione podczas działania mechanizmu kradzieży pracy. Przy takiej kradzieży prawdopodobnie nie potrzebna będzie synchronizacja pomiędzy rdzeniami ponieważ dane o zadaniach zostały wyrzucone z pamięci podręcznych. Zadania mogą się zablokować czekając na zakończenie wykonywania innych zadań, do tego celu służy metoda Wait. Menadżer zadań po wykryciu że zadanie się zablokowało, zamraża 6

7 pracownika który je wykonywał, a grupa robocza tego pracownika tworzy kolejnego, który staje się jedynym aktywnym pracownikiem. Pracownik ten wykonuje kolejne zadania znajdujące się w lokalnej kolejce lub kradnie je innym grupom roboczym. Należy zaznaczyć, że tworzenie nowego pracownika nie wiąże się z tworzeniem nowego wątku. Cała grupa robocza oraz wszyscy jej pracownicy wykonują się w tym samym wątku. Kiedy zadanie się odblokowuje oczekuje na zakończenie zadania aktualnego pracownika i jest wykonywane poza kolejnością tj. przed zadaniami czekającymi w kolejce lokalnej grupy roboczej. 9. Podsumowanie. Parallel Extensions jest podstawowa biblioteką programowania równoległego dla platformy.net i kierowana jest głownie na maszyny wieloprocesorowe lub wielordzeniowe. Nowe podejście stanowi godną alternatywę dla dotychczasowego, wielowątkowego modelu programowania. Główną zaletą tej biblioteki nie jest szybkość przetwarzania zadań, oszczędność pamięć, przenośność oraz skalowalność. W erze procesorów wielordzeniowych, stosowanie tej biblioteki staje się obowiązkowe. Bibliografia. [1] Gordon E. Moore: Cramming more components onto integrated circuits, Electronics Magazine 38 (8), 19/04/1965, ftp://download.intel.com/museum /Moores_Law/Articles-Press_Releases/ Gordon_Moore_1965_Article.pdf [2] Introducing to Intel s 32nm Process Technology, Whitepaper, 2009, m/westmere/intel_32nm_overview.pdf [3] Intel News Fact Sheet, Intel Developer Forum 22nm News Facts, 2009, ts/idffall_2009/pdfs/22nm_factsheet.pdf [4] Intel Core Duo Processor Family milyid=22731 [5] Intel Core Solo Processor Family milyid=18995 [6] Specyfikacja procesora Intel Core i7-950 Processor, [7] Hyper - Threading Technology, Intel Technology Journal, Volume 06, Issue 01, 14 luty 2002, ISSN X, ftp://download.intel.com/technology/itj/2002/ volume06issue01/vol6iss1_hyper_threading_t echnology.pdf [8] Microsoft Research [9].NET Framework 4.0, Microsoft Software Developer Network, [10] Parallel Programming for Managed Developers with the Next Version of Microsoft Visual Studio, Daniel Moth, Professional Developer Conference 2008, [11] LINQ, Microsoft Software Developer Network, 7

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

Nowinkach technologicznych procesorów

Nowinkach technologicznych procesorów Elbląg 22.04.2010 Nowinkach technologicznych procesorów Przygotował: Radosław Kubryń VIII semestr PDBiOU 1 Spis treści 1. Wstęp 2. Intel Hyper-Threading 3. Enhanced Intel Speed Technology 4. Intel HD Graphics

Bardziej szczegółowo

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

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1 Współbieżność i równoległość w środowiskach obiektowych Krzysztof Banaś Obliczenia równoległe 1 Java Model współbieżności Javy opiera się na realizacji szeregu omawianych dotychczas elementów: zarządzanie

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

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

LINQ TO XML. Autor ćwiczenia: Marcin Wolicki

LINQ TO XML. Autor ćwiczenia: Marcin Wolicki LINQ TO XML Celem ćwiczenia jest zapoznanie się z możliwościami przetwarzania dokumentów XML na platformie.net. W toku zadania zostaną przedstawione dwie technologie: LINQ TO XML i XPath. Autor ćwiczenia:

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

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

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

msgbox("akcja: Początek, argument: " + argument.tostring()); Thread.Sleep(1000); //opóźnienie msgbox("akcja: Koniec"); return DateTime.Now.

msgbox(akcja: Początek, argument:  + argument.tostring()); Thread.Sleep(1000); //opóźnienie msgbox(akcja: Koniec); return DateTime.Now. Programowanie asynchroniczne. Operator await i modyfikator async Język C# 5.0 wyposażony został w nowy operator await, ułatwiający synchronizację dodatkowych zadań uruchomionych przez użytkownika. Poniżej

Bardziej szczegółowo

Języki i paradygmaty programowania doc. dr inż. Tadeusz Jeleniewski

Języki i paradygmaty programowania doc. dr inż. Tadeusz Jeleniewski Języki i paradygmaty programowania doc. dr inż. Tadeusz Jeleniewski e-mail: t.jeleniewski@neostrada.pl tadeusz.jeleniewski@pwr.wroc.pl http://www.tjeleniewski.wstt.edu.pl Treści kształcenia: Paradygmaty

Bardziej szczegółowo

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Konstruktory Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasę Prostokat: class

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

Wykład 4. Klasa List Kolejki Stosy Słowniki

Wykład 4. Klasa List Kolejki Stosy Słowniki Wykład 4 Klasa List Kolejki Stosy Słowniki Klasa List Poważną niedogodnością tablic jako kolekcji danych jest fakt, że muszą one mieć stały rozmiar. Programista musi wiedzieć z góry ile miejsca powinien

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

Metody Metody, parametry, zwracanie wartości

Metody Metody, parametry, zwracanie wartości Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Metody Metody, parametry, zwracanie wartości Metody - co to jest i po co? Metoda to wydzielona część klasy, mająca

Bardziej szczegółowo

Jak ujarzmić hydrę czyli programowanie równoległe w Javie. dr hab. Piotr Bała, prof. UW ICM Uniwersytet Warszawski

Jak ujarzmić hydrę czyli programowanie równoległe w Javie. dr hab. Piotr Bała, prof. UW ICM Uniwersytet Warszawski Jak ujarzmić hydrę czyli programowanie równoległe w Javie dr hab. Piotr Bała, prof. UW ICM Uniwersytet Warszawski Prawo Moore a Ekonomicznie optymalna liczba tranzystorów w układzie scalonym zwiększa się

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

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Ćwiczenie 1. Kolejki IBM Message Queue (MQ) Ćwiczenie 1. Kolejki IBM Message Queue (MQ) 1. Przygotowanie Przed rozpoczęciem pracy, należy uruchomić "Kreator przygotowania WebSphere MQ" oraz przejść przez wszystkie kroki kreatora, na końcu zaznaczając

Bardziej szczegółowo

Stworzenie klasy nie jest równoznaczne z wykorzystaniem wielowątkowości. Uzyskuje się ją dopiero poprzez inicjalizację wątku.

Stworzenie klasy nie jest równoznaczne z wykorzystaniem wielowątkowości. Uzyskuje się ją dopiero poprzez inicjalizację wątku. Laboratorium 7 Wstęp Jednym z podstawowych własności Javy jest wielowątkowość. Wiąże się to z możliwością współbieżnego wykonywania różnych operacji w ramach pojedynczej wirtualnej maszyny Javy (JVM).

Bardziej szczegółowo

Języki i paradygmaty programowania - 1

Języki i paradygmaty programowania - 1 doc. dr inż. Tadeusz Jeleniewski e-mail: t.jeleniewski@neostrada.pl tadeusz.jeleniewski@pwr.edu.pl http://www.tjeleniewski.wstt.edu.pl Cele przedmiotu Umiejętność zastosowania i oceny przydatności paradygmatów

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

Leszek Stasiak Zastosowanie technologii LINQ w

Leszek Stasiak Zastosowanie technologii LINQ w Leszek Stasiak Zastosowanie technologii LINQ w C# 1. Wstęp - połączenie Do naszych zadań będziemy używać Microsoft Visual Studio 2010. Stwórzmy nowy projekt Windows Form Application. Mając do dyspozycji

Bardziej szczegółowo

Db4o obiektowa baza danych wersja.net

Db4o obiektowa baza danych wersja.net Wstęp Db4o obiektowa baza danych wersja.net Db4o (database for objects) to obiektowa baza danych na platformę Java i.net. Pełna wersja bazy db4o jest dostępna na dwóch licencjach: open source: pozwala

Bardziej szczegółowo

Grzegorz Ruciński. Warszawska Wyższa Szkoła Informatyki 2011. Promotor dr inż. Paweł Figat

Grzegorz Ruciński. Warszawska Wyższa Szkoła Informatyki 2011. Promotor dr inż. Paweł Figat Grzegorz Ruciński Warszawska Wyższa Szkoła Informatyki 2011 Promotor dr inż. Paweł Figat Cel i hipoteza pracy Wprowadzenie do tematu Przedstawienie porównywanych rozwiązań Przedstawienie zalet i wad porównywanych

Bardziej szczegółowo

Koło zainteresowań Teleinformatyk XXI wieku

Koło zainteresowań Teleinformatyk XXI wieku Koło zainteresowań Teleinformatyk XXI wieku PROJEKT 3 Temat: Aplikacja Interfejsu MS Kinect Imię i nazwisko ucznia: Kamil Kruszniewski Klasa: III TiA Numer z dziennika: 14 Suwałki, Kwiecień 2013 Strona

Bardziej szczegółowo

Procesory. Schemat budowy procesora

Procesory. Schemat budowy procesora Procesory Procesor jednostka centralna (CPU Central Processing Unit) to sekwencyjne urządzenie cyfrowe którego zadaniem jest wykonywanie rozkazów i sterowanie pracą wszystkich pozostałych bloków systemu

Bardziej szczegółowo

Wprowadzenie do programowania

Wprowadzenie do programowania do programowania ITA-104 Wersja 1 Warszawa, Wrzesień 2009 ITA-104 do programowania Informacje o kursie Zakres tematyczny kursu Opis kursu Kurs przeznaczony jest do prowadzenia przedmiotu do programowania

Bardziej szczegółowo

SQL SERVER 2012 i nie tylko:

SQL SERVER 2012 i nie tylko: SQL SERVER 2012 i nie tylko: Wstęp do planów zapytań Cezary Ołtuszyk coltuszyk.wordpress.com Kilka słów o mnie Starszy Administrator Baz Danych w firmie BEST S.A. (Bazy danych > 1TB) Konsultant z zakresu

Bardziej szczegółowo

Klasy abstrakcyjne i interfejsy

Klasy abstrakcyjne i interfejsy Klasy abstrakcyjne i interfejsy Streszczenie Celem wykładu jest omówienie klas abstrakcyjnych i interfejsów w Javie. Czas wykładu 45 minut. Rozwiązanie w miarę standardowego zadania matematycznego (i nie

Bardziej szczegółowo

Zasady programowania Dokumentacja

Zasady programowania Dokumentacja Marcin Kędzierski gr. 14 Zasady programowania Dokumentacja Wstęp 1) Temat: Przeszukiwanie pliku za pomocą drzewa. 2) Założenia projektu: a) Program ma pobierać dane z pliku wskazanego przez użytkownika

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

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1 1 LINQ 1 1. Cel zajęć Celem zajęć jest zapoznanie się z technologią LINQ oraz tworzeniem trójwarstwowej aplikacji internetowej. 2. Zadanie Proszę przygotować aplikację WWW, która: będzie pozwalała na generowanie

Bardziej szczegółowo

Systemy operacyjne. Zajęcia 11. Monitory

Systemy operacyjne. Zajęcia 11. Monitory Systemy operacyjne. Zajęcia 11. Monitory 1. Monitor to mechanizm zamykający całą pamięć wspólną i synchronizację w pojedynczym module. 2. Monitor posiada całą pamięć wspólną jako część 'prywatną': dostępu

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

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

Spis treści. Rozdział 1. Aplikacje konsoli w stylu ANSI C i podstawowe operacje w Visual C++... 7

Spis treści. Rozdział 1. Aplikacje konsoli w stylu ANSI C i podstawowe operacje w Visual C++... 7 Spis treści Wprowadzenie...n...n... 5 Jak korzystać z tej książki?...t... 6 Rozdział 1. Aplikacje konsoli w stylu ANSI C i podstawowe operacje w Visual C++... 7 Podsumowanie...t...t...15 Rozdział 2. Rozdział

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

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

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy) Rok akademicki 2012/2013, Wykład nr 2 2/25 Plan wykładu nr 2 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013

Bardziej szczegółowo

Akademia Górniczo-Hutnicza im. Stanisława Staszica w Krakowie. dr inż. Adam Piórkowski. Jakub Osiadacz Marcin Wróbel

Akademia Górniczo-Hutnicza im. Stanisława Staszica w Krakowie. dr inż. Adam Piórkowski. Jakub Osiadacz Marcin Wróbel Akademia Górniczo-Hutnicza im. Stanisława Staszica w Krakowie Problem magazynowania i przetwarzania wielkoformatowych map i planów geologicznych. Promotor: dr inż. Adam Piórkowski Autorzy: Jakub Osiadacz

Bardziej szczegółowo

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut. Wyjątki Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut. Wydaje się, że żaden użytkownik oprogramowania nie lubi, kiedy stosowany program nagle zawiesza się,

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 2 Marcin Młotkowski 4 marca 2015 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 47 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie;

Bardziej szczegółowo

NOWE TRENDY ROZWOJU MIKROPROCESORÓW

NOWE TRENDY ROZWOJU MIKROPROCESORÓW NOWE TRENDY ROZWOJU MIKROPROCESORÓW Marcin LORENC, Krzysztof CEGIELSKI Streszczenie: Celem artykułu jest zaprezentowanie kierunków rozwoju mikrokontrolerów. Przedstawiono krótką historię procesorów, pojęcie

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

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

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

SZYBKO ZROZUMIEĆ VISUAL BASIC 2012 Artur Niewiarowski -

SZYBKO ZROZUMIEĆ VISUAL BASIC 2012 Artur Niewiarowski - S t r o n a 2 SZYBKO ZROZUMIEĆ VISUAL BASIC 2012 Artur Niewiarowski - Copyright by Artur Niewiarowski 2013 ISBN: 978-83-937802-0-4 - Artur Niewiarowski Self-Publishing - All rights reserved. Wszelkie prawa

Bardziej szczegółowo

Architektura komputera wg Neumana

Architektura komputera wg Neumana PROCESOR Architektura komputera wg Neumana Uproszczony schemat procesora Podstawowe elementy procesora Blok rejestrów Blok ALU Dekoder kodu rozkazowego Układ sterujący Magistrala procesora Cykl pracy procesora

Bardziej szczegółowo

SYSTEMY OPERACYJNE WYKLAD 4 - zarządzanie pamięcią

SYSTEMY OPERACYJNE WYKLAD 4 - zarządzanie pamięcią Wrocław 2007 SYSTEMY OPERACYJNE WYKLAD 4 - zarządzanie pamięcią Paweł Skrobanek C-3, pok. 323 e-mail: pawel.skrobanek@pwr.wroc.pl www.equus.wroc.pl/studia.html 1 PLAN: 2. Pamięć rzeczywista 3. Pamięć wirtualna

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

Kompletna dokumentacja kontenera C++ vector w - http://www.cplusplus.com/reference/stl/vector/

Kompletna dokumentacja kontenera C++ vector w - http://www.cplusplus.com/reference/stl/vector/ STL, czyli o co tyle hałasu W świecie programowania C++, hasło STL pojawia się nieustannie i zawsze jest o nim głośno... często początkujące osoby, które nie znają STL-a pytają się co to jest i czemu go

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

Wykład 12. Programowanie serwera MS SQL 2005 w C#

Wykład 12. Programowanie serwera MS SQL 2005 w C# Wykład 12 Programowanie serwera MS SQL 2005 w C# Budowa procedur składowanych w C# Budowa funkcji składowanych w C# Wykorzystanie funkcji składowanych w C# po stronie klienta Tworzenie typów definiowanych

Bardziej szczegółowo

To sposób w jaki użytkownik wchodzi w interakcje z systemem. Środowisko graficzne używa kombinacji graficznych elementów(przyciski, okna, menu) i

To sposób w jaki użytkownik wchodzi w interakcje z systemem. Środowisko graficzne używa kombinacji graficznych elementów(przyciski, okna, menu) i Aleksandra Dębiecka To sposób w jaki użytkownik wchodzi w interakcje z systemem. To sposób w jaki użytkownik wchodzi w interakcje z systemem. Środowisko graficzne używa kombinacji graficznych elementów(przyciski,

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

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

Wykład 3. Procesy i wątki. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

Wykład 3. Procesy i wątki. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB Wykład 3 Procesy i wątki Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB Pojęcie procesu Program = plik wykonywalny na dysku Proces = uruchomiony i wykonywany program w pamięci

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

Diagramy czynności Na podstawie UML 2.0 Tutorial

Diagramy czynności Na podstawie UML 2.0 Tutorial Diagramy czynności Na podstawie UML 2.0 Tutorial http://sparxsystems.com.au/resources/uml2_tutorial/ Zofia Kruczkiewicz 1 Diagramy czynności 1. Diagramy czyności UML http://sparxsystems.com.au/resources/uml2_tutorial/

Bardziej szczegółowo

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych Obiekty reprezentują pewne pojęcia, przedmioty, elementy rzeczywistości. Obiekty udostępniają swoje usługi: metody operacje,

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

1. Od czego zacząć? - Instalacja środowiska pracy

1. Od czego zacząć? - Instalacja środowiska pracy 1. Od czego zacząć? - Instalacja środowiska pracy 1.1 Jeśli mamy komputer z Windows 8.1 Prof. lub nowszy W takim przypadku potrzebne nam będą tylko aktualne aktualizacje no i oczywiście środowisko pracy.

Bardziej szczegółowo

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main. Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo

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

akademia androida Service, BroadcastReceiver, ContentProvider część IV

akademia androida Service, BroadcastReceiver, ContentProvider część IV akademia androida Service, BroadcastReceiver, ContentProvider część IV agenda 1. BroadcastReceiver 2. Service 3. ContentProvider 4. Zadanie 1. 5. Zadanie 2 (domowe). 1. BroadcastReceiver BroadcastReceiver

Bardziej szczegółowo

Zaawansowany kurs języka Python

Zaawansowany kurs języka Python Wykład 6. 6 listopada 2015 Plan wykładu Callable objects 1 Callable objects 2 3 Plan wykładu Callable objects 1 Callable objects 2 3 Callable objects Wszystko jest obiektem. Callable objects Wszystko jest

Bardziej szczegółowo

Wykrywanie twarzy na zdjęciach przy pomocy kaskad

Wykrywanie twarzy na zdjęciach przy pomocy kaskad Wykrywanie twarzy na zdjęciach przy pomocy kaskad Analiza i przetwarzanie obrazów Sebastian Lipnicki Informatyka Stosowana,WFIIS Spis treści 1. Wstęp... 3 2. Struktura i funkcjonalnośd... 4 3. Wyniki...

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

Zwrot z inwestycji w IT: prawda czy mity

Zwrot z inwestycji w IT: prawda czy mity Zwrot z inwestycji w IT: prawda czy mity Inwestycje w technologie IT 1 muszą podlegać takim samym regułom oceny, jak wszystkie inne: muszą mieć ekonomiczne uzasadnienie. Stanowią one koszty i jako takie

Bardziej szczegółowo

Modelowanie hierarchicznych struktur w relacyjnych bazach danych

Modelowanie hierarchicznych struktur w relacyjnych bazach danych Modelowanie hierarchicznych struktur w relacyjnych bazach danych Wiktor Warmus (wiktorwarmus@gmail.com) Kamil Witecki (kamil@witecki.net.pl) 5 maja 2010 Motywacje Teoria relacyjnych baz danych Do czego

Bardziej szczegółowo

Współbieżność w środowisku Java

Współbieżność w środowisku Java Współbieżność w środowisku Java Wątki i ich synchronizacja Zagadnienia Tworzenie wątków Stany wątków i ich zmiana Demony Synchronizacja wątków wzajemne wykluczanie oczekiwanie na zmiennych warunkowych

Bardziej szczegółowo

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run(). Wątki Streszczenie Celem wykładu jest wprowadzenie do obsługi wątków w Javie. Czas wykładu 45 minut. Definiowanie wątków jako klas potomnych Thread Nadpisanie metody run(). class Watek extends Thread public

Bardziej szczegółowo

Uwaga! Upadek! Opis zadania konkursowego

Uwaga! Upadek! Opis zadania konkursowego Uwaga! Upadek! Opis zadania konkursowego Zadanie Opracowanie algorytmu automatycznie rozpoznającego upadek osoby na nagraniu wideo i wdrożenie stworzonego rozwiązania jako usługi na superkomputerowej platformie

Bardziej szczegółowo

Swing Application Framework czyli tam i z powrotem. Copyright Piotr Kochański & Erudis, www.erudis.pl

Swing Application Framework czyli tam i z powrotem. Copyright Piotr Kochański & Erudis, www.erudis.pl Swing Application Framework czyli tam i z powrotem Informacje o mnie Imię: Piotr Nazwisko: Kochański Praca: programista Java, PHP + kilka egzotycznych wynalazków Miejsce pracy: firma Erudis (prawdopodobnie

Bardziej szczegółowo

Obliczenia równoległe i rozproszone w JAVIE. Michał Kozłowski 30 listopada 2003

Obliczenia równoległe i rozproszone w JAVIE. Michał Kozłowski 30 listopada 2003 Obliczenia równoległe i rozproszone w JAVIE Michał Kozłowski 30 listopada 2003 Wątki w JAVIE Reprezentacja wątków jako obiektów Uruchamianie i zatrzymywanie wątków Realizacja wątków Ograniczenia Mechanizmy

Bardziej szczegółowo

Spis treúci. Księgarnia PWN: Krzysztof Wojtuszkiewicz - Urządzenia techniki komputerowej. Cz. 1. Przedmowa... 9. Wstęp... 11

Spis treúci. Księgarnia PWN: Krzysztof Wojtuszkiewicz - Urządzenia techniki komputerowej. Cz. 1. Przedmowa... 9. Wstęp... 11 Księgarnia PWN: Krzysztof Wojtuszkiewicz - Urządzenia techniki komputerowej. Cz. 1 Spis treúci Przedmowa... 9 Wstęp... 11 1. Komputer PC od zewnątrz... 13 1.1. Elementy zestawu komputerowego... 13 1.2.

Bardziej szczegółowo

Biuletyn techniczny. CDN OPT!MA 8.5 Wskazówki dotyczące instalacji programu. Copyright 2006 COMARCH SA

Biuletyn techniczny. CDN OPT!MA 8.5 Wskazówki dotyczące instalacji programu. Copyright 2006 COMARCH SA Biuletyn techniczny CDN OPT!MA 8.5 Wskazówki dotyczące instalacji programu Copyright 2006 COMARCH SA Spis treści 1 SPIS TREŚCI...2 2 DRIVER ODBC POWODUJĄCY BŁĄD PRZY WYKONYWANIU WYDRUKÓW REPORT WRITER

Bardziej szczegółowo

Wykład 1. Systemy przekazywania wiadomości z założeniem bezbłędności działania

Wykład 1. Systemy przekazywania wiadomości z założeniem bezbłędności działania Mariusz Juszczyk 16 marca 2010 Seminarium badawcze Wykład 1. Systemy przekazywania wiadomości z założeniem bezbłędności działania Wstęp Systemy przekazywania wiadomości wymagają wprowadzenia pewnych podstawowych

Bardziej szczegółowo

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1. Wielowątkowość Programowanie w środowisku rozproszonym. Wykład 1. Informacje organizacyjne Wymiar godzin: W-30, LAB-15 Zaliczenie wykonanie kilku programów i ich zaliczenie (w trakcie zajęć laboratoryjnych)

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

Badania operacyjne: Wykład Zastosowanie kolorowania grafów w planowaniu produkcji typu no-idle

Badania operacyjne: Wykład Zastosowanie kolorowania grafów w planowaniu produkcji typu no-idle Badania operacyjne: Wykład Zastosowanie kolorowania grafów w planowaniu produkcji typu no-idle Paweł Szołtysek 12 czerwca 2008 Streszczenie Planowanie produkcji jest jednym z problemów optymalizacji dyskretnej,

Bardziej szczegółowo

Rekurencja (rekursja)

Rekurencja (rekursja) Rekurencja (rekursja) Rekurencja wywołanie funkcji przez nią samą wewnątrz ciała funkcji. Rekurencja może być pośrednia funkcja jest wywoływana przez inną funkcję, wywołaną (pośrednio lub bezpośrednio)

Bardziej szczegółowo

REFERAT PRACY DYPLOMOWEJ

REFERAT PRACY DYPLOMOWEJ REFERAT PRACY DYPLOMOWEJ Temat pracy: Projekt i implementacja środowiska do automatyzacji przeprowadzania testów aplikacji internetowych w oparciu o metodykę Behavior Driven Development. Autor: Stepowany

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

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float

Bardziej szczegółowo

Programowanie.NET - kurs zaawansowany

Programowanie.NET - kurs zaawansowany Kod szkolenia: Tytuł szkolenia: NET/ADV Programowanie.NET - kurs zaawansowany Dni: 4 Opis: Adresaci szkolenia Szkolenie kierowane jest do programiostów chcących pogłębić swoją wiedzę z zakresu platformy.net

Bardziej szczegółowo

Języki i Techniki Programowania II. Wykład 7. Współbieżność 1

Języki i Techniki Programowania II. Wykład 7. Współbieżność 1 Języki i Techniki Programowania II Wykład 7 Współbieżność 1 Programy, Procesy, Wątki Program to zestaw instrukcji do wykonania, dane do przetworzenia, mechanizmy sterujące (stos) Proces w komputerze to

Bardziej szczegółowo

Programowanie funkcyjne wprowadzenie Specyfikacje formalne i programy funkcyjne

Programowanie funkcyjne wprowadzenie Specyfikacje formalne i programy funkcyjne Programowanie funkcyjne wprowadzenie Specyfikacje formalne i programy funkcyjne dr inż. Marcin Szlenk Politechnika Warszawska Wydział Elektroniki i Technik Informacyjnych m.szlenk@elka.pw.edu.pl Paradygmaty

Bardziej szczegółowo

11.6 Klasa do obsługi liczb wymiernych

11.6 Klasa do obsługi liczb wymiernych 246 11.6 Klasa do obsługi liczb wymiernych Klasa do obsługi liczb wymiernych, którą teraz zaprojektujemy w celu zilustrowania korzyści wynikających z programowania obiektowego, służy do zgrabnego wykonywania

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 Wydajność obliczeń Dla wielu programów wydajność obliczeń można traktować jako wydajność pobierania z pamięci

Bardziej szczegółowo

Poziom kwalifikacji: I stopnia. Liczba godzin/tydzień: 2W E, 2L PRZEWODNIK PO PRZEDMIOCIE

Poziom kwalifikacji: I stopnia. Liczba godzin/tydzień: 2W E, 2L PRZEWODNIK PO PRZEDMIOCIE Nazwa przedmiotu: PROGRAMOWANIE ROZPROSZONE I RÓWNOLEGŁE Distributed and parallel programming Kierunek: Forma studiów: Informatyka Stacjonarne Rodzaj przedmiotu: moduł specjalności obowiązkowy: Sieci komputerowe

Bardziej szczegółowo

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno Instrukcja laboratoryjna 5 Podstawy programowania 2 Temat: Drzewa binarne Przygotował: mgr inż. Tomasz Michno 1 Wstęp teoretyczny Drzewa są jedną z częściej wykorzystywanych struktur danych. Reprezentują

Bardziej szczegółowo

Bibliografia: pl.wikipedia.org www.intel.com. Historia i rodzaje procesorów w firmy Intel

Bibliografia: pl.wikipedia.org www.intel.com. Historia i rodzaje procesorów w firmy Intel Bibliografia: pl.wikipedia.org www.intel.com Historia i rodzaje procesorów w firmy Intel Specyfikacja Lista mikroprocesorów produkowanych przez firmę Intel 4-bitowe 4004 4040 8-bitowe x86 IA-64 8008 8080

Bardziej szczegółowo

Język Java wątki (streszczenie)

Język Java wątki (streszczenie) Programowanie współbieżna Język Java wątki (streszczenie) Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski @ pwr.wroc.pl Języka Java wątki Autor:

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

5.4. Tworzymy formularze

5.4. Tworzymy formularze 5.4. Tworzymy formularze Zastosowanie formularzy Formularz to obiekt bazy danych, który daje możliwość tworzenia i modyfikacji danych w tabeli lub kwerendzie. Jego wielką zaletą jest umiejętność zautomatyzowania

Bardziej szczegółowo