Algorytmy równoległe: prezentacja i ocena efektywności prostych algorytmów dla systemów równoległych

Podobne dokumenty
Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Algorytmy równoległe. Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2010

Zadania jednorodne 5.A.Modele przetwarzania równoległego. Rafał Walkowiak Przetwarzanie równoległe Politechnika Poznańska 2010/2011

Algorytmy Równoległe i Rozproszone Część V - Model PRAM II

Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami

Analiza algorytmów zadania podstawowe

Analiza efektywności przetwarzania współbieżnego. Wykład: Przetwarzanie Równoległe Politechnika Poznańska Rafał Walkowiak Grudzień 2015

Algorytmy i Struktury Danych, 2. ćwiczenia

Przetwarzanie równoległesprzęt. Rafał Walkowiak Wybór

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je.

Wykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy

Projektowanie algorytmów równoległych. Zbigniew Koza Wrocław 2012

Analiza efektywności przetwarzania współbieżnego

Przetwarzanie równoległe Zadanie domowe III

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

Wydajność komunikacji grupowej w obliczeniach równoległych. Krzysztof Banaś Obliczenia wysokiej wydajności 1

Sortowanie. Bartman Jacek Algorytmy i struktury

ANALIZA EFEKTYWNOŚCI MNOŻENIA MACIERZY W SYSTEMACH Z PAMIĘCIĄ WSPÓŁDZIELONĄ

Luty 2001 Algorytmy (4) 2000/2001

Strategia "dziel i zwyciężaj"

Algorytmy i Struktury Danych

EFEKTYWNOŚĆ MNOŻENIA MACIERZY W SYSTEMACH Z PAMIĘCIĄ WSPÓŁDZIELONĄ

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Szczegółowy program kursów szkoły programowania Halpress

Lista 0. Kamil Matuszewski 1 marca 2016

Algorytmy i struktury danych

EGZAMIN MATURALNY Z INFORMATYKI. 10 maja 2017 POZIOM ROZSZERZONY. Godzina rozpoczęcia: 14:00 CZĘŚĆ I

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Zaawansowane algorytmy i struktury danych

Algorytmy i struktury danych

TEORETYCZNE PODSTAWY INFORMATYKI

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer

Stronicowanie w systemie pamięci wirtualnej

Podstawowe moduły układów cyfrowych układy sekwencyjne cz.2 Projektowanie automatów. Rafał Walkowiak Wersja /2015

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

Algorytmy i struktury danych. Wykład 6 Tablice rozproszone cz. 2

5. Model komunikujących się procesów, komunikaty

Struktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott

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

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

Materiały pomocnicze do laboratorium. 1. Miary oceny efektywności 2. Mnożenie macierzy 3. Znajdowanie liczb pierwszych

Algorytmy i struktury danych. Wykład 4

Podstawy Informatyki. Sprawność algorytmów

Podstawy techniki cyfrowej. Układy asynchroniczne Opracował: R.Walkowiak Styczeń 2014

PODSTAWY INFORMATYKI wykład 10.

Algorytmy sortujące 1

Sortowanie - wybrane algorytmy

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

Wykład 1 Wprowadzenie do algorytmów. Zawartość wykładu 1. Wstęp do algorytmów i struktur danych 2. Algorytmy z rozgałęzieniami.

Programowanie równoległe

INFORMATYKA SORTOWANIE DANYCH.

Materiały dla finalistów

Drzewa binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np.

Programowanie Współbieżne. Algorytmy

Sortowanie topologiczne skierowanych grafów acyklicznych

Przygotowanie kilku wersji kodu zgodnie z wymogami wersji zadania,

Przetwarzanie równoległe

Algorytmy i Struktury Danych

KODY SYMBOLI. Kod Shannona-Fano. Algorytm S-F. Przykład S-F

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 9. Karol Tarnowski A-1 p.

WHILE (wyrażenie) instrukcja;

Wstęp do programowania

Programowanie Równoległe i Rozproszone. Algorytm Kung a. Algorytm Kung a. Programowanie Równoległe i Rozproszone Wykład 8. Przygotował: Lucjan Stapp

TEORETYCZNE PODSTAWY INFORMATYKI

WHILE (wyrażenie) instrukcja;

Stan globalny. Krzysztof Banaś Systemy rozproszone 1

1. Liczby i w zapisie zmiennoprzecinkowym przedstawia się następująco

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

1. Napisz program, który wyświetli Twoje dane jako napis Witaj, Imię Nazwisko. 2. Napisz program, który wyświetli wizytówkę postaci:

