Politechnika Krakowska Im. Tadeusza Ko±ciuszki Wydziaª Fizyki, Matematyki i Informatyki

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

Programowanie Równoległe Wykład 4. MPI - Message Passing Interface. Maciej Matyka Instytut Fizyki Teoretycznej

Programowanie w modelu przesyłania komunikatów specyfikacja MPI. Krzysztof Banaś Obliczenia równoległe 1

Operacje grupowego przesyłania komunikatów

Programowanie Równoległe Wykład 5. MPI - Message Passing Interface. Maciej Matyka Instytut Fizyki Teoretycznej

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

Wprowadzenie do OpenMP

HPC na biurku. Wojciech De bski

Przetwarzanie Równoległe i Rozproszone

Programowanie współbieżne i rozproszone

Programowanie współbieżne... (4) Andrzej Baran 2010/11

Programowanie Równoległe Wykład 5. MPI - Message Passing Interface (część 3) Maciej Matyka Instytut Fizyki Teoretycznej

1 Klasy. 1.1 Denicja klasy. 1.2 Skªadniki klasy.

Architektury systemów równoległych

Caªkowanie numeryczne - porównanie skuteczno±ci metody prostokatów, metody trapezów oraz metody Simpsona

Message Passing Interface

Wska¹niki, tablice dynamiczne wielowymiarowe

1. Wprowadzenie do C/C++

PARADYGMATY I JĘZYKI PROGRAMOWANIA. Programowanie współbieżne... (w13)

Programowanie Równoległe Wykład 6. MPI - Message Passing Interface. Maciej Matyka Instytut Fizyki Teoretycznej

Programowanie Współbieżne

1. Wprowadzenie do C/C++

Propozycja integracji elementów ±wiata gry przy u»yciu drzew zachowa«

Politechnika Krakowska Im. Tadeusza Ko±ciuszki Wydziaª Fizyki, Matematyki i Informatyki

Programowanie procesorów graficznych GPGPU

Obliczenia rozproszone z wykorzystaniem MPI

Spis tre±ci. Przedmowa... Cz ± I

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

Modele programowania równoległego. Programowanie z przekazywaniem komunikatów Message-Passing Programming Rafał Walkowiak dla PR PP

Programowanie w standardzie MPI

Praca Dyplomowa Magisterska

Lekcja 6 Programowanie - Zaawansowane

Komunikacja w sieci Industrial Ethernet z wykorzystaniem Protokołu S7 oraz funkcji PUT/GET

Modele programowania równoległego. Programowanie z przekazywaniem komunikatów Message-Passing Programming Rafał Walkowiak

Podstawy Informatyki i Technologii Informacyjnej

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

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

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

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

Algorytmy i Struktury Danych

Programowanie w modelu przesyłania komunikatów specyfikacja MPI, cd. Krzysztof Banaś Obliczenia równoległe 1

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

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

SVN - wprowadzenie. 1 Wprowadzenie do SVN. 2 U»ywanie SVN. Adam Krechowicz. 16 lutego Podstawowe funkcje. 2.1 Windows

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

Rozszerzenia MPI-2 1

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

YapS Plan testów. Šukasz Bieniasz-Krzywiec Dariusz Leniowski Jakub Š cki 29 maja 2007

PLD Linux Day. Maciej Kalkowski. 11 marca Wydziaª Matematyki i Informatyki UAM

Superkomputer z Raspberry PI

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

Wzorce projektowe strukturalne cz. 1

Tryby komunikacji między procesami w standardzie Message Passing Interface. Piotr Stasiak Krzysztof Materla

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

Operacje kolektywne MPI

CUDA. cudniejsze przyk ady

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Programowanie w modelu przesyłania komunikatów specyfikacja MPI, cd. Krzysztof Banaś Obliczenia równoległe 1

Programowanie i struktury danych


Programowanie Równoległe Wykład, CUDA praktycznie 1. Maciej Matyka Instytut Fizyki Teoretycznej

Systemy rozproszone. Państwowa Wyższa Szkoła Zawodowa w Chełmie. ** Instytut Fizyki Uniwersytet Marii Curie-Skłodowskiej w Lublinie

Optymalizacja R dlaczego warto przesi ± si na Linuxa?

MMX i SSE. Zbigniew Koza. Wydział Fizyki i Astronomii Uniwersytet Wrocławski. Wrocław, 10 marca Zbigniew Koza (WFiA UWr) MMX i SSE 1 / 16

RÓWNOLEGŁE ŁAMANIE HASEŁ METODĄ SŁOWNIKOWĄ W ŚRODOWISKACH MPI, OPENMP I CUDA

Programowanie kart graficznych

Wskaźniki. Informatyka

Lekcja 9 - LICZBY LOSOWE, ZMIENNE

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

Ekonometria. wiczenia 13 Metoda ±cie»ki krytycznej. Andrzej Torój. Instytut Ekonometrii Zakªad Ekonometrii Stosowanej

Imi i nazwisko... Egzamin - Programowanie Obiektowe II rok informatyki, studia pierwszego stopnia, niestacjonarne Termin zerowy

Proces tworzenia programu:

Programowanie wspóªbie»ne

Kompilowanie programów

Ćwiczenie nr: 9 Obliczenia rozproszone MPI

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

Temat: Programowanie zdarzeniowe. Zdarzenia: delegacje, wykorzystywanie zdarze. Elementy Windows Application (WPF Windows Presentation Foundation).

SVN - wprowadzenie. 1 Wprowadzenie do SVN. 2 U»ywanie SVN. Adam Krechowicz 24 czerwca Podstawowe funkcje. 2.1 Windows

Biblioteka PCJ do naukowych obliczeń równoległych

Wprowadzenie do MPI. Interdyscyplinarne Centrum Modelowania Matematycznego i Komputerowego Uniwersytet Warszawski

Programowanie aplikacji równoległych i rozproszonych

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

J zyk C dla sterowników programowalnych GeFanuc

Regulamin Usªugi VPS

Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.

Lab. 02: Algorytm Schrage

Matematyka wykªad 1. Macierze (1) Andrzej Torój. 17 wrze±nia Wy»sza Szkoªa Zarz dzania i Prawa im. H. Chodkowskiej

Software Architecture Document wersja 2.0-nal

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

Programowanie procesorów graficznych w CUDA.

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

System obliczeniowy laboratorium oraz. mnożenia macierzy

Część 4 życie programu

1. Odcienie szaro±ci. Materiaªy na wiczenia z Wprowadzenia do graki maszynowej dla kierunku Informatyka, rok III, sem. 5, rok akadem.

ZARZĄDZANIE PAMIĘCIĄ W TECHNOLOGII CUDA

Bash i algorytmy. Elwira Wachowicz. 20 lutego

Przetwarzanie sygnaªów

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

Podstawy Informatyki i Technologii Informacyjnej

Transkrypt:

Politechnika Krakowska Im. Tadeusza Ko±ciuszki Wydziaª Fizyki, Matematyki i Informatyki 20 stycznia 2012 Programowanie rozproszone i równolegªe niestacjonarne magisterskie uzupeªniaj ce. Streszczenie Obliczanie caªki przy u»yciu ±rodowiska: OpenMP, MPI i CUDA. Artur Bednarczyk, student I roku, Studia niestacjonarne Spis tre±ci 1 Wprowadzenie 1 I Specykacja komputerów oraz systemów operacyjnych 2 II OpenMP 2 III MPI 5 IV CUDA 8 V Podsumowanie 9 1 Wprowadzenie Celem pracy jest przedstawienie mo»liwo±ci oraz zastosowanie ±rodowisk do programowanie równolegªego i rozproszonego jakim s OpenMP, MPI i CUDA, które w znacznym stopniu pozwalaj na szybsze wykonywanie oblicze«. 1

Na wst pie przedstawie opis danych ±rodowisko i sposób konguracji systemu operacyjnego który umo»liwi poprawn dziaªanie a zarazem kompilacj danych programów. Kolejnym etapem jest prezentacja gªównych funkcji programów. Podsumowanie zakresu pracy obejme przedstawienei zalet i wad ±rodowisk OpenMP, MPI i CUDA, jako narz dzia, które w znaczym stopniu skracaj czas wykonywanych oblicze«. Cz ± I Specykacja komputerów oraz systemów operacyjnych Rozpocz ta praca na komputerze typu laptop: Ubuntu 11.10 32bit Genuine Intel CPU T2250@1.73GHz x2 GeForce Go 7300/PCI/SSE2 Ze wzgl du na brak wspracia od strony NVIDIA dla GPU: GeForce Go 7300 przeniosªem si na komputer typu PC: Ubuntu 11.10 64-bitowy Intel Core2 Duo CPU E7500@2.93GHz x2 GeForce GTX 260 Cz ± II OpenMP OpenMP to zbiór dyrektyw, funkcji bibliotecznych i zmiennych ±rodowiskowych maj cych pomóc w tworzeniu programów równolegªych w systemach z pami ci dzielon. Atutem takiego standardu jest fakt, i» wi kszo± producentów tego typu sprz tu wspiera OpenMP. Program zaczyna dziaªanie jako pojedynczy w tek, tzn. w tek gªówny (master thread), a» do momentu napotkania konstrukcji (pragmy) równolegªej. W tym momencie utworzona zostaje grupa w tków, przy czym w tek gªówny staje si nadrz dny w stosunku do pozostaªych. Dalej ka»dy w tek wykonuje program znajduj cy si w dynamicznym rozszerzeniu konstrukcji równolegªej (model SPMD), poza obszarami w których program jest wykonywany w modelu pracy dzielonej. Po zako«czeniu pracy w konstrukcji równolegªej w tki zostaj zsynchronizowane niejawn barier i tylko w tek gªówny kontynuuje prac. W programie mo»na u»y dowolnej ilo±ci konstrukcji równolegªych. Mo»emy równie» u»ywa dyrektyw w funkcjach które s wywoªywane z konstrukcji równolegªych. 2

