Biblioteka PCJ w wybranych zastosowaniach matematycznych - FFT i grafy Kroneckera

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

Download "Biblioteka PCJ w wybranych zastosowaniach matematycznych - FFT i grafy Kroneckera"

Transkrypt

1 Biblioteka PCJ w wybranych zastosowaniach matematycznych - FFT i grafy Kroneckera Toruńska Studencka Konferencja Matematyki Stosowanej M. Ryczkowska, Ł. Górski, M. Nowicki, P. Bała Uniwersytet Mikołaja Kopernika w Toruniu, Uniwersytet Warszawski kwietnia 2014 Streszczenie U podstaw bardziej zaawansowanych problemów obliczeniowych - takich jak wyrafinowana analiza danych obrazowych czy rekonstrukcja modelu sieci społecznościowych - leżą bardziej fundamentalne zagadnienia. Związane są chociażby z wydajnym obliczaniem dyskretnej transformaty Fouriera oraz zwartej reprezentacji grafów. Opracowywane przez nas rozwiązania wykorzystujące bibliotekę PCJ bardzo dobrze realizują te zadania. W niniejszej pracy przedstawiamy najważniejsze własności i założenia biblioteki PCJ, a także zaprezentujemy wyniki testów wydajnościowych dla FFT oraz obliczania zwartej reprezentacji grafu - CSR. 1 Wstęp Zaobserwować można obecnie rewolucyjną zmianę w metodyce tworzenia oprogramowania wywołaną przez pojawienie się sprzętu komputerowego intensywnie korzystającego z wielowątkowego modelu przetwarzania. Z tego też względu tradycyjne rozwiązania, jak OpenMP czy MPI są niewystarczające i konieczne jest opracowanie nowych paradygmatów i narzędzi software owych umożliwiających wykorzystanie możliwości przetwarzania wielowątkowego i rozproszonego. Wielokrotnie zauważono więc, że cały czas brakuje odpowiednio wysokopoziomowych abstrackji i konstrukcji, które ułatwiłyby programowanie[1]. Tego rodzaju braki dotyczą zarówno systemów równoległych, jak i przede wszystkim rozproszonych. Języki PGAS (Partitioned Global Address Space) mogłyby znakomicie zmitygować wskazane braki, zapewniając zarówno wygodne tworzenie aplikacji tak w środowisku równoległym, jak i rozproszonym, oferując za każdym razem uniwersalne abstrakcje programistyczne. Języki należące do tej kategorii zakładają bowiem, że pamięć zostanie podzielona pomiędzy wszystkie wątki wykonania. Domyślnie wszystkie zmienne w określonym obszarze pamięci są prywatne dla danego wątku. Programista może je jednak oznaczyć jako dzielone, a tym samym udostępnić innym wątkom do odczytu albo modyfikacji. Niektóre z nowoopracowanych języków, które implementują ten zyskujący na popularności paradygmat to X10 [2] i Chapel [3]. Elementy modelu PGAS zostały wprowadzone w nowej wersji standardu Fortranu, jako coarrays [4]. Dodatkowo, prowadzone są prace na językiem CoArray Fortran 2.0, w celu dalszego ulepszenia jego możliwości w ramach modelu SPMD [5]. Dialekt C implementujący model PGAS nosi nazwę UPC [6].