Egzamin, AISDI, I termin, 18 czerwca 2015 r.

Przetwarzanie równoległesprzęt

Programowanie Współbieżne. Wstęp

Za pierwszy niebanalny algorytm uważa się algorytm Euklidesa wyszukiwanie NWD dwóch liczb (400 a 300 rok przed narodzeniem Chrystusa).

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

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

Jeszcze o algorytmach

Drzewa rozpinajace, zbiory rozłaczne, czas zamortyzowany

Algorytmy i Struktury Danych, 2. ćwiczenia

Rekurencja. Przykład. Rozważmy ciąg

Wysokość drzewa Głębokość węzła

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

Złożoność obliczeniowa zadania, zestaw 2

Przesyłania danych przez protokół TCP/IP

Złożoność algorytmów. Wstęp do Informatyki

Wstęp do programowania. Drzewa. Piotr Chrząstowski-Wachtel

Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Układy arytmetyczne. Joanna Ledzińska III rok EiT AGH 2011

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

Ataki na RSA. Andrzej Chmielowiec. Centrum Modelowania Matematycznego Sigma. Ataki na RSA p. 1

Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to

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

Wstęp do programowania. Dziel i rządź. Piotr Chrząstowski-Wachtel

Równoległe algorytmy sortowania. Krzysztof Banaś Obliczenia równoległe 1

Programowanie w VB Proste algorytmy sortowania

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

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

Transkrypt:

Algorytmy równoległe: prezentacja i ocena efektywności prostych algorytmów dla systemów równoległych Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2018/19

Problem: znajdowanie maksimum w zbiorze liczb Architektura systemu: drzewo binarne węzły - maksimum 2 liczb głębokość = 3 praca = 4+2+1 = 7 (operacji) obliczenia w potoku Maksimum w drzewie procesorów n - liczność zbioru Praca: W(n) = n-1 cykli porównań Złożoność: f(p,n) = O(log n) S p (n),e p (n) n=p+1 2

Problem: znajdowanie maksimum w k zbiorach liczb Architektura systemu: drzewo binarne 3 1 2 k - krotne obliczenia w potoku k - zbiorów n - liczność każdego zbioru Praca: W(n) = k*(n-1) Złożoność: f(p,n) = O(k +log n) Maksimum w drzewie procesorów 3

Znajdowanie maksimum analiza efektywności - aglomeracja Czy aglomeracja (połączenie zadań) jest możliwa bez spadku stopień równoległości? I II Przesłania poszczególnych etapów Zgrupowanie operacji realizowanych sekwencyjnie - możliwy przydział do jednego węzła przetwarzającego, mniej komunikacji, ten sam stopień równoległości. I I I III I II III II Maksimum w drzewie procesorów 4

Znajdowanie maksimum analiza efektywności po aglomeracji Rezultat aglomeracji: Mniej przesłań między węzłami Niższa złożoność obliczeniowa Ta sama ilość pracy ( 7 porównań) Wzrost stopnia wierzchołka ( 3 do 5 ) Mniejsza liczba procesorów (4 zamiast 7) Maksimum w drzewie procesorów 5

Analiza efektywności -aglomeracja (3) wykres praca-czas Procesory A - 3*t por +7*t kom = (log 2 n)t por +(2log 2 n+1)t kom B - 3*t por +5*t kom = (log 2 n)t por +(log 2 n+2)t kom Bez aglomeracji Maksimum w drzewie procesorów Po aglomeracji Czas 6

Sortowanie liczb architektura systemu: łańcuch procesorów Wejście: ciąg liczb (minimum jedna) zakończonych -1 Wyjście: posortowany ciąg zakończony -1 Kod dla wszystkich węzłów: pobierz a pobierz b while b > 0 do { if a>b then wyślij b we pobierz b } wyślij a; wyślij b; else wyślij a; a:=b wy Sortowanie liczb w łańcuchu procesorów 7

Działanie algorytmu na wejście łańcucha podajemy kolejno wartości: 2,3,4,1,-1 proc1 proc2 proc3 proc4 czas 2,3 2k,p 3,4 2 2k,p 4,1 2,3 2k,p 4,-1 3,1 2 2k,p -1 3,4 2,1 2k,p 4,-1 2,3 1 2k,p -1 3,4 1,2 2k,p 4,-1 2,3 2k,p -1 3,4 2k,p 4,-1 2k,p -1 we wy Sortowanie liczb w łańcuchu procesorów 8