Przykªadem urzycia poszczególnych konstrukcji jest fragment poni»szego kod programu obliczajacy caªke metod trapezów. // Inicjalizacja obszaru równoleglenia #pragma omp parallel dx=(xk-xp)/(oat)n; //ThreadsIdeNum(); cout<<"szerokosc podzialu wynosi: "<<dx<<endl; wynik=0; // shared > traktuje zmienna jako globalna(globalna dla watkow) // Obszar zrownoleglenia #pragma opm atomic parallel shared(i) private(wynik) //watki przydzielane dynamicznie omp_set_num_threads(8) #pragma omp for schedule(dynamic,1) for(i=1; i<n; i++) wynik +=Meth_Cal(xp + i * dx); wynik += (Meth_Cal(xp) + Meth_Cal(xk))/2; wynik *= dx; cout<<"wynik Calkowania metoda trapezow: "<<wynik<<endl; cout<<" "<<endl; // Koniec obszaru rownoleglenia 3

Wykres zale»no±ci czasu od ilo±ci w tków 4

Konguracja OpenMP Instalacja pakietów OpenMP sudo apt-get install libgomp.so.1 sudo apt-get install openmpi-dev Kompilacja programu g++ -fopenmp MethodCF_MTiMP.cpp Cz ± III MPI MPI (Message Passing Interface) standard biblioteki przesyªania komunikatów dla potrzeb programowania równolegªego. Najbardziej znan implementacj MPI jest MPICH, pochodz cy z Argonne National Laboratory i rozwijany przez grup pracowników dziaªu matematyki i informatyki tej instytucji. Dost pna jest wersja zarówno na platformy UNIX oraz Windows. Gªównymi zaletami korzystania z danego ±rodowiska jest: Wymian komunikatów mi dzy procesami Uzyskiwanie informacji o ±rodowisku Kontrol nad systemem Przy przesyªaniu komunikatów mi dzy procesami MPI stara si zachowa niezale»no± od platformy i wzale»no±ci od typu standardu dostarcza funkcje pozwalaj ce na zdeniowanie typów u»ytkownika dla potrzeb przesyªania komunikatów. Mo»liwe jest adresowanie komunikatów zarówno do konkretnych procesów, jak i do okre±lonych grup odbiorców. Dost pne s funkcje do deniowania grup procesów i pó¹niejszego rozsyªania komunikatów do tych grup. Komunikaty opatrzone s tagami pozwalaj cymi na pó¹niejsze selektywne odbieranie ich z kolejki w zale»no±ci od rodzaju. Mo»liwa jest wymiana komunikatów w trybie non-blocking pozwalaj cym na jeszcze wi ksze zrównoleglenie oblicze«. Podstawowymi funkcjami w danym ±rodowisku s : int MPI_Init(int *argc, char **argv) Funkcja inicjalizuje ±rodowisko wykonywania programu, m.in. tworzy domy±lny komunikator MPI_COMM_WORLD. Dopiero od momentu wywoªania MPI_Init mo»na u»ywa pozostaªych funkcji MPI. int MPI_Finalize() Funkcja zwalnia zasoby u»ywane przez MPI i przygotowuje system do zamkni cia. int MPI_Comm_rank(MPI_Comm comm, int *rank) Funkcja pobiera numer aktualnego procesu (w obr bie komunikatora comm) i umieszcza go w zmiennej rank. 5

int MPI_Comm_size(MPI_Comm comm, int *size) Funkcja pobiera ilo± procesów (w obr bie komunikatora comm i umieszcza j w zmiennej size. int MPI_Reduce(void *operand, void *result, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm) Pozwala wykona na przykªad sumowanie wszystkich cz ±ciowych wyników otrzymanych w procesach i umieszczenie wyniku w zmiennej. Argument root wskazuje dla którego procesu wynik ma by umieszczony w zmiennej result. Przykªadem urzycia poszczególnych funkcji jest fragment poni»szego kod programu obliczajacy caªke metod prostok tów. MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&myid); double t1 = MPI_Wtime(); if (myid==0) n=3; xk=5; xp=2; MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD); dx=(xk-xp)/n; for (sum=0.0, i=myid+1; i<n; i+=numprocs) mywynik += Meth_Cal(xp + i * dx); mywynik *= dx; MPI_Reduce(&mywynik, &wynik, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); ShowMenu(); if (myid == 0) printf("dx= %.0f \n", dx); printf("wynik %4.2f \n",wynik); double t2 = MPI_Wtime(); printf("czas oblicze«: %f\n",t2-t1); MPI_Finalize(); 6

Wykres dziaªania programu MPI 7

Instalacja pakietów MPI sudo apt-get install openmpi-dev sudo apt-get install package-developer Kompilacja programu mpicc MethodCF_MP_MPI.cpp mpicc MethodCF_MT_MPI.cpp Cz ± IV CUDA CUDA jest opracowan przez rm NVIDIA, która udost pnia wzrost wydajno±ci oblicze«przy wykorzystaniu mocy procesora GPU. Integraln cz ±ci architektury CUDA jest oparte na j zyku programowania C ±rodowisko programistyczne wysokiego poziomu, w którego skªad wchodz kompilator "nvcc". Procesor GPU wykorzystuje pami wspóªdzielon za pomoc w tków/bloków których mo»e by od 128 a» do 512. Gªówn dziaªaniem CUDA jest mo»liwo± odczytywania i zapisywania danych z dowolnego adresu pami ci GPU. Podstawowe funkcje wykorzystywane w programowaniu CUDA: cudamalloc: przekazywanie alokacji do funkcji lub do oczytu i zapisu, która wykona si na poszczególnych argumentach. kernel void *: przekazywanie parametrów do j dra systemu. cudamemcpy(): uzyskanie dost pu do pami ci za po±rednictwem kodu hosta. Tak samo jak w standardzie C i memcpy() z dodatkowego parametu aby okre±li ¹ródªa i wska¹nik docelowego punktu pami ci. cudafree: zwolnienie pami ci przydzielonej z cudamalloc(). Poni»szy kod pokazuje sposób urzycia poszczególnych funkcji obliczajacej caªke metod simpsona. global void dxmethod(int xk, int xp, int n, int *dx) *dx=(xk-xp)/n;... cudamalloc((void**)&dev_dx, sizeof(int)); dxmethod<<<1,1>>>(5, 3, 2, dev_dx); for (i=1; i<=n ; i++) x = xp + i * dx; 8

mywynik += Meth_Cal(x-dx/2); cudamemcpy( &dx, dev_dx, sizeof(int), cudamemcpydevicetohost); if (i < n) wynik+=meth_cal(x);... cudafree(dev_dx); Instalacja pakietów CUDA sudo apt-get install nvidia-current nvidia-current-dev nvidia-currentupdates nvidia-current-updates-dev sudo apt-get install nvidia-cuda-toolkit sudo apt-get install nvidia-cuda-sdk Kompilacja programu nvcc -c MethodCF_MS_CUDA.cu g++-4.4 -o runme -L /usr/local/cuda/lib -lcudart MethodCF_MS_CUDA.o Cz ± V Podsumowanie Celem danego projektu byªo przestawienie ±rodowiska OpenMP, MPI i CUDA wraz z ich mo»liwo±ciami do programowania równolegªego i rozproszonego, które w znaczym stopniu wspieraj prac przy bardzo skomplikowanych obliczeniach np: matematycznych czy zycznych. Nie które z w/w ±rodowisk posiadaj prosty sposób implementacji w j zykach programowania takich jak C, C++, Java czy Fortran co powoduje i» osoba która nie zajmuje si na codzie«programowanie mo»e wesprzec swoj prac i uzyska szybki dost p do wyników swoich oblicze«. Literatura [1] Bibliograa [2] 1.OpenMP, http://computing.llnl.gov/tutorials/openmp/ Author:Blaise Barney, Lawrence Livermore National Laboratory [3] 2.MPI, http//:computing.llnl.gov/tutorials/mpi/ Author: Blaise Barney, Lawrence Livermore National Laboratory [4] 3.CUDA, CUDA BY EXAMPLE 2010. An Introduction to General-Purpose GPU Programming Author: Jason Sanders, Edward Kandrot. Nvidia. 9