Obliczenia równoległe w językach interpretowanych
Transkrypt
Obliczenia równoległe w językach interpretowanych
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Obliczenia równoległe w jezykach
˛
interpretowanych
Aleksander Pohl
Katedra Informatyki, Akademia Górniczo-Hutnicza
18 maja 2009
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Plan prezentacji
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Plan prezentacji
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Jezyki
˛
interpretowane
I
Ruby
I
I
I
I
I
dynamiczny, obiektowo-zorientowany
popularny dzieki
˛ frameworkowi Ruby on Rails
idealny do prototypowania
alternatywne implementacje: MRI, YARV, JRuby, Rubinius,
IronRuby, MagLev, ...
Python
I
I
dynamiczny, obiektowo-zorientowany
popularny dzieki
˛ Google – prototyp wyszukiwarki napisany
w Pythonie
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Obsługa watków
˛
I
Ruby 1.8 wykorzystuje zielone watki
˛
I
Ruby 1.9 wykorzystuje natywne watki
˛
I
Python wykorzystuje natywne watki
˛
ale...
I
ze wzgledu
˛
na GIL niezależnie od liczby procesorów,
tylko jeden watek
˛
realizujacy
˛ kod Rubiego/Pythona
wykonywany w danym momencie
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Przykład (1)
1
2
3
def calc()
10000000.times{|i| i * i}
end
4
5
6
7
8
9
10
11
def parallel(runs)
Benchmark.measure {
threads = []
runs.times{ threads << Thread.new{calc()} }
threads.each{|t| t.join}
}
end
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Przykład (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
def parallel_proc(runs)
Benchmark.measure {
pids = []
runs.times{
pid = fork
unless pid
calc()
exit
end
}
Process.waitall
}
end
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Przykład (3)
Serwer 4-procesorowy
1 thread efficiency: 99.673%
1 proc efficiency: 99.849%
2 threads efficiency: 49.973%
2 procs efficiency: 99.696%
3 threads efficiency: 32.777%
3 procs efficiency: 99.934%
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
GIL – Global interpreter lock – Python
I
GIL uniemożliwia równoległe wykonanie kodu przez kilka
watków
˛
I
w trakcie wykonywania kodu blokowany jest cały interpreter
I
niektóre operacji, np. I/O powoduja˛ zwolnienie blokady
blokada może być również zwolniona explicite przez
natywne rozszerzenia pisane np. w jezyku
˛
C
I
I
I
I
Py_BEGIN_ALLOW_THREADS
Py_END_ALLOW_THREADS
próby zastosowania mikro-blokad (na pewnych operacjach
interpretera) zakończyły sie˛ fiaskiem – cały interpreter
działał dużo wolniej
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
GIL – Ruby
I
w Ruby 1.9 również wykorzystywany jest GIL, ale w
odniesieniu do wirtualnej maszyny Rubiego – YARV
I
rb_thread_blocking_region()
I
dodatkowe problemy w implementacji w niektórych
systemach operacyjnych – exec w MacOSX powoduje
wystapienie
˛
wyjatku,
˛
jeśli aktualnie wykonywany jest inny
watek
˛
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Propozycja rozwiazania
˛
– Erlang
I
I
I
I
I
I
podejście „share-nothing”
proste metody komunikacji miedzyprocesowej
˛
–
wbudowane w składnie˛ jezyka
˛
„lekkie procesy” – nie sa˛ procesami w sensie systemu
operacyjnego (działaja˛ w tej samej przestrzeni adresowej),
ale nie widza˛ wzajemnie swoich obszarów pamieci
˛
komunikacja wyłacznie
˛
poprzez wymiane˛ komunikatów
procesy zarzadzane
˛
sa˛ przez scheduler działajacy
˛ w
przestrzeni użytkownika
wykorzystanie wielu procesorów dzieki
˛ podejściu m:n –
wykorzystywanych jest wiele watków
˛
natywnych, spośród
których każdy wyposażony jest we własny scheduler,
zarzadzaj
˛
acy
˛ wieloma lekkimi procesami
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Propozycja rozwiazania
˛
w Rubim
I
MVM – Multiple Virtual Machines
I
każda maszyna wirtualna uruchomiana w osobnym watku
˛
systemowym
I
wszystkie maszyny uruchamiane w ramach jednego
procesu – interpretera
I
eksperymenty realizowane z wykorzystaniem JRubiego –
implementacji jezyka
˛
Ruby w wirtualnej maszynie Javy
I
obecnie – ze wzgledu
˛
na istnienie wielu alternatywnych
implementacji Rubiego ustalane jest wspólne API do
obsługi MVM
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Plan prezentacji
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Motywacja
I
I
Cel doktoratu: opracowanie algorytmów ekstrakcji
informacji z polskich tekstów
Problemy:
I
I
I
wymagany jest formalny opis semantyki jezyka
˛
polskiego
dla wielu słów trzeba wybrać jedno znaczenie spośród
wielu (problem wieloznaczności)
Propozycja: wykorzystać ontologie˛ OpenCyc, która
zawiera formalny opis wielu pojeć
˛ i przetłumaczyć ja˛ na
jezyk
˛
polski
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
OpenCyc – zalety
I
I
I
I
I
Z założenia miała być agnostyczna wzgledem
˛
jezyka
˛
Posiada bogaty zestaw relacji, które opisuja˛ zwiazki
˛
pomiedzy
˛
pojeciami,
˛
które moga˛ odnosić sie˛ zarówno do
rzeczowników, czasowników jak i innych cz˛eści mowy
Zawiera 300 tys. pojeć
˛ oraz 3 mln. asercji dotyczacych
˛
tych pojeć,
˛ wyrażonych w formie logicznej
Posiada silnik inferencyjny pozwalajacy
˛ na wnioskowanie
na temat zgromadzonego zbioru pojeć
˛
Asercje zorganizowane sa˛ w mikroteorie, które tworza˛
strukture˛ hierarchiczna;
˛ pozwala to na zachowanie
spójności logicznej wewnatrz
˛ danej domeny, bez
konieczności zachowania wymogu globalnej
niesprzeczności
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Słownik angielsko-polski/polsko-angielski
Oxford-PWN
I
I
Elektroniczny słownik stworzony dla ludzi (a nie
algorytmów tłumaczacych)
˛
Zawiera najwieksz
˛
a˛ liczbe˛ haseł (weryfikowane w 2004):
I
I
ok 52 tys. pol. → ang.
ok 63 tys. ang. → pol.
I
Zawiera słownictwo ogólne oraz specjalistyczne
I
Hasła opisane w jezyku
˛
SGML (protoplaście XML) –
trudniejsze do parsowania
I
Brak publicznej dokumentacji formatu haseł
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Plan prezentacji
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Ogólny schemat algorytmu
I
Określić liste˛ słów, dla których dostepne
˛
sa˛ tłumaczenia z
angielskiego na polski
I
Dla danego słowa angielskiego znaleźć odpowiadajace
˛ mu
pojecia
˛
w Cyc
I
Dla każdego znalezionego pojecia
˛
dopasować
odpowiadajace
˛ mu polskie słowo (lub słowa)
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Ogólna charakterystyka
I
I
Algorytm posiłkuje sie˛ heurystykami skonstruowanymi na
podstawie analizy kilkuset przypadków mapowania
Dodatkowo wykorzystywane sa˛ zdefiniowane na potrzeby
SSJP podstawowe kategorie semantyczne:
I
I
I
I
I
AbstractObject , Animal , Plant , ...
które zostały recznie
˛
zmapowane na odpowiednie pojecia
˛
OpenCyc
Heurystyki biora˛ pod uwage˛ dwa czynniki:
liczbe˛ grup semantycznych tłumaczenia i liczbe˛ pojeć
˛
OpenCyc odpowiadajacych
˛
danemu angielskiemu słowu
kwalifikatory pojawiajace
˛ sie˛ w opisie tłumaczenia
Mapowanie posiad „moc”, wskazujac
˛ a˛ na ile
prawdopodobna jest jego poprawność
I
strong, medium, weak
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Przykład mapowania
Pojecie
˛
Cyc:
I
Absorbency State tangible physical quantity, non numeric
scalar quantity, disposition
Hasło w słowniku:
I
(Chem, Phys) absorpcyjność, chłonność
Przypisanie:
I
absorpcyjność -> Absorbency State tangible physical
quantity, non numeric scalar quantity, disposition Chem,
Phys
I
chłonność -> Absorbency State tangible physical
quantity, non numeric scalar quantity, disposition Chem,
Phys
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Algorytm ogólny
1
2
3
4
5
6
7
8
9
process_entries(limit, offset) do |entry, cyc_terms|
print_potential_matches(entry, cyc_terms)
mappings = find_mappings(entry, cyc_terms)
mappings.each do |mapping|
global_result.append([mapping.word.to_s],mapping)
end
print_matches(entry, cyc_terms, mappings)
end
post_process(global_result)
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Podział zadania na procesy
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Algorytm równoległy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
def process_entries(limit=100,offset=0,&block)
proc_count = 2
#...
parent_pid = Process.pid
proc_count.times do |proc_nr|
first, last = compute_indices(...)
unless fork
process_group(entries_groups[first..last],&block)
return
end
end
Process.waitall
#...
end
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Problemy zwiazane
˛
z równoległościa˛
1. podział haseł dla poszczególnych procesów
I
I
wczytanie wszystkich haseł przed dokonaniem podziału
ignorowanie różnic w czasie wykonania mapowania dla
poszczególnych grup haseł
2. wspólny plik logowania
I
semafor IPC System V
3. wspólna tablica wyników
I
I
ostateczny wynik mapowania zależał m.in. od tego czy
dane słowo polskie było przypisane do wielu symboli Cyc
tablica asocjacyjna realizowana w postaci współdzielonej
pamieci
˛ transakcyjnej, zapewniajaca
˛ możliwość
równoczesnego zapisu + semafory dla poszczególnych
słów (klucze tablicy)
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Plan prezentacji
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Szczegóły eksperymentu
I
Mapowane były wyłacznie
˛
rzeczowniki (kategoria
gramatyczna n, npl, prn)
I
Zostało stworzonych ∼27 tys. mapowań dla 16 tys.
leksemów
I
Weryfikacji poddana ∼3,5 tys. mapowań (∼ 12%)
I
Precyzja: 54%
I
Pokrycie: niezweryfikowane ze wzgledu
˛
na brak zasobu
referencyjnego
moc
precyzja
strong
64,7%
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
medium
49,8%
weak
23,1%
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Wyniki szczegółowe z podziałem na kategorie
size
strong
medium
weak
overall
size
strong
medium
weak
overall
AbstractObj
4652
48.29%
38.97%
22.22%
42.39%
Human
2551
80.23%
79.10%
29.62%
74.71%
Animal
878
87.5%
61.64%
18.75%
76.42%
Instrument
3486
57.26%
54.90%
12.0%
54.37%
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
Artifact
4807
44.86%
32.69%
31.11%
40.22%
Location
2373
62.42%
63.43%
14.28%
59.61%
BodyPart
758
70.42%
84.21%
15.38%
66.01%
Meter
110
91.89%
80.95%
100.0%
88.33%
Event
6957
54.69%
32.30%
16.26%
35.29%
NaturalObj
1432
76.92%
60.52%
69.23%
72.61%
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Wyniki szczegółowe z podziałem na kategorie
size
strong
medium
weak
overall
size
strong
medium
weak
overall
Proper
168
79.31%
73.03%
54.54%
72.86%
Food
489
84.31%
60.0%
21.42%
67.77%
Self
659
53.84%
62.5%
46.42%
54.65%
Plant
208
97.5%
83.33%
25.0%
89.28%
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
Set
592
51.61%
30.0%
10.0%
39.34%
State
1590
82.95%
69.23%
37.14%
69.71%
Structure
358
60.60%
31.81%
0.0%
41.53%
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Wyniki zrównoleglenia – Ruby 1.8, system
czteroprocesorowy
200 jednostek
# procesów
średnia [s]
odchylenie [s]
przyspieszenie
efektywność [%]
1000 jednostek
# procesów
średnia [s]
odchylenie [s]
przyspieszenie
efektywność [%]
1
56,11
0,11
1
100
2
39,15
0,09
1,43
71,67
3
36,62
0,4
1,53
51,08
4
30,13
0,28
1,86
46,56
5
29,86
0,3
1,86
37,25
1
369,9
0,77
1
100
2
213,18
3,06
1,74
86,76
3
179,45
1,38
2,06
68,71
4
165,88
1,53
2,23
55,75
5
157,42
5,67
2,23
44,6
Czas i efektywność mapowania równoległego – Ruby 1.8
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Wyniki zrównoleglenia – Ruby 1.9, system
czteroprocesorowy
200 jednostek
# procesów
średnia [s]
odchylenie [s]
przyspieszenie
efektywność [%]
1000 jednostek
# procesów
średnia [s]
odchylenie [s]
przyspieszenie
efektywność [%]
1
39,5
0,97
1
100
2
28,09
1,08
1,41
70,3
3
26,92
0,96
1,47
48,92
4
22,94
0,78
1,72
43,04
5
23,32
0,65
1,69
33,88
1
229,47
11,4
1
100
2
141,98
5,11
1,62
80,81
3
127,31
5,63
1,8
60,08
4
120,7
5,43
1,9
47,53
5
116,5
4,71
1,97
39,39
Czas i efektywność mapowania równoległego – Ruby 1.9
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
KI AGH
Wstep
˛ teoretyczny
Problem obliczeniowy
Algorytm
Rezultaty
Dziekuj
˛ e!
˛
Aleksander Pohl
Obliczenia równoległe w jezykach
˛
interpretowanych
KI AGH