Programowanie współbieżne WYKŁADY - CZ. 5EX. PRZYKŁAD. LICZBY PIERWSZE. Andrzej Baran

Podobne dokumenty
Programowanie współbieżne... (12) Andrzej Baran 2010/11

Programowanie współbieżne... (6)

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

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

3. Podstawowe funkcje mamematyczne. ZAPOZNAĆ SIĘ!!!

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

Matematyka dyskretna - wykład - część Podstawowe algorytmy kombinatoryczne

Operacje grupowego przesyłania komunikatów

Programowanie w VB Proste algorytmy sortowania

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

Informatyka 1. Procedury i funkcje, struktura programu w Pascalu

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

Podstawy programowania

Instrukcja wyboru, pętle. 2 wykład. Podstawy programowania - Paskal

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

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

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Wrocław, dn. 19 kwietnia 2006 roku. Anna Kaleta Piotr Chojnacki IV rok, informatyka chemiczna Liceum Ogólnokształcące nr 10 we Wrocławiu

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

Wstęp do Informatyki

Wstęp do programowania

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

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

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy

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

Wstęp do programowania

LibreOffice Calc VBA

Sortowanie przez scalanie

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

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)

Obliczenie azymutów ze współrzędnych punktów tablica struktur punktów, tablica struktur azymutów

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Pętle. Programowanie komputerowe

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

Instrukcje sterujące

wykres funkcji pierwiastki

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Metody Metody, parametry, zwracanie wartości

Fortran 90/95 wykład 1

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

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

Wstęp do programowania

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

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

Modelowanie złożonych układów cyfrowych (1)

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Programowanie współbieżne i rozproszone

a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Instrukcje podsumowanie. Proste: - przypisania - wejścia-wyjścia (read, readln, write, writeln) - pusta - po prostu ; (średnik) Strukturalne:

Algorytmy i struktury danych. Wykład 4

2.Sprawdzanie czy podana liczba naturalna jest pierwsza Liczba pierwsza to liczba podzielna tylko przez 1 i przez siebie.

Języki formalne i techniki translacji

Algorytmy. Programowanie Proceduralne 1

FUNKCJA REKURENCYJNA. function s(n:integer):integer; begin if (n>1) then s:=n*s(n-1); else s:=1; end;

Programowanie równoległe

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

Planowanie eksperymentu 2 (k p) w 2 r blokach. Stanisław Jaworski, Wojciech Zieliński

PASCAL. Etapy pisania programu. Analiza potrzeb i wymagań (treści zadania) Opracowanie algorytmu Kodowanie Kompilacja Testowanie Stosowanie

Programowanie współbieżne... (5)

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Proste programy w C++ zadania

Palindromy. Przykładowe rozwiązanie

Tablice, funkcje - wprowadzenie

Wieczorowe Studia Licencjackie Wrocław, Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 2. Programowanie komputerowe

Laboratorium Programowania Kart Elektronicznych

Właściwości i metody obiektu Comment Właściwości

Informatyka A. Algorytmy

Język C++ wykład VIII

I. Podstawy języka C powtórka

WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński

Modelowanie Procesów Jądrowych

PODSTAWY INFORMATYKI wykład 10.

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku


Programowanie współbieżne... (2)

Programowanie systemów czasu rzeczywistego laboratorium. Ćwiczenie 2. Temat zajęć: pakiety, zadania, synchronizacja czasowa, mechanizm spotkań

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja cz. 1

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

Wykład IV Algorytmy metody prezentacji i zapisu Rzut oka na język PASCAL

procesów Współbieżność i synchronizacja procesów Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

Instrukcje pętli przykłady. Odgadywanie hasła. 1) Program pyta o hasło i podaje adres, gdy hasło poprawne lub komunikat o błędnym haśle.

Liczby całkowite i rzeczywiste

Podstawy programowania funkcjonalnego

Instrukcje cykliczne (pętle) WHILE...END WHILE

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

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

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17








Transkrypt:

Programowanie współbieżne WYKŁADY - CZ. 5EX. PRZYKŁAD. LICZBY PIERWSZE. Andrzej Baran baran@kft.umcs.lublin.pl

Liczby pierwsze I Program: pierwsze.f90 - znajdowanie liczb pierwszych w przedziale 2..n Metoda: przesiewanie (Eratostenes); dekompozycja danych wejsciowych; Uwaga. Do wyznaczenia liczb pierwszych z przedzialu B=[floor(sqrt(n))+1..n] wystarcza znajomosc liczb pierwszych z przedzialu A=[2..floor(sqrt(n))] Kazda liczba zlozona z B dzieli sie bowiem przez jedna lub wiecej liczb pierwszych z A. Liczby pierwsze z A bedziemy nazywac podzielnikami. Jesli liczba z A dzieli sie przez podzielnik to jest zlozona. Przyklad. Znalezc liczby pierwsze z przedzialu A=[2..10000]. Najpierw znajdujemy liczby pierwsze z przedzialu [2..100]. Dla dowolnego j@b (@=nalezy) nalezy sprawdzic czy j dzieli sie przez ktorys z podzielnikow, ktorymi sa w tym przypadku liczby 2, 3, 5,..., 97 (razem 25 liczb). W pierwszym kroku znajdujemy podzielniki (w kazdym procesie; w ten sposob oszczedzamy na komunikacji). W kroku drugim dokonujemy dekompozycji danych: przedzial B dzielimy na p podprzedzialów, gdzie p jest liczba procesow, o dlugosci d=ceiling((n-floor(sqrt(n)))/p). Procesy 0, 1, 2,..., p otrzymuja podprzedzialy [s+1..s+d], [s+1+d..s+2d],...,[s+1+(p-1)d..n], gdzie s=floor(sqrt(n)). Liczby liczb pierwszych sa zbierane w procesie 0 w tablicy liczby_grom z pomoca MPI_Gather(). Poniewaz liczby liczb pierwszych, gromadzone w procesie 0, w poszczegolnych podprzedzialach sa rożne, wiec procedura MPI_Gather tego nie zrobi (bo wymaga ona by dane gromadzone mialy ten sam rozmiar)

