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



Podobne dokumenty
Biblioteka PCJ do naukowych obliczeń równoległych

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

Programowanie Rozproszone i Równoległe

Nowoczesne technologie przetwarzania informacji

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

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

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

Programowanie obiektowe

Algorytmy i Struktury Danych

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

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

O superkomputerach. Marek Grabowski

Początki Javy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 8

Przetwarzanie Równoległe i Rozproszone

Wykład 7: Pakiety i Interfejsy

Java EE produkcja oprogramowania

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

1 Atrybuty i metody klasowe

Opracowanie w modelu PGAS wybranych, równoległych algorytmów grafowych

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Programowanie procesorów graficznych GPGPU

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

Ćwiczenie 1. Przygotowanie środowiska JAVA

Java EE produkcja oprogramowania

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

Pierwsze kroki. Algorytmy, niektóre zasady programowania, kompilacja, pierwszy program i jego struktura

Równoległość i współbieżność

Równoległość i współbieżność

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

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

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

HPC na biurku. Wojciech De bski

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

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

Metody Metody, parametry, zwracanie wartości

Literatura. 3/26/2018 Przetwarzanie równoległe - wstęp 1

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

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

Dokumentacja do API Javy.

Architektura rozproszonych magazynów danych

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

2 WRZEŚNIA S t r o n a WROCŁAW

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

PRZETWARZANIE RÓWNOLEGŁE I ROZPROSZONE. Mnożenie macierzy kwadratowych metodą klasyczną oraz blokową z wykorzystaniem OpenMP.

Tworzenie aplikacji w języku Java

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

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

Programowanie obiektowe

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

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

Wprowadzenie do języka Java

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

Akademia ETI. Wprowadzenie do programowania w Javie PG Java User Group Przemysław Kulesza

Wprowadzenie do zrównoleglania aplikacji z wykorzystaniem standardu OpenMP

Aplikacje w Javie- wykład 11 Wątki-podstawy

Podstawy języka Java. przygotował:

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

10/14/2013 Przetwarzanie równoległe - wstęp 1. Zakres przedmiotu

Programowanie współbieżne Wstęp do OpenMP. Rafał Skinderowicz

Języki i metody programowania Java. Wykład 2 (część 2)

dr inż. Piotr Czapiewski Tworzenie aplikacji w języku Java Laboratorium 1

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Programowanie systemów z pamięcią wspólną specyfikacja OpenMP. Krzysztof Banaś Obliczenia równoległe 1

Programowanie obiektowe zastosowanie języka Java SE

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

OpenMP. Programowanie aplikacji równoległych i rozproszonych. Wykład 2. Model programowania. Standard OpenMP. Dr inż. Tomasz Olas

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

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Java. Programowanie Obiektowe Mateusz Cicheński

Programowanie komputerów

Biblioteka PCJ w wybranych zastosowaniach matematycznych - FFT i grafy Kroneckera

Wprowadzenie do OpenMP

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

16. Taksonomia Flynn'a.

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

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Procesy i wątki. Krzysztof Banaś Obliczenia równoległe 1

Programowanie obiektowe

61 Topologie wirtualne

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

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

RECENZJA ROZPRAWY DOKTORSKIEJ DLA INSTYTUTU PODSTAW INFORMATYKI POLSKIEJ AKADEMII NAUK

Java: interfejsy i klasy wewnętrzne

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

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

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

Programowanie w Javie Lista nr 1. Wybieramy kategorię Java, a wśród Projektów Java Application i [NEXT]

Kontenery i komponenty graficzne

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

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

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

Programowanie w Internecie. Java

Operacje grupowego przesyłania komunikatów. Krzysztof Banaś Obliczenia równoległe 1

Sprzęt czyli architektury systemów równoległych

Operacje grupowego przesyłania komunikatów

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

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Częstochowa, dn

Transkrypt:

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ę w kolejnych latach zgodnie z trendem wykładniczym (podwaja się w niemal równych odcinkach czasu). Autorstwo tego prawa przypisuje się Gordonowi Moore'owi, jednemu z założycieli firmy Intel - 1965 r. Prawo Moore a zostało rozszerzone na inne parametry komputerów (np. szybkość) 2 16/04/2015 Dla Ciekawych Świata Piotr Bała

Prawo Moore a 3 16/04/2015 Dla Ciekawych Świata Piotr Bała

Współczesne komputery Hydra 5 200 korów Thiane-2 3 200 000 korów (jednostek obliczeniowych) 4 16/04/2015 Dla Ciekawych Świata Piotr Bała

Przetwarzanie równoległe Robotnik może wykopać 20m rowu w ciągu 10 godzin. W jakim czasie ten rów wykona 10 robotników? 10 godz : 10 = 1 godz Co się stanie jeżeli do wykopania mamy studnię o głębokości 10 m? 5 16/04/2015 Dla Ciekawych Świata Piotr Bała