2 Celem niniejszego opracowania jest zademonstrowanie użyteczności rozszerzenia PGAS dla języka Java, które jest obecnie opracowywane przez autorów niniejszego opracowania: biblioteki PCJ [27]. Java jest językiem przenośnym, zapewniającym warstwę abstrakcji nad sprzętem komputerowym i posiadającym dużą grupę użytkowników. Wybraliśmy Javę ze względu na jej przenośność i rozległą grupę użytkowników. Programy napisane w Javie mają potencjalnie dłuższy cykl życia w porównaniu do sprzętu, na którym są wykonywane, a ich wydajność może być zwiększona po prostu poprzez przeniesienie na bardziej zaawansowany system komputerowy [7]. Język jest łatwy w użyciu dzięki odśmiecaniu, statycznej typizacji czy brakowi wskaźników. Podobnie, jak w wypadku innych języków, również dla Javy zaprojektowano rozwiązania wzmacniające jej równoległość. Wskazać należy na projekty takie, jak Parallel Java [8] i projekt Java Grande [9] [10] (które jednak nie zyskały szerszej popularności), Titanium [11] czy ProActive [12] (niestety ten ostatni miewa problemy z wydajnością ze względu na nieefektywne mechanizmy serializacji). Należy także wspomnieć równoległe strumienie wprowadzone w nowej wersji Javy [13]. Nasze rozwiązanie biblioteka PGAS dla Javy - charakteryzuje się dużą przenośnością, pozostaje więc w duchu Javy. W odróżnieniu od innych rozwiązań nie modyfikuje składni języka ani nie implementauje własnej wersji maszyny wirtualnej, nie opiera się też na specjalnych preprocesorach. Biblioteka PCJ jest oparta na czystej Javie 7 i nie wymaga żadnych zewnętrznych bibliotek do działania. Pozwala to też na łatwą migrację do następnych wersji języka. Zapewnienie przenośności naszego rozwiązania nie zostało okupione koncesjami co do wydajności[14] [15]. W następnej części opracowania opisujemy bibliotekę PCJ i podajemy przykłady jej wykorzystania. Zainteresowany dalszymi szczegółami użytkownik powinien sięgnąć do podręcznika użytkownika [16]. Końcowe rozdziały prezentują informacje o przykładowych zastosowaniach biblioteki: do obliczania FFT i postaci CSR (Compressed Sparse Row) grafu. 2 Biblioteka PCJ W bibliotece PCJ wątki reprezentowane są przez klasy implementujące interfejs StartPoint (listing 1). Metoda main() odpowiada metodzie run() standardowej klasy Thread. public interface StartPoint { public void main(); Listing 1. Interfejs StartPoint Domyślnie, zgodnie z założeniami modelu PGAS, wszystkie pola są lokalne dla wątku. Ich uwspólnienie następuje poprzez użycie Klasa, które korzysta ze zmiennych współdzielonych musi też dziedziczyć z abstrakcyjnej klasy Storage (por. listing 2; przykładowe kod używa też metod myid() oraz numthreads() w celu pobrania liczby identyfikującej wątek oraz liczby wszystkich wątków). class Example extends Storage implements StartPoint { private double private int[] table; public void main () { System.out.println("Thread #" + PCJ.myNode() + " of" + PCJ.numNodes() + " threads."); Listing 2. Aplikacja wyświetlająca liczę wątków PCJ

3 Rozpoczęcie obliczeń jest bardzo proste i sprowadza się do wywołania metody deploy(), której można przekazać identyfikatory maszyn, na których mają zostać uruchomione obliczenia. Mechanizm ten pozwala na uruchomienie programu w różnych scenariuszach użycia, jak wiele wątków w pojedynczej maszynie wirtualnej albo wiele maszyn wirtualnych na pojedynczym węźle fizycznym. Przykładowo, w listingu 3. uruchomiono trzy wątki lokalne oraz dodatkowy - zdalny (w domenie example.com). Dwa wątki lokalne korzystające z tego samego domyślnego numeru portu dla komunikacji zostaną uruchomione na tej samej maszynie wirtualnej; w wypadku pozostałych dwóch uruchomione zostaną dodatkowe. PCJ.deploy( Example.class, // StartPoint Example.class, // Storage new String[] { // Lista maszyn "localhost", "localhost", "example.com", " :3003" ); Listing 3. Przykład wykorzystania metody deploy() Podstawowe operacje - odczyt i modyfikacje zmiennej dzielonej - zaimplementowano jako operacje get() i put(). Ich argumenty to: identyfikator wątku docelowego, etykieta zmiennej dzielonej (domyślnie określona przez jej nazwę), a w wypadku operacji put() - nowa wartość zmiennej. Składnia przedstawiona jest w listingu 4. Tamże taskid oznacza identyfikator zdalnego wątku (którego zmienna dzielona jest odczytywana bądź modyfikowana), variablename to nazwa zmiennej w klasie Storage, variabledata to przesyłane dane. Parametr indexes... jest opcjonalny i stosowany wyłącznie do tablic: wskazuje indeksy elementów, które mają być przesłane. PCJ.put(int taskid, String variablename, Object variabledata, int indexes...) PCJ.get(int taskid, String variablename, int indexes...) Listing 4. Składnia metod get() i put() W przykładowym listingu 5. wartość całkowita 42 zapisywana jest do zmiennej table w wątku o nr 4. W następnej linii cała tablica pobrana jest z wątku nr 6 (komunikacja synchroniczna). W dalszej części listingu 6. wykorzystana jest komunikacja asynchroniczna. PCJ.put(4, "table", 42, 10); int[] t = PCJ.get(6, "table"); FutureObject resp; resp = PCJ.getFutureObject(7, "table"); // nieblokujące /*... */ if (resp.isdone()) { int[] t = resp.get(); // blokujące Listing 5. Podstawy komunikacji Metoda barrier() stanowi implementację operacji synchronizacji wątków. Możliwe jest synchronizowanie tylko podzbioru wszystkich wątków. Jest to przydatne przy takich operacjach, jak wykonanie synchronicznego put/get (por. listing 6). if (PCJ.myId() == 3) { PCJ.putLocal("value", 42); PCJ.barrier(2); else if (PCJ.myId() == 2) {

4 PCJ.barrier(3); int answer = PCJ.get(3, "value"); Listing 6. Przykład wykorzystania bariery i synchronicznych operacji put/get Listing 7 przedstawia przykład wykorzystania operacji rozgłoszenia. W celu rozpoczęcia rozgłoszenia wątek wywołujący wykorzystuje metodę broadcast() i przesyła identyfikator rozgłaszanej zmiennej dzielonej, a także jej nową wartość. Wątek-odbiorca może poczekać na odebranie nowej wartości wykorzystując metodę waitfor(), która blokuje wątek aż monitorowana zmienna zostanie zmodyfikowana przez inny wątek. Monitorowanie zmiennych wprowadzone zostało ze względu na fakt, że biblioteka PCJ oparta jest na komunikacji jednostronnej. W wypadku listingu 7 należy także zauważyć, że również wątek nr 4 (inicjujący rozgłoszenie) korzysta z metody waitfor(). Komunikacja jest asynchroniczna, toteż bezpośrednio po wywołaniu metody broadcast() wątek 4 kontynuuje wykonanie. Wykorzystanie w tym wypadku metody waitfor() jest konieczne w celu upewnienia się, że zakończono zapis lokalnych danych. Co więcej, rozgłoszenie wykorzystuje topologię drzewa ukorzenionego w wątku o nr. 0, toteż zapis do zmiennej należącej do wątku nr 4 jest w istocie inicjowany przez jego int a; /*... */ if (PCJ.myNode() == 4) { PCJ.broadcast("a", 42); PCJ.waitFor("a"); //wait for a message from thread #4 Listing 7. Rozgłoszenie wartość 42 przez wątek nr 4. Każdy wątek przechowuje rozgłoszoną wartość w zmiennej a Przedstawione do tej pory operacje mogą być wykonywane globalnie dla wszystkich wątków, ale możliwe jest też ograniczenie ich jedynie do grupy wątków. Tworzenie grup jest proste i przedstawione w listingu 8., gdzie utworzono dwie grupy w oparciu o parzystość identyfikatora odpowiednich wątków. Group g = PCJ.join("group:" + (PCJ.myNode() % 2)); Listing 8. Tworzenie grupy wątków 3 Przykładowa implementacja - szybka transformata Fouriera Zaimplementowana jednowymiarowa zespolona szybka transformata Fouriera wykonuje nakładające się na siebie obliczenia i komunikację, nadaje się więc szczególnie do testowania wydajności systemu komputerowego w warunkach zbliżonych do rzeczywistych scenariuszy użycia. Została też wykorzystana przez autorów zestawu testów HPC Benchmark jako element pakietu umożliwiającego ocenę szybkości przyszłych petaskalowych systemów komputerowych [17]. Z tych też względów wykorzystaliśmy kod obliczający FFT do przedstawienia wydajności naszego rozwiązania, przyjmując test HPC Challenge za punkt odniesienia. Zainteresowani byliśmy przede wszystkim skalowalnością biblioteki, toteż odstąpiliśmy od przyjętej w ramach testu HPC Challenge metodologii polegającej na wykorzystaniu rozmiarów danych wypełniających prawie całą dostępną pamięć. Testy zostały zmodyfikowane tak, aby działały na danych tego samego rozmiaru, niezależnie od liczby węzłów obliczeniowych i dostępnej pamięci. Dodatkowo sprawdziliśmy też wydajność znanej i powszechnie wykorzystywanej biblioteki FFTW [18], skompilowanej ze wsparciem dla MPI. Testy przeprowadzono na klastrze 64 węzłów obliczeniowych opartych o procesory Intel Xeon X5660 (dwunastordzeniowe) z połączeniem Infiniband, taktowane zegarem 2,8 GHz. Każdy węzeł posiada 24 GB

5 pamięci RAM. Jako implementację MPI wykorzystano OpenMPI (kompatybilne z gcc 4.4.7). Biblioteka PCJ została uruchomiona z wykorzystaniem maszyny wirtualnej Oracle v _40 oraz IBM v _SR6. Praca została wykonana z wykorzystaniem infrastruktury PL-Grid [19]. Implementacja w wypadku HPC Challenge oparta jest o algorytmy opublikowane przez Takahashiego i Kanadę [20]. W wypadku biblioteki PCJ zdecydowano się zaadaptować wcześniejszą implementację wykorzystującą Coarray Fortran 2.0 opartą o radix-2, wykorzystującą do komunikacji wzorzec mechanizm all-to-all (tj. w trakcie komunikacji każdy wątek wysyła komunikat do wszystkich pozostałych) [21]. W naszej implementacji przetestowano dwa rozwiązania all-to-all. Oba opierają się na tym samym schemacie: każdy wątek przechowuje tablicę dzieloną blocks. Jej i-ta komórka jest wypełniania przez wątek, do którego ta przynależy danymi komunikowanymi dla i-tego wątku. Po zainicjowaniu tablicy blocks każdy wątek zaczyna odbierać odpowiednie dane od pozostałych. W tym miejscu obie implementacje się różnią. Przetestowaliśmy, po pierwsze, implementację wykorzystaną przez Manninena i Richardsona dla Fortranu [22]. Ta wykorzystuje prostą pętlę iterującą od myid() + 1 do numthreads() - 1, a następnie od 0 do myid() - 1. W trakcie każdej iteracji wykorzystywana jest komunikacja blokująca i odpowiednia wartość jest odbierana od odpowiedniego wątku (listing 9). Przetestowana została też implementacje nieblokująca (listing 10). block_size = local_n / PCJ.numThreads(); for (int image = (PCJ.myId() + 1) % PCJ.threadCount(), num = 0; num!= PCJ.threadCount() - 1; image = (image + 1) % PCJ. threadcount()) { double[] recv = (double[]) PCJ.get(image, "blocks", PCJ.myId()); System.arraycopy(recv, 0, dest, (int) (image * 2 * blocksize), (int) (2 * blocksize)); num++; Listing 9. Blokujące all-to-all //prepare the futures array FutureObject<double[]>[] futures =new FutureObject[PCJ.threadCount()]; //get the data (asynchronous) for (int i = 0; i < PCJ.threadCount(); i++) { if (i!= PCJ.myId()) { futures[i] = PCJ.getFutureObject(i, "blocks", PCJ.myId()); int numreceived = 0; while (numreceived!= PCJ.threadCount() - 1) { for (int i = 0; i < futures.length; i ++) { if (futures[i]!= null && futures[i].isdone()) { double[] recv = futures[i].getobject(); System.arraycopy(recv, 0, dest, 20 (int) (i * 2 * blocksize), (int) (2 * blocksize)); numreceived++; futures[i] = null; Listing 10. Nieblokujące all-to-all Wykres 1 przedstawia wyniki przyspieszenia dla danych złożonych z 2 25 liczb zespolonych. Dla testów wykorzystano hybrydową implementację z biblioteki FFTW (tzn. wykorzystującą MPI dla obliczeń rozproszonych i OpenMP dla zrównoleglenia na pojedynczym węźle). Biblioteka PCJ wypadała poprawnie, osiągając przyspieszenie porównywalne z FFTW (należy jednak zauważyć, że referencyjny czas działania na pojedynczym wątku jednak się różnił i wynosił ok. 3,3 s dla FFTW i ok. 10 s. dla PCJ). W wypadku

6 mniejszej liczby wątków (tj. obliczeń wykonywanych na pojedynczym węźle) znakomicie wypadło rozwiązanie z HPC Benchmark. Należy więc rozważyć w przyszłości implementację zastosowanego w nim algorytmu i ponowne wykonanie testów. Wykres 1. FFT - przyspieszenie 4 Przykładowa implementacja postać CSR dla grafu Kroneckera Grafy są jednym z najbardziej powszechnych modeli używanych do analizy. Są wykorzystywane do reprezentacji relacji i dlatego są obecne w wielu dziedzinach nauki między innymi w biologii (badanie łańcuchów pokarmowych w różnych ekosystemach, badanie interakcji między białkami HCV - ludzkim wirusem typu C zapalenia wątroby - oraz białkami człowieka), w analizie sieci dróg (oprogramowanie oparte na algorytmach analizujących grafy znalazło zastosowanie w przenośnych urządzeniach PDA wyposażonych w GPS ) oraz w analizie sieci społecznościowych takich jak Facebook czy Twitter. Podstawowe problemy grafowe znajdują zastosowania w wielu dziedzinach życia, dlatego analiza grafów i otrzymywanie szybkich rozwiązań stają się coraz ważniejsze. Wielkość i złożoność grafów stanowi jednak wyzwanie do ich efektywnego przetwarzania. Coraz bardziej na znaczeniu zyskują projekty które pomagają badać moc obliczeniową klastrów w kontekście algorytmów grafowych. Jednym z takich projektów jest projekt Graph500 przedstawiony na międzynarodowej konferencji ISC2010 [26]. Graph500 dostarcza testów do oceny superkomputerów na całym świecie [26]. Testy te wymuszają dużą ilość komunikacji i synchronizacji co pozwala na analizę bardziej realistycznych obciążeń obliczeniowych [24]. W benchmarku Graph500 można wyróżnić trzy główne części [25]: generator Grafu Kroneckera: tworzenie losowego Grafu Kroneckera w postaci listy krawędzi (każda krawędź jest nieskierowana)

7 kernel 1: utworzenie reprezentacji grafu z listy krawędzi otrzymanej z generatora Grafu Kroneckera kernel 2: BFS dla 64 losowo wybranych wierzchołków Grafy Kroneckera otrzymane z generatora benchmarku Graph500 dobrze symulują grafy społecznościowe [23], ponieważ posiadają wiele cech zgodnych z cechami sieci ze świata rzeczywistego np. występowanie podsieci, złożonych z grup dobrych znajomych, w których wszyscy się znają. Grafy Kroneckera tworzone są według rekurencyjnej konstrukcji opartej o produkt Kroneckara na macierzach sąsiedztwa. Sprawdziliśmy wydajność biblioteki PCJ w kontekście obliczeń grafowych. Zaimplementowaliśmy tworzenie reprezentacji grafu w postaci CSR z listy krawędzi otrzymanej z generatora Grafu Kroneckara benchmarku Graph500. Testy przeprowadziliśmy na losowym Grafie Kroneckara rozmiaru SCALE 21 (logarytm o podstawie dwa z liczby wierzchołków grafu). Wykres 2 przedstawia czas obliczeń (wraz z czasem zbierania danych) potrzebny do utworzenia reprezentacji CSR z listy krawędzi. Skalowalność PCJ dla wątków od 1 do 4 jest obiecująca. Przy ośmiu wątkach czas wykonania rośnie. Należałoby, więc powtórzyć badania dla większego grafu, a także porównać wydajność biblioteki PCJ z implementacjami w OpenMP oraz MPI. Wykres 2. CSR - czas obliczeń i zbierania danych dla Grafu Kroneckera SCALE Uwagi końcowe i dalsze prace Wykonane testy wskazują, że nasze rozwiązanie jest obiecujące pod względem wydajności, pod niektórymi względami dorównując uznanym i długo rozwijanym rozwiązaniom (por. FFTW). Więcej informacji o wydajności dostępnych będzie też w pracy [28]. Oprócz wskazanych w toku testów planów na przyszłość, aktualnie prowadzone są też prace związane z implementacją pozostałych testów HPC Benchmark i kerneli obliczeniowych Graph 500.

8 Bibliografia [1] T. Rauber, G. Rünger, Parallel Programming: for Multicore and Cluster Systems, Berlin Londyn 2010 [2] X10 - strona główna, [Online]. Available: [Data uzyskania dostępu: ]. [3] Chapel - strona główna, [Online]. Available: [Data uzyskania dostępu: ]. [4] J. Reid, Coarrays in the next Fortran Standard, [Online]. Available: ftp://ftp.nag.co.uk/sc22wg5/n1801-n1850. [Data uzyskania dostępu: ]. [5] Coarray Fortran strona główna, Rice university, [Online]. Available: [Data uzyskania dostępu: ]. [6] UPC - strona główna, [Online]. Available: [Data uzyskania dostępu: ]. [7] J. M. Bull, I. A. Smith, I. Pottage i R. Freeman, Benchmarking Java against C and Fortran for scientific apllications, w Proceedings of the 2001 joint ACM-ISOPE conference on Java Grande, [8] A. Kaminsky, Parallel Java: A unified api for shared memory and cluster parallel programming in 100% java, w Parallel and Distributed Processing Symposium, Long Beach, [9] J. M. Bull, L. A. Smith, M. D. Westhead, D. S. Henty i R. A. Davey, A Benchmark Suite for High Performance Java, Concurrency: Practice and Experience, tom 12, pp , [10] Java Grande - strona główna, [Online]. Available: https://www.epcc.ed.ac.uk/research/computing/performance-characterisation-andbenchmarking/java-grande-benchmark-suite. [Data uzyskania dostępu: ]. [11] P. Hilfinger, D. Bonachea, K. Datta, D. Gay, S. Graham, B. Liblit, G. Pike, J. Su i K. Yelick, Titanium Language Reference Manual, [Online]. Available: pdf. [Data uzyskania dostępu: ]. [12] D. Caromel, C. Delbe, A. D. Costanzo i M. Leyton, Proactive: an integrated platform for programming and running applications on grids and p2p systems, Computational Methods in Science and Technology, tom 12, [13] [Online]. Available: [Data uzyskania dostępu: ]. [14] M. Nowicki i P. Bała, New Approach for Parallel Computation in Java, Lecture Notes in Computer Science, tom 7782, pp , [15] M. Nowicki i P. Bała, Parallel computations in Java with PCJ library, w High Performance Computing and Simulation (HPCS), Madryt, [16] M. Nowicki i P. Bała, PCJ manual, [Online]. Available: [Data uzyskania dostępu: ].

9 [17] HPC Challenge - strona główna, [Online]. Available: [Data uzyskania dostępu: ]. [18] FFTW - strona główna, [Online]. Available: [Data uzyskania dostępu: ]. [19] PL-Grid - strona główna, [Online]. Available: [Data uzyskania dostępu: ]. [20] D. Takahashi i Y. Kanada, High-performance radix-2, 3 and 5 parallel 1-d complex FFT algorithm for distributed-memory parallel computers, The Journal of Supercomputing, tom 15, nr 2, pp , [21] J. Mellor-Crummey, L. Adhianto, G. Jin, M. Krentel, K. Murthy, W. Scherer i C. Yang, Class II Submission to the HPC Challenge Award Competition. Coarray Fortran 2.0, [Online]. Available: [Data uzyskania dostępu: ]. [22] P. Manninem i H. Richardson, First experiences on collective operations with Fortran coarrays on the Cray XC30, w 7th International Conference on Pgas Programming Models, Edinburgh, [23] J. Leskovec, D. Chakrabarti, J. Kleinberg, Ch. Faloutsos, Z. Ghahramani Kronecker Graphs: An Approach to Modeling Networks, The Journal of Machine Learning Research archive, Volume 11, 3/1/2010, Pages [24] A.Yoo and I.Kaplan, Evaluating Use of Data Flow Systems for Large Graph Analysis, Proceedings of the 2nd Workshop on Many-Task Computing on Grids and Supercomputers, Article No. 5, ACM New York, USA, 2009 [25] The Graph500 Specification, [Online] [26] The Graph500 List, [Online] [27] PCJ - strona główna, [Online] [28] M.Nowicki,Ł.Górski, P. Grabarczyk, P. Bała. PCJ Java library for high performance computing in PGAS model. HPCS 2014 (w druku) [29] M.Ryczkowska. Evaluating PCJ Library for Graph Problems Graph500 in PCJ (w druku)

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

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

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

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

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

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

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

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

HPC na biurku. Wojciech De bski

HPC na biurku. Wojciech De bski na biurku Wojciech De bski 22.01.2015 - co to jest? High Performance Computing most generally refers to the practice of aggregating computing power in a way that delivers much higher performance than one

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

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 obiektowe

Programowanie obiektowe Laboratorium z przedmiotu Programowanie obiektowe - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia.

Bardziej szczegółowo

Opracowanie nowych metod programowania równoległego w Javie w oparciu o paradygmat PGAS (Partitioned Global Address Space)

Opracowanie nowych metod programowania równoległego w Javie w oparciu o paradygmat PGAS (Partitioned Global Address Space) Uniwersytet Warszawski Wydział Matematyki, Informatyki i Mechaniki mgr Marek Nowicki Opracowanie nowych metod programowania równoległego w Javie w oparciu o paradygmat PGAS (Partitioned Global Address

Bardziej szczegółowo

Wsparcie dla OpenMP w kompilatorze GNU GCC Krzysztof Lamorski Katedra Informatyki, PWSZ Chełm

Wsparcie dla OpenMP w kompilatorze GNU GCC Krzysztof Lamorski Katedra Informatyki, PWSZ Chełm Wsparcie dla OpenMP w kompilatorze GNU GCC Krzysztof Lamorski Katedra Informatyki, PWSZ Chełm Streszczenie Tematem pracy jest standard OpenMP pozwalający na programowanie współbieŝne w systemach komputerowych

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

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami. UML a kod w C++ i Javie Projektowanie oprogramowania Dokumentowanie oprogramowania Diagramy przypadków użycia Przewoznik Zarzadzanie pojazdami Optymalizacja Uzytkownik Wydawanie opinii Zarzadzanie uzytkownikami

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

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

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

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1 Obiektowe programowanie rozproszone Java RMI Krzysztof Banaś Systemy rozproszone 1 Java RMI Mechanizm zdalnego wywołania metod Javy (RMI Remote Method Invocation) posiada kilka charakterystycznych cech,

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

Programowanie obiektowe zastosowanie języka Java SE

Programowanie obiektowe zastosowanie języka Java SE Programowanie obiektowe zastosowanie języka Java SE Wstęp do programowania obiektowego w Javie Autor: dr inŝ. 1 Java? Java język programowania obiektowo zorientowany wysokiego poziomu platforma Javy z

Bardziej szczegółowo

Wstęp do JUNG. Omówione elementy wykorzystane w Edge Color Project

Wstęp do JUNG. Omówione elementy wykorzystane w Edge Color Project JUNG Java Universal Network/Graph Framework JUNG jest to biblioteka służąca do modelowania, analizy i wizualizacji danych reprezentowanych w postaci grafów lub sieci. Architektura JUNGa wspiera różnorodność

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

Wprowadzenie. Co to jest klaster? Podział ze względu na przeznaczenie. Architektury klastrów. Cechy dobrego klastra.

Wprowadzenie. Co to jest klaster? Podział ze względu na przeznaczenie. Architektury klastrów. Cechy dobrego klastra. N Wprowadzenie Co to jest klaster? Podział ze względu na przeznaczenie. Architektury klastrów. Cechy dobrego klastra. Wprowadzenie (podział ze względu na przeznaczenie) Wysokiej dostępności 1)backup głównego

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

Ćwiczenie nr: 9 Obliczenia rozproszone MPI

Ćwiczenie nr: 9 Obliczenia rozproszone MPI Ćwiczenie nr: 9 Temat: Obliczenia rozproszone MPI 1. Informacje ogólne MPI (Message Passing Interface) nazwa standardu biblioteki przesyłania komunikatów dla potrzeb programowania równoległego w sieciach

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

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

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy Wykład 3, część 3 1 Język JAVA podstawy Plan wykładu: 1. Konstrukcja kodu programów w Javie 2. Identyfikatory, zmienne 3. Typy danych 4. Operatory, instrukcje sterujące instrukcja warunkowe,

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

Virtual Grid Resource Management System with Virtualization Technology

Virtual Grid Resource Management System with Virtualization Technology Virtual Grid Resource Management System with Virtualization Technology System zarządzania zasobami wirtualnego Gridu z wykorzystaniem technik wirtualizacji Joanna Kosińska Jacek Kosiński Krzysztof Zieliński

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

Ćwiczenie nr: 9 Obliczenia rozproszone MPI

Ćwiczenie nr: 9 Obliczenia rozproszone MPI Ćwiczenie nr: 9 Temat: Obliczenia rozproszone MPI 1. Informacje ogólne MPI (Message Passing Interface) nazwa standardu biblioteki przesyłania komunikatów dla potrzeb programowania równoległego w sieciach

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

Java Podstawy JUST JAVA 28.03.2007. Michał Bereta Intytu Modelowania Komputerowego Wydział Fizyki, Matematyki i Informatyki Stosowanej

Java Podstawy JUST JAVA 28.03.2007. Michał Bereta Intytu Modelowania Komputerowego Wydział Fizyki, Matematyki i Informatyki Stosowanej Java Podstawy JUST JAVA 28.03.2007 Michał Bereta Intytu Modelowania Komputerowego Wydział Fizyki, Matematyki i Informatyki Stosowanej beretam@torus.uck.pk.edu.pl http://torus.uck.pk.edu.pl/~beretam Hello

Bardziej szczegółowo

Programowanie obiektowe. Wprowadzenie

Programowanie obiektowe. Wprowadzenie 1 Programowanie obiektowe Wprowadzenie 2 Programowanie obiektowe Object-oriented programming Najpopularniejszy obecnie styl (paradygmat) programowania Rozwinięcie koncepcji programowania strukturalnego

Bardziej szczegółowo

Badania w sieciach złożonych

Badania w sieciach złożonych Badania w sieciach złożonych Grant WCSS nr 177, sprawozdanie za rok 2012 Kierownik grantu dr. hab. inż. Przemysław Kazienko mgr inż. Radosław Michalski Instytut Informatyki Politechniki Wrocławskiej Obszar

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

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej Programowanie obiektowe Interfejsy Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Interfejsy Autor: Paweł Rogaliński Instytut Informatyki,

Bardziej szczegółowo

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy wykład 2, część 1 1 Język JAVA podstawy Plan wykładu: 1. Rodzaje programów w Javie 2. Tworzenie aplikacji 3. Tworzenie apletów 4. Obsługa archiwów 5. Wyjątki 6. Klasa w klasie! 2 Język

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

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

Systemy Rozproszone Technologia ICE

Systemy Rozproszone Technologia ICE Systemy Rozproszone Technologia ICE Zespół Systemów Rozproszonych () Katedra Informatyki AGH Kraków Kornel Skałkowski skalkow@agh.edu.pl Opracowano na podstawie książki: Henning M, Spruiell M. Distributed

Bardziej szczegółowo

Platformy programistyczne:.net i Java L ABORATORIUM 7,8: HACKATHON - JTTT

Platformy programistyczne:.net i Java L ABORATORIUM 7,8: HACKATHON - JTTT Platformy programistyczne:.net i Java L ABORATORIUM 7,8: HACKATHON - JTTT O co chodzi? - Przypomnienie Hackathon - http://en.wikipedia.org/wiki/hackathon A hackathon is an event in which computer programmers

Bardziej szczegółowo

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak JAVA Wstęp do programowania w języku obiektowym Bibliografia: JAVA Szkoła programowania, D. Trajkowska Ćwiczenia praktyczne JAVA. Wydanie III,M. Lis Platforma JSE: Opracował: Andrzej Nowak JSE (Java Standard

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

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016 Wstęp - wykład 0 22 lutego 2016 Historia Simula 67 język zaprojektowany do zastosowan symulacyjnych; Smalltalk 80 pierwszy język w pełni obiektowy; Dodawanie obiektowości do języków imperatywnych: Pascal

Bardziej szczegółowo

Dokumentacja aplikacji Szachy online

Dokumentacja aplikacji Szachy online Projekt z przedmiotu Technologie Internetowe Autorzy: Jakub Białas i Jarosław Tyma grupa II, Automatyka i Robotyka sem. V, Politechnika Śląska Przedmiot projektu: Aplikacja internetowa w języku Java Dokumentacja

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

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego

Bardziej szczegółowo

Klaster obliczeniowy

Klaster obliczeniowy Warsztaty promocyjne Usług kampusowych PLATON U3 Klaster obliczeniowy czerwiec 2012 Przemysław Trzeciak Centrum Komputerowe Politechniki Łódzkiej Agenda (czas: 20min) 1) Infrastruktura sprzętowa wykorzystana

Bardziej szczegółowo

Przetwarzanie Rozproszone i Równoległe

Przetwarzanie Rozproszone i Równoległe WYDZIAŁ INŻYNIERII ELEKTRYCZNEJ I KOMPUTEROWEJ KATEDRA AUTOMATYKI I TECHNIK INFORMACYJNYCH Przetwarzanie Rozproszone i Równoległe www.pk.edu.pl/~zk/prir_hp.html Wykładowca: dr inż. Zbigniew Kokosiński

Bardziej szczegółowo

ZASTOSOWANIE OBLICZEŃ ROZPROSZONYCH W JAVIE NA PRZYKŁADZIE ALGORYTMU WYZNACZAJĄCEGO LICZBY DOSKONAŁE

ZASTOSOWANIE OBLICZEŃ ROZPROSZONYCH W JAVIE NA PRZYKŁADZIE ALGORYTMU WYZNACZAJĄCEGO LICZBY DOSKONAŁE Scientific Bulletin of Che lm Section of Mathematics and Computer Science No. 1/2008 ZASTOSOWANIE OBLICZEŃ ROZPROSZONYCH W JAVIE NA PRZYKŁADZIE ALGORYTMU WYZNACZAJĄCEGO LICZBY DOSKONAŁE TOMASZ FRANKOWSKI,

Bardziej szczegółowo

Ćwiczenie 1. Przygotowanie środowiska JAVA

Ćwiczenie 1. Przygotowanie środowiska JAVA Ćwiczenie 1 Przygotowanie środowiska JAVA 1. Wprowadzenie teoretyczne Instalacja JDK (Java Development Kit) NaleŜy pobrać z java.sun.com środowisko i zainstalować je. Następnie naleŝy skonfigurować środowisko.

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

Transformacja Fouriera i biblioteka CUFFT 3.0

Transformacja Fouriera i biblioteka CUFFT 3.0 Transformacja Fouriera i biblioteka CUFFT 3.0 Procesory Graficzne w Zastosowaniach Obliczeniowych Karol Opara Warszawa, 14 kwietnia 2010 Transformacja Fouriera Definicje i Intuicje Transformacja z dziedziny

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 równoległe i rozproszone. Monitory i zmienne warunku. Krzysztof Banaś Programowanie równoległe i rozproszone 1

Programowanie równoległe i rozproszone. Monitory i zmienne warunku. Krzysztof Banaś Programowanie równoległe i rozproszone 1 Programowanie równoległe i rozproszone Monitory i zmienne warunku Krzysztof Banaś Programowanie równoległe i rozproszone 1 Problemy współbieżności Problem producentów i konsumentów: jedna grupa procesów

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

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca 2009. Norbert Potocki db4o

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca 2009. Norbert Potocki db4o Wprowadzenie - podstawy - technikalia Przydatne wiadomości Wprowadzenie 1 czerwca 2009 Wprowadzenie - podstawy - technikalia Przydatne wiadomości Wprowadzenie = bjects = database for objects w pełni obiektowa

Bardziej szczegółowo

Spis treści. I. Skuteczne. Od autora... Obliczenia inżynierskie i naukowe... Ostrzeżenia...XVII

Spis treści. I. Skuteczne. Od autora... Obliczenia inżynierskie i naukowe... Ostrzeżenia...XVII Spis treści Od autora..................................................... Obliczenia inżynierskie i naukowe.................................. X XII Ostrzeżenia...................................................XVII

Bardziej szczegółowo

D:\DYDAKTYKA\ZAI_BIS\_Ćwiczenia_wzorce\04\04_poprawiony.doc 2009-lis-23, 17:44

D:\DYDAKTYKA\ZAI_BIS\_Ćwiczenia_wzorce\04\04_poprawiony.doc 2009-lis-23, 17:44 Zaawansowane aplikacje internetowe EJB 1 Rozróżniamy dwa rodzaje beanów sesyjnych: Stateless Statefull Celem tego laboratorium jest zbadanie różnic funkcjonalnych tych dwóch rodzajów beanów. Poszczególne

Bardziej szczegółowo

Zaawansowane aplikacje WWW - laboratorium

Zaawansowane aplikacje WWW - laboratorium Zaawansowane aplikacje WWW - laboratorium Przetwarzanie XML (część 2) Celem ćwiczenia jest przygotowanie aplikacji, która umożliwi odczyt i przetwarzanie pliku z zawartością XML. Aplikacja, napisana w

Bardziej szczegółowo

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Java - tablice, konstruktory, dziedziczenie i hermetyzacja Java - tablice, konstruktory, dziedziczenie i hermetyzacja Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU zmienne tablicowe konstruktory klas dziedziczenie hermetyzacja

Bardziej szczegółowo

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Jak napisać program obliczający pola powierzchni różnych figur płaskich? Część IX C++ Jak napisać program obliczający pola powierzchni różnych figur płaskich? Na początku, przed stworzeniem właściwego kodu programu zaprojektujemy naszą aplikację i stworzymy schemat blokowy

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

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

Klasy i obiekty cz II

Klasy i obiekty cz II Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Klasy i obiekty cz II Hermetyzacja, mutatory, akcesory, ArrayList Rozwijamy aplikację Chcemy, aby obiekty klasy

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

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

Informatyka- wykład. Podstawy programowania w Pythonie. dr Marcin Ziółkowski

Informatyka- wykład. Podstawy programowania w Pythonie. dr Marcin Ziółkowski Informatyka- wykład Podstawy programowania w Pythonie dr Marcin Ziółkowski Instytut Matematyki i Informatyki Akademia im. Jana Długosza w Częstochowie 23 listopada 2015 r. JĘZYK PYTHON Język Python jest

Bardziej szczegółowo

WPROWADZENIE DO JĘZYKA JAVA

WPROWADZENIE DO JĘZYKA JAVA WPROWADZENIE DO JĘZYKA JAVA programowanie obiektowe KRÓTKA HISTORIA JĘZYKA JAVA KRÓTKA HISTORIA JĘZYKA JAVA 1991 - narodziny języka java. Pierwsza nazwa Oak (dąb). KRÓTKA HISTORIA JĘZYKA JAVA 1991 - narodziny

Bardziej szczegółowo

Spis treści. 1 Java T M

Spis treści. 1 Java T M Spis treści 1 Java T M 1 2 Co to jest Platforma Java T M 1 3 Przygotowanie komputera 2 4 Pierwszy program 2 5 Dokumentacja 3 6 Budowa aplikacji. Klasy. 3 7 Pola i metody 4 8 Konstruktory 5 9 Inne proste

Bardziej szczegółowo

OBLICZENIA ROZPROSZONE Z WYKORZYSTANIEM MPI.NET

OBLICZENIA ROZPROSZONE Z WYKORZYSTANIEM MPI.NET Scientific Bulletin of Chełm Section of Mathematics and Computer Science No. 1/2009 OBLICZENIA ROZPROSZONE Z WYKORZYSTANIEM MPI.NET GRZEGORZ WIŚNIEWSKI, RAFAŁ OGRODOWCZYK Państwowa Wyższa Szkoła Zawodowa

Bardziej szczegółowo

Definiowanie własnych klas

Definiowanie własnych klas Programowanie obiektowe Definiowanie własnych klas Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski @ pwr.wroc.pl Definiowanie własnych klas Autor:

Bardziej szczegółowo

Zasoby i usługi Wrocławskiego Centrum Sieciowo-Superkomputerowego

Zasoby i usługi Wrocławskiego Centrum Sieciowo-Superkomputerowego Zasoby i usługi Wrocławskiego Centrum Sieciowo-Superkomputerowego Mateusz Tykierko WCSS 20 stycznia 2012 Mateusz Tykierko (WCSS) 20 stycznia 2012 1 / 16 Supernova moc obliczeniowa: 67,54 TFLOPS liczba

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

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

Projektowanie aplikacji internetowych laboratorium

Projektowanie aplikacji internetowych laboratorium Projektowanie aplikacji internetowych laboratorium Programowanie w języku Java Do realizacji projektu potrzebne jest zintegrowane środowisko programistyczne NetBeans 7 (zrzuty ekranów pochodzą z wersji

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

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX) (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX) W informatyce występują ściśle obok siebie dwa pojęcia: sprzęt (ang. hardware) i oprogramowanie

Bardziej szczegółowo

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami 1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami Celem tych zajęć jest zrozumienie i oswojenie z technikami programowania przy pomocy wskaźników w języku C++. Proszę przeczytać rozdział 8.

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

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java Aplikacje Internetowe Podstawy języka Java Najprostsza aplikacja class Hello { public static void main(string[] args) { System.out.println("Hello World!"); Komponenty Javy JRE Java Runtime Environment

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

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl Narzędzia i aplikacje Java EE Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl Niniejsze opracowanie wprowadza w technologię usług sieciowych i implementację usługi na platformie Java EE (JAX-WS) z

Bardziej szczegółowo

Pakiety i interfejsy. Tomasz Borzyszkowski

Pakiety i interfejsy. Tomasz Borzyszkowski Pakiety i interfejsy Tomasz Borzyszkowski Pakiety podstawy W dotychczasowych przykładach nazwy klas musiały pochodzić z jednej przestrzeni nazw, tj. być niepowtarzalne tak, by nie doprowadzić do kolizji

Bardziej szczegółowo

PRZEWODNIK PO PRZEDMIOCIE

PRZEWODNIK PO PRZEDMIOCIE Nazwa przedmiotu: PROGRAMOWANIE APLIKACJI RÓWNOLEGŁYCH I ROZPROSZONYCH Programming parallel and distributed applications Kierunek: Informatyka Rodzaj przedmiotu: obowiązkowy w ramach specjalności: Inżynieria

Bardziej szczegółowo

Komputerowe Obliczenia Równoległe: Wstęp do OpenMP i MPI

Komputerowe Obliczenia Równoległe: Wstęp do OpenMP i MPI Komputerowe Obliczenia Równoległe: Wstęp do OpenMP i MPI Patryk Mach Uniwersytet Jagielloński, Instytut Fizyki im. Mariana Smoluchowskiego OpenMP (Open Multi Processing) zbiór dyrektyw kompilatora, funkcji

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

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Podstawowe konstrukcje programistyczne Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk (Wydział Fizyki) WP w. II Jesień 2013 1 / 34 Przypomnienie Programowanie imperatywne Program

Bardziej szczegółowo

Analiza i projektowanie aplikacji Java

Analiza i projektowanie aplikacji Java Analiza i projektowanie aplikacji Java Modele analityczne a projektowe Modele analityczne (konceptualne) pokazują dziedzinę problemu. Modele projektowe (fizyczne) pokazują system informatyczny. Utrzymanie

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

Zaawansowane narzędzia programowania rozproszonego

Zaawansowane narzędzia programowania rozproszonego Zaawansowane narzędzia programowania rozproszonego Karol Gołąb karol.golab@tls-technologies.com 28 listopada 2001 1 Streszczenie Omówienie i porównanie popularnych standardów mechanizmów komunikacyjnych:

Bardziej szczegółowo

Historia i podstawowe koncepcje. Tomasz Borzyszkowski

Historia i podstawowe koncepcje. Tomasz Borzyszkowski Historia i podstawowe koncepcje Tomasz Borzyszkowski Język C W latach 1960-70 trwają intensywne prace nad pierwszymi językami programowania zapewniającymi: Łatwość użycia Efektywność kodu Łatwość rozszerzania

Bardziej szczegółowo

Smarty PHP. Leksykon kieszonkowy

Smarty PHP. Leksykon kieszonkowy IDZ DO PRZYK ADOWY ROZDZIA SPIS TREœCI KATALOG KSI EK KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG Smarty PHP. Leksykon kieszonkowy Autor: Daniel Bargie³ ISBN: 83-246-0676-9 Format: B6, stron: 112 TWÓJ KOSZYK

Bardziej szczegółowo

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016 Wykład 2 17 marca 2016 Dziedziczenie Klasy bazowe i potomne Dziedziczenie jest łatwym sposobem rozwijania oprogramowania. Majac klasę bazowa możemy ja uszczegółowić (dodać nowe pola i metody) nie przepisujac

Bardziej szczegółowo

Programowanie w Internecie. Java

Programowanie w Internecie. Java Programowanie w Internecie Java Autor: dr inż. Zofia Kruczkiewicz Literatura: L. Lemay, R. Cadenhead P. Naughton Krzysztof Barteczko Boone Barry Java 2 dla każdego Podręcznik Języka Programowania Java

Bardziej szczegółowo