Sortowanie liczb w łańcuchu wykres praca- czas t 1 sortowanie na I czas t 2 sortowanie na I-IV t 3 zbieranie wyników t 1 = (n-1)*t p +(2n-1)* t k n* t c t c = t p +2t k t 2 =t 1 +(n-2)*(t p +t k ) 2n*t c t 3 =(n+2)*t c t 2 +t 3 3n*t c f Am = 3n*t c = O(n) Sortowanie liczb w łańcuchu procesorów 9

Złożoność sortowania liczb w łańcuchu Załóżmy, że liczba procesorów jest równa n - wielkości zbioru liczb do posortowania. Każdy procesor musi wykonać po n-1 cykli porównań (cykl - pobranie/wysłanie, porównanie), gdyż każda liczba przez każdy procesor przechodzi. Problemem jest wyznaczenie przesunięcia czasowego pomiędzy rozpoczęciem pracy kolejnego procesora Ważne są tutaj następujące spostrzeżenia: 1. Każdy kolejny krok porównania generuje jedną liczbę do wysłania na kolejny niewykorzystany jeszcze procesor; 2. Każdy krok porównania wymaga 2 transmisji blokujących = wysłanie i odbiór = RAZEM Tc=tp+2tk 3. Aby kolejny procesor rozpoczął porównywanie potrzebuje 2 liczb - konieczne jest wykonanie w systemie 2 następujących po sobie porównań na procesorze wcześniejszym. 4. Po ostatnim porównaniu (na ostatnim i każdym procesorze) mamy 2 komunikacje dla wysłania wyników porównania w odpowiedniej kolejności. Liczba kroków: Liczba kroków (porównanie i 2 transmisje) do rozpoczęcia pracy procesora p to: 2*(p-1) Liczba kroków pracy ostatniego procesora to n-1 cykli (porównanie i przesłania) Zatem czas przetwarzania T to: [2 * (p-1) + n-1] *Tc+ 2 tk Dla p1=n T= 3n -3 lub T= 3p1-3 Dla p2=n-1 T= 3n-5 lub T=3p2-2 Sortowanie liczb w łańcuchu procesorów 10

Suma rozproszonych elementów dla każdego procesora Architekrura: drzewo binarne Algorytm: 1. Elementy każdym węźle liczba węzłów K 2. Wysłanie liczby w kierunku korzenia 3. Wyznaczenie sum częściowych (suma 3 wartości) w węzłach pośrednich 4. Sumy częściowe w propagują w kierunku korzenia 5. Suma ostateczna wyznaczona w korzeniu 6. Propagacja sumy do wszystkich węzłów Liczba operacji praca: OBLICZENIA - dla każdego węzła oprócz liści - 2 komunikacje i 2 sumowania PROPAGACJA WYNIKU - dla każdego węzła oprócz liści 2 komunikacjei w dół drzewa RAZEM: (K-1)/2 * ( 2t kom + 2 t sum ) + (K-1) t kom - Obliczenia, propagacja wyniku, Suma rozproszonych elementów - drzewo 11

Suma rozproszonych elementów dla każdego procesora Architekrura: drzewo binarne Czas przetwarzania liczba kolejno realizowanych kroków algorytmu: liczba poziomów drzewa oprócz poziomu liści - realizowany cykl - 2 odbiory komunikatu (synchroniczne) i 2 sumowania liczba poziomów drzewa oprócz poziomu liści 2 przesłania RAZEM: (log 2 (K+1) - 1) * ( 2t kom + 2 t sum ) + (log 2 (K+1) - 1) * 2t kom Uwagi : log 2 K (t kom + t sum ) Liczba operacji sumowania równa minimalnej. Poziom równoległości obliczeń i równoległości komunikacji zmienny Możliwość dlaszej minimalizacji liczby przesłań (rozsyłanie wyniku) w innej architekturze prezentacja wkrótce. Suma rozproszonych elementów - drzewo 12

Suma rozproszonych elementów dla każdego procesora architektura systemu: łańcuch dwukierunkowy Algorytm: Węzeł centralny, całkowita liczba węzłów K Analogiczna do drzewa praca tym razem równoległa w 2 gałęziachprzesyłanie do węzła centralnego z sumowaniem. Rozsyłanie wyniku do wszystkich Liczba operacji praca: K-3 razy - dla każdego węzła oprócz węzłów końcowych i centralnego - odbiór komunikatu i sumowanie, w węźle centralnym 2 odbiory i 2 sumowania K-3 razy dla każdego węzła oprócz węzłów końcowych i centralnego - wysłanie informacji, węzeł centralny 2 przesłania liczba operacji razem: (K-3) * ( t kom + t sum ) + 2* t kom + 2*t sum + (K-3) * t kom + 2* t kom 2 K t kom + K t sum Suma rozproszonych elementów - łańcuch dwukierunkowy 13