Liczby pierwsze II i nalezy uzyc procedury MPI_Gatherv(). program liczby_pierwsze use mpi definiowanie przedzialu 2..n integer, parameter :: n=10000000 integer, parameter :: s=sqrt(float(n)) integer, parameter :: m=n/10 integer, dimension (0:s) :: a tablica pomocnicza integer, dimension (0:s) :: podzielniki podzielniki z przedzialu 2..sqrt(n) integer, dimension (0:m-1) :: pierwsze liczby pierwsze w podprzedzialach integer :: liczba, reszta, dl_podprz dlugosc podprzedzialu integer :: id, p id procesu i liczba procesow integer :: llpier liczba liczb pierwszych integer, dimension (:), allocatable :: liczby_grom tab. liczb gromadzonych integer, dimension (:), allocatable :: przem tablica przemieszczen double precision :: czas MPI_Wtime() func. is double... call MPI_Init( ierr ) call MPI_Comm_Rank(MPI_COMM_WORLD, id, ierr) if ( id == 0 ) czas = MPI_Wtime() call MPI_Comm_Size(MPI_COMM_WORLD, p, ierr) wyznaczanie podzielnikow z przedzialu 2..s do i=2,s a(i)=1 inicjowanie i=1

Liczby pierwsze III llpier=0 lpodz=0 do while ( i < s ) i=i+1 if ( a(i) == 1 ) then pierwsze(lpodz)=i zapamietanie liczby pierwszej podzielniki(llpier)=i,, podzielnika lpodz=lpodz+1 llpier=llpier+1 wykreslanie liczb zlozonych, wielokrotnosci i do k=i+i, s, i a(k)=0 rownolegle wyznaczanie liczb pierwszych w podprzedzialach dl_podprz=(n-s)/p obliczanie dlugosci podprzedzialu if ( mod(n-s, p) /= 0 ) dl_podprz=dl_podprz+1 if ( id > 0 ) llpier=0 zerowanie licznika l. pierwszych w procesach > 0 do liczba=s+1 + dl_podprz*id, s + dl_podprz*(id+1) if ( liczba <= n ) then do k=0, lpodz-1 reszta=mod(liczba, podzielniki(k)) if ( reszta == 0 ) exit liczba zlozona if ( reszta /= 0 ) then pierwsze(llpier)=liczba zapamietanie liczby pierwszej llpier=llpier+1

Liczby pierwsze IV allocate(liczby_grom(0:p-1), STAT=istatus) call MPI_Gather(llpier, 1, MPI_INTEGER, liczby_grom, 1, MPI_INTEGER, 0, & MPI_COMM_WORLD, ierr) allocate(przem(0:p-1), STAT=istatus) tablica przemieszczen przem(0)=0 liczba_p=liczby_grom(0) calkowita liczba wyznaczonych liczb pierwszych do i=1, p-1 przem(i)=przem(i-1)+liczby_grom(i-1) liczba_p=liczba_p+liczby_grom(i) gromadzenie liczb pierwszych w procesie 0; call MPI_Gatherv(pierwsze, llpier, MPI_INTEGER, pierwsze, liczby_grom, & przem, MPI_INTEGER, 0, MPI_COMM_WORLD, ierr) write(*,*) id, llpier if ( id == 0 ) then czas = MPI_Wtime() - czas write(*,*) Czas =, czas, sec deallocate(liczby_grom, przem, STAT=istatus) call MPI_FINALIZE(ierr) end program liczby_pierwsze Podstawa: Z. Czech: Wprowadzenie do programowania równoległego. PWN, Warszawa, 2010.

MPI_Gatherv(...) call MPI_GATHERV ( wysylane_dane(:) liczba_wysylanych_danych typ_wysylanych_danych odbierane_dane( ) liczba_odbieranych_danych( ) tablica_przemieszczen( ) typ_odbieranych_danych proces_glowny komunikator ) dane INTEGER MPI_Datatype dane INTEGER INTEGER MPI_Datatype INTEGER MPI_COMM

Jak korzystać z tablicy przemieszczeń? Dane z procesu 0 umieszczane s a od pozycji odbierane_dane+przemieszczenie(0), z procesu 1 od pozycji odbierane_dane+przemieszczenie(1) itd. Parametr odbierane_dane ma charakter wyjściowy (pozostale parametry to parametry wejściowe) i ma znaczenie tylko w procesie głównym (0).