Komputer równoległy Klasyczny komputer Turinga S E S E Komputer równoległy czas 6 16/04/2015 Dla Ciekawych Świata Piotr Bała

Prawo Amdahl a 1 S( p) f (1 f ) / n 1 f S(p) - przyspieszenie f część sekwencyjna programu n liczba procesorów (korów) 7 16/04/2015 Dla Ciekawych Świata Piotr Bała

System z pamięcią wspólną WSPÓLNA PAMIĘĆ KANAŁ KOMUNIKACYJNY PROCESOR PROCESOR PROCESOR PROCESOR 8 16/04/2015 Dla Ciekawych Świata Piotr Bała

System z pamięcią rozproszoną SIEĆ LOKALNA PROCESOR PROCESOR PROCESOR PROCESOR PAMIĘĆ PAMIĘĆ PAMIĘĆ PAMIĘĆ 9 16/04/2015 Dla Ciekawych Świata Piotr Bała

Programowanie równoległe Współczesne komputery zbudowane są z dziesiątek, tysięcy czy setek tysięcy procesorów. Procesory posiadają wiele jednostek obliczeniowych (korów). Karty graficzne i inne koprocesory mają dziesiątki i setki jednostek obliczeniowych. Programowanie równoległe jest kluczowe dla współczesnych zastosowań. Oprogramowanie na komputery dużej mocy jest pisane głownie w C i FORTRANie. Programowanie równoległe wykorzystuje tradycyjne modele programowania: MPI i OpenMP. 10 16/04/2015 Dla Ciekawych Świata Piotr Bała

MPI - Message-Passing Interface Historia: MPI-1.0 (1992), MPI-2.0 (1997), MPI-3.0 (2012) C, C++, Fortran, Java (wrapery, JNI), Python,... Duża liczba parametrów wywołania. Komunikacja na zasadzie wysyłania komunikatów. Łatwo wpaść w zakleszczenia, które są trudne do debugowania. 11 16/04/2015 Dla Ciekawych Świata Piotr Bała

OpenMP Open Multi-Processing Historia: 1.0 (1997), 2.5 (2005), 4.0 (2013) Dyrektywy kompilatora: #pragma omp <directive> [clause] Zaprojektowany do pracy na komputerach o pamięci wspólnej. Zrównoleglanie oparte na zrównoleglaniu pojedynczych pętli Wprowadza dodatkową synchronizację Trudne zarządzanie rozmieszczeniem danych w pamięci 12 16/04/2015 Dla Ciekawych Świata Piotr Bała

Noew podejście do programowania równoległego Potrzebne są nowe rozwiązania: algorytmy równoległe Potrzebne nowe sposoby programowania (języki lub sposoby wyrażania równoległości) Nowe języki programowania: X10 (IBM) Click (Intel) XscalableMP (Fujitsu, RIKEN) Nowy model programowania równoległego: PGAS: Partitioned Global Address Space 13 16/04/2015 Dla Ciekawych Świata Piotr Bała

PGAS Partitioned Global Address Space Podstawy: Dane lokalne (tylko dla danego procesora) i współdzielone Zmienne globalne widoczne dla wszystkich procesorów Programista nie zajmuje się szczegółami komunikacji Jednostronna komunikacja Podstawowo operacje: synchronizacja (bariera) get put procesor pobiera dane z procesora j procesor wysyła dane do procesora j 14 16/04/2015 Dla Ciekawych Świata Piotr Bała

Języki PGAS http://www.pgas.org Co-Array Fortran (CAF) Unified Parallel C (UPC) Titanium (Java dialect) X10 Chapel Fortress PCJ 15 16/04/2015 Dla Ciekawych Świata Piotr Bała

PCJ - Parallel Computations in Java Biblioteka dla Javy rozwijana w ICM pcj.icm.edu.pl Paradygmat: partitioned global address space (PGAS) Podstawowe własności Nie wymaga modyfikacji JVM (wirtualnej maszyny Javy). Dostępna dla wszystkich systemów z Java7 np. IBM Java 1.7 dla Power7 Wykorzystuje Java SE 7 (NIO, SDP,... ) Pracuje z Java SE 8, Java SE 9 Nie wymaga dodatkowych bibliotek. 16 16/04/2015 Dla Ciekawych Świata Piotr Bała

PCJ Parallel Computations in Java Podstawowa funkcjonalność: Synchronizacja wątków Pobieranie danych (get) Wysyłanie danych (put) Dodatkowe funkcjonalności: Rozgłaszanie zmiennych Monitorowanie zmiany wartości zmiennych Równoległe I/O Grupy wątków 17 16/04/2015 Dla Ciekawych Świata Piotr Bała

PCJ Hello world import org.pcj.* public class PcjHelloWorld extends Storage @Override public void main() { System.out.println("Hello!"); } implements StartPoint { } public static void main(string[] args) { String[] nodes = new String[]{"localhost", "localhost"}; PCJ.deploy(PcjHelloWorld.class, } PcjHelloWorld.class, nodes); 18 16/04/2015 Dla Ciekawych Świata Piotr Bała

PCJ - podstawy double c; if (PCJ.myId()==0) c =(double) PCJ.get(3, "a"); if (PCJ.myId()==0) PCJ.put(3, "a", 5.0); if (PCJ.myId()==0) PCJ.broadcast("a", 5.0); public static void PCJ.barrier(); public static int PCJ.threadCount() 19 16/04/2015 Dla Ciekawych Świata Piotr Bała

PCJ Wyznaczanie π metodą Monte Carlo 20 16/04/2015 Dla Ciekawych Świata Piotr Bała

PCJ Wyznaczanie π metodą Monte Carlo Random random = new Random (); long nall = 1 _280_000_000 ; long n = nall / PCJ.threadCount (); long mycirclecount = 0; for ( long i = 0; i < n; ++i) { double x = 2.0 * random.nextdouble () - 1.0; double y = 2.0 * random.nextdouble () - 1.0; if ((x * x + y * y) <= 1.0) { mycirclecount ++; } } PCJ.putLocal ("count", mycirclecount ); PCJ.barrier (); 21 16/04/2015 Dla Ciekawych Świata Piotr Bała

PCJ Redukcja (sumowanie częściowych wyników z różnych procesorów) @Shared double a FutureObject al[] = new FutureObject[PCJ.threadCount()]; double a0 = 0.0; if (PCJ.myId() == 0) { for (int p = 0; p < PCJ.threadCount(); p++) { al[p] = PCJ.getFutureObject(p, "a"); } for (int p = 0; p < PCJ.threadCount(); p++) { a0 = a0 + (double) al[p].get(); } } 22 16/04/2015 Dla Ciekawych Świata Piotr Bała

PCJ - Wyznaczanie π metodą Monte Carlo 1000 Czas [s] 100 halo2 halo 2 caf 10 noreasz new 1 1 10 100 1000 10000 cores 23 16/04/2015 Dla Ciekawych Świata Piotr Bała

PCJ Wyznaczanie π metodą Monte Carlo (Math.random() zamiast new Random) Random random = new Random (); long nall = 1 _280_000_000 ; long n = nall / PCJ. threadcount (); long mycirclecount = 0; for ( long i = 0; i < n; ++i) { double x = 2.0 * Math.random() - 1.0; double y = 2.0 * Math.random() - 1.0; if ((x * x + y * y) <= 1.0) { mycirclecount ++; } } PCJ.putLocal ("count", mycirclecount ); PCJ.barrier (); 24 16/04/2015 Dla Ciekawych Świata Piotr Bała

PCJ PI Calculations using Monte Carlo 1000 Czas [s] 100 10 PI MC2 PI MC 1 1 10 100 cores 25 16/04/2015 Dla Ciekawych Świata Piotr Bała

PCJ PI Calculations using integral Przybliżenie wartości π za pomocą sumy (przybkiżającej całkę, czyli pole pok krzywą) Sumowanie rozdzielone pomiędzy wątki. Każdy z wątków wyznacza swoją część sumy. Redukcja posumowanie wyników częściowych z różnych procesorów. 26 16/04/2015 Dla Ciekawych Świata Piotr Bała

PCJ PI Calculations using integral 1000 Czas [s] 100 10 PI comm 1 0,1 1 10 100 1000 10000 cores 0,01 27 16/04/2015 Dla Ciekawych Świata Piotr Bała

PCJ Raytracing 28 16/04/2015 Dla Ciekawych Świata Piotr Bała

MapReduce (wyznaczanie średniego wieku) - Java Java long sum = 0; for ( User user : users ) { um += user.getage (); } double average = (double) sum / users.size (); Java 8 parallel streams long sum = users.parallelstream ().map (u -> ( long ) u. getage ()).reduce ( Long :: sum ).get (); double average = (double) sum / users.size (); 29 16/04/2015 Dla Ciekawych Świata Piotr Bała

MapReduce - PCJ @Shared long sum ; @Shared int userscount ;... myusers = loadusers( PCJ.myId ()); long s = 0; for ( User u : myusers ) { s += u. getage (); } PCJ.putLocal ("sum", s); PCJ.barrier (); s = pcj_reduce ("sum"); double average = (double) s / count ; // The same fpr size 30 16/04/2015 Dla Ciekawych Świata Piotr Bała

PCJ performance MapReduce algorithm 1 Time [s] 1 10 100 1000 #threads 0,1 Java 7 Java 8 PCJ 0,01 31 16/04/2015 Dla Ciekawych Świata Piotr Bała

pcj.icm.edu.pl Piotr Bała (ICM UW) wspólpraca (doktoranci): implementacja biblioteki PCJ: Marek Nowicki (WMiI UMK) testy, przykłady, wykorzystanie biblioteki PCJ: Łukasz Górski (WMiI UMK) Magdalena Ryczkowska (WMiI UMK) Michał Szynkiewicz (WMiI UMK)