Suma rozproszonych elementów dla każdego procesora architektura systemu: łańcuch dwukierunkowy Czas przetwarzania liczba kolejno realizowanych kroków algorytmu: o o o o o M = ½ * (K-3) cykli - odbiór komunikatu i sumowanie; węzeł centralny- 2 odbiory i 2 sumowania M przesłań zbieranie wyniku 2 przesłania - odbiór i wysłanie (komunikacja asynchroniczna) węzeł centralny RAZEM: ½ (K-3) (t kom + t sum ) + 2 t sum + 2 t kom + ½* (K-3) * t kom + 2 * t kom K t kom + ½ K t sum Uwagi : o Liczba operacji sumowania równa minimalnej. o Poziom równoległości obliczeń i komunikacji bliski 2. o K-3 - wszystkie węzły oprócz centralnego i końcowych Suma rozproszonych elementów - łańcuch dwukierunkowy 14

Suma rozproszonych elementów dla każdego procesora architektura: pierścień jednokierunkowy Węzeł centralny, całkowita liczba węzłów K Sekwencyjne sumowanie i przesyłanie sum częściowych do węzła centralnego; Rozsyłanie wyniku do wszystkich węzłów Liczba operacji praca: K-1 razy - dla każdego węzła oprócz węzła następnego po centralnym - odbiór komunikatu i sumowanie, K-1 razy dla każdego węzła oprócz węzła przed centralnym - wysłanie wyniku sumy RAZEM: (K-1) * ( t kom + t sum ) + (K-1) * t kom K t sum +2K t kom Czas przetwarzania złożoność: Jak wyżej, gdyż wszystkie operacje realizowane sekwencyjnie. Uwagi : Liczba operacji sumowania równa minimalnej. Brak równoległości. Możliwość minimalizacji liczby przesłań w tej architekturze (uniknięcie rozsyłania wyniku) poprzez wyznaczanie sumy we wszystkich węzłach porównaj następny algorytm. Suma rozproszonych elementów - pierścień jednokierunkowy 15

Suma rozproszonych elementów dla każdego procesora łańcuch jednokierunkowy GLOBALNE SCALANIE W KAŻDYM Z WĘZŁÓW UBOGA STRUKTURA KOMUNIKACYJNA węzeł węzeł obliczeniowy, komputer realizujący obliczenia a zawiera sumę lokalnie dostępnych w węźle elementów; p liczba węzłów; p>1 S zawiera sumę częściowa i ostateczną wszystkich elementów ze wszystkich węzłów k:=2;s := a jeśli parzysty to odbierz b1; wyślij a; jeśli nieparzysty to wyślij a; odbierz b1; s:= s + b1 while k < p jeśli parzysty to odbierz b2; wyślij b1;b1:=b2; jeśli nieparzysty to wyślij b1; odbierz b1; s:= s + b1; k:= k + 1; Suma rozproszonych elementów - pierścień jednokierunkowy Praca: p*(p-1) sumowań, p*(p-1) komunikacji Złożoność: p-1 sumowań, 2*(p-1) komunikacji synchronicznych (kod obok) Zastosowanie komunikacji asynchronicznej (jednoczesnej) dla danych wysyłanych i odbieranych (dane różne) w każdym kroku pracy pozwala na obniżenie złożoności do p-1 sumowań, p-1 komunikacji. 16

Suma rozproszonych elementów dla każdego procesora łańcuch jednokierunkowy przykład 4 węzły 4 1 3 Operacje węzła 2 (zawiera sumę swoich eleemntów = a) 1. wyślij a;odbierz b; s = a+b; 2. wyślij b; odbierz b; s = s+b; 3. wyślij b;odbierz b; s = s +b; liczba węzłów p, liczba kroków przetwarzania p-1, każdy krok przetwarzania to: nadanie, odbiór, sumowanie 2 Suma rozproszonych elementów - pierścień jednokierunkowy 17

Wyznaczanie sumy rozproszonych elementów - scalenie danych lokalnie w węzłach Graf algorytmu scalania danych (wartości scalane w dolnych węzłach grafu p wartosci) łuk - operacja przesłania jednej liczby sumy dotychczas odebranych lub posiadanych początkowo wartości węzły wyższych poziomów operacje sumowania odebranych 2 wartości jednakowa suma p wartości dostępna w każdym z węzłów górnego poziomu grafu Praca = 3*p Złożoność uwzględniająca możliwe do wykonania jednocześnie kroki = log 2 p Złożoność jest liczbą kroków polegających na odbieraniu 2 wartości oraz ich sumowaniu Suma elementów dla każdego węzła - hiperkostka 18

Aglomeracja zadań realizowanych sekwencyjnie zadania-operacje realizowane sekwencyjnie połączone w jedno zadanie, minimalizacja komunikacji (dwa razy mniej), wzrost lokalności danych kolejne kroki realizowane po aglomeracji w każdym zadaniu (jedno z 8), to wysłanie i odbiór różnych liczb (sumy własnej i obcej) oraz zsumowanie tych liczb Architektura połączeń komunikacyjnych między utworzonymi (aglomeracja) zadaniami to hiperkostka (na rysunku 3 wymiarowa). Suma elementów dla każdego węzła - hiperkostka 19

Wyznaczanie sumy rozproszonych elementów- wynik aglomeracji Wymiana danych miedzy podzbiorami procesorów możliwa dzięki bogatej strukturze komunikacyjnej 8 zadań to: 3 fazy wymiany wartości między parami zadań 3 fazy dodawania dodawanie 2 wartości, wyznaczana lokalnie suma elementów pochodzących z 2,4 lub 8 węzłów Pracę można zrzutować w sposób 1 zadanie na 1 procesor na 3 wymiarową kostkę procesorów. Suma elementów dla każdego węzła - hiperkostka 20

Wyznaczanie sumy rozproszonych elementów - struktura przetwarzania w systemie 4 wymiarowej kraty podwójnej Sumowanie danych rozproszonych w 16 węzłach log 2 16 = 4 kroki (wymiany danych i sumowania w 4 wymiarach) Suma elementów dla każdego węzła - hiperkostka 21

Znajdowanie liczb pierwszych Metody: dzielenie badanej liczby przez liczby pierwsze i badanie wartości reszty z dzielenia usuwanie wielokrotności - usuwanie ze zbioru badanych liczb liczb będących wielokrotnością liczb pierwszych Jakie liczby pierwsze uwzględniać dla badanej liczby (bądź górnego zakresu badanego przedziału) n? Wystarczy znaleźć dla każdej liczby złożonej minimalny podzielnik: dla 35 5, dla 77 7, dla 121 11. Czy istnieje warunek ograniczający maksymalną wartość najmniejszego podzielnika liczby n? Tak Maksymalna wartość najmniejszego podzielnika liczby złożonej n wynosi n 1/2. Aby znaleźć zatem liczby pierwsze x i <k,l> należy: odrzucić liczby dzielące się bez reszty przez liczby pierwsze brane z przedziału <2, x i 1/2 > lub usunąć zbadanego przedziału liczby będące wielokrotnością liczb pierwszych z przedziału <2, l 1/2 > Znajdowanie liczb pierwszych 22

Wykreślanie z tablicy Z badanego zbioru (tablicy) usuwamy wielokrotności (jakie?) liczb pierwszych z przedziału <2,zakres górny 1/2 > Przykład dla zakresu : <2,65> 2 : 4,6,8,...64 3 : 9,15,21,27,33,39,45,51,57,63 5 : 25,35,55,65 7 : 49 nie jest konieczna do rozpoczęcia obliczeń znajomość wszystkich liczb-pierwszych z przedziału <2,zakres górny 1/2 >; kolejno pojawiające się liczby pierwsze mogą być wykorzystane dopiero później, gdyż wyznaczanie wielokrotności mniejszych liczb pierwszych odbywa się dla całego badanego przedziału i zajmuje stosunkowo dużo czasu. Znajdowanie liczb pierwszych 23

Sito Eratostenesa - koncepcja podejścia funkcjonalnego do podziału w architekturze z przekazywaniem komunikatów znaczenie tylko koncepcyjne niska efektywność 2,3,4,5,..,12 0 /2 /3 /5 /7 11,13,17,19,23,29,31,37,41,..., Pierwsza liczba odebrana przez każdy z procesów jest traktowana jako dzielnik i jako liczba pierwsza. Liczby dzielące się z resztą są przesyłane dalej. Wynik przetwarzania liczby pierwsze pojawiają się na wyjściu systemu oraz rezydują w procesach (należy je przesłać na wyjście). Liczba procesów niezbędbych dla zakresu <n,k> jest równa liczbie liczb pierwszych w zakresie od <2, k 1/2 > około 2k 1/2 /ln k Znajdowanie liczb pierwszych 24