• Nie Znaleziono Wyników

Złożoność czasowa algorytmu CLCS-BP-Sequence jest

niezmienniczy względem transpozycji

Wniosek 9.7. Złożoność czasowa algorytmu CLCS-BP-Sequence jest

m

r

!

= O√

nmrDsm+ nlm w m

r

. (9.12)

Sumaryczna liczba dopasowań silnych może być co najwyżej Dsm= nmr, ale w praktyce jest znacznie mniejsza.

Do wyznaczenia złożoności czasowej w przypadku średnim konieczne jest przyjęcie pew-nego założenia dotyczącego zawartości ciągów wejściowych (A, B, P). Przyjęte zostanie, że zostały one wygenerowane przez generator liczb pseudolosowych o rozkładzie równomiernym dla rozmiaru alfabetu σ. Wyznaczanie złożoności czasowej w tym przypadku rozpocznie się od wzoru (9.10). Ponieważ ciągi są niezależnie, więc nie występują zależności pomiędzy licz-bą dopasowań silnych na różnych poziomach. Co więcej, nie ma także zależności pomiędzy αkkna pojedynczym poziomie. Dlatego też, aby otrzymać złożoność czasową w przypadku średnim, należy wyznaczyć wartość oczekiwaną każdego składnika sumy.

Najpierw zostanie rozważony pierwszy składnik, mαk, dla 0 < k < r. Wartośćαkjest liczbą symboli ciągu A równych pk. Oczywiście prawdopodobieństwo, że ai= pkwynosi 1/σi ocze-kiwana wartośćαk to n/σ. Podobnie, oczekiwana wartośćβkto m/σ. Wobec tego:

Wniosek 9.6. Złożoność czasowa w przypadku średnim algorytmu równoległości bitowej dla problemu CLCS jest:

O nlm

w m+

r k=1

Onm σ +nm

σ + nlm w

m= O

 nmr

 m

min(σ, w)



. (9.13)

Jeśli żądanym wynikiem jest podciąg CLCS, a nie tylko jego długość, to konieczne jest prze-chowywanie macierzy T , która zajmuje O(ndm/wer) słów komputerowych. Czas jej wyznacze-nia jest taki sam jak czas działawyznacze-nia algorytmu wyznaczającego długość podciągu CLCS, a więc nie wpływa na złożoność czasową algorytmu CLCS-BP-Length. Złożoność czasowa wyzna-czania podciągu CLCS na podstawie tej macierzy jest niewielka, ponieważ w każdej iteracji pętli w CLCS-BP-Sequence zmniejszana jest wartość przynajmniej jednego indeksu, a więc:

Wniosek 9.7. Złożoność czasowa algorytmu CLCS-BP-Sequence jest

Θ(r + n + m) =Θ(n). (9.14)

9.3.5. Wyniki eksperymentalne

W celu porównania zaproponowanego algorytmu równoległości bitowej z innymi algo-rytmami przeprowadzono dwie serie eksperymentów. Prezentowane czasy stanowią medianę z czasów 501 wykonań algorytmów. Komputer testowy wyposażony był w procesor AMD Phe-nom II X4 810 (zegar 2600 MHz). Algorytmy zaimplementowano w języku C++ i skompilowa-no za pomocą MS Visual C++ 2008 z maksymalną optymalizacją pod kątem prędkości (opcja -Ox).

Z eksperymentów opisanych w podrozdz. 9.2.4 wynika, że najszybszymi algorytmami se-kwencyjnymi dla problemu CLCS są algorytm China i in. [42] oraz algorytm zaproponowany w podrozdz. 9.2, w których zastosowano technikę punktów wejścia-wyjścia (podrozdz. 9.2.3).

Poniżej opisano wyniki podobnych eksperymentów dla tego samego zestawu danych, wobec czego dla większej przejrzystości zrezygnowano tu z badania pozostałych algorytmów. Oma-wiane algorytmy oznaczone są na wykresach i w tabelach następująco:

• ChinEE – wersja algorytmu China i in. [42] zmodyfikowana przez użycie techniki punktów wejścia-wyjścia (podrozdz. 9.2.3),

• DeoEE – wersja algorytmu zaproponowanego w podrozdz. 9.2.1 zmodyfikowana przez uży-cie techniki punktów wejścia-wyjścia (podrozdz. 9.2.3),

• BPEE-32 – algorytm równoległości bitowej z techniką punktów wejścia-wyjścia zapropo-nowany w podrozdz. 9.3 przy w = 32,

• BPEE-64 – algorytm równoległości bitowej z techniką punktów wejścia-wyjścia zapropo-nowany w podrozdz. 9.3 przy w = 64,

W pierwszej serii eksperymentów (rys. 9.19) porównano algorytmy wyznaczania podciągu CLCS i długości podciągu CLCS dla danych losowych wygenerowanych z użyciem genera-tora liczb pseudolosowych o rozkładzie równomiernym. Dla większej przejrzystości, zamiast bezwzględnych czasów wykonania podano na nich, ile razy dany algorytm jest szybszy niż algorytmChinEE.

W pierwszym teście tej serii eksperymentów zbadano wpływ rozmiaru alfabetu na czas wy-konywania algorytmów (rysunki 9.19a–d). Większy rozmiar alfabetu oznacza zwykle mniejszą liczbę dopasowań i dłuższe paski. Oczywiście, rozmiar słowa komputerowego stanowi swego rodzaju barierę w zwiększaniu efektywnej długości paska, bo paski dłuższe niż w są emulowa-ne przez tablice słów komputerowych. Kiedy długości ciągów głównych były znacząco różemulowa-ne, a ciąg ukierunkowujący był krótki, algorytm równoległości bitowej okazał się znacząco szyb-szy od pozostałych algorytmów zarówno wtedy, gdy wyznaczano tylko długość podciągu CLCS (9.19a), jak i sam podciąg CLCS (9.19b). W obu przypadkach dla najmniejszego możliwego alfabetu (σ= 2) przewaga była pomijalna, ale wraz ze wzrostem rozmiaru alfabetu stawała się coraz bardziej znacząca – algorytmChinEE był 13–16 razy wolniejszy dlaσ= 20. Dla małych

9.3. Algorytm równoległości bitowej 183

0 1000 2000 3000 4000

0

0 1000 2000 3000 4000

0

Rys. 9.19. Porównanie przyspieszenia uzyskiwanego przez algorytmy równoległości bitowej dla proble-mu CLCS w stosunku do ulepszonego algorytproble-mu China i in. Kolumna lewa: wyznaczanie długości podciągu CLCS. Kolumna prawa: wyznaczanie podciągu CLCS

Fig. 9.19. Comparison of the speedup of bit-parallel algorithms for the CLCS problem. Left column:

computation of CLCS length. Right column: computation of CLCS

alfabetów czasy działania algorytmów BPEE-32 i BPEE-64 były podobne, co wynika z fak-tu, że paski rzadko nie mieściły się w 32-bitowym słowie. Dla alfabetów o średnim rozmiarze (20 ≤σ≤ 100) wersja 64-bitowa była zauważalnie szybsza (o około 35%). Co ciekawe, dla dużych alfabetów algorytmy te stawały się jednakowo szybkie. Było to spowodowane tym, że dominującą rolę odgrywało tu bardzo duże zawężenie obliczanych obszarów macierzy bądź też już po etapie przetwarzania wstępnego wiadomo było, że szukany podciąg CLCS nie istnieje.

Porównując czasy działania algorytmówBPEE-64 i DeoEE, można zauważyć, że proponowany algorytm równoległości bitowej jest kilkakrotnie szybszy.

Na rysunkach 9.19c–d pokazane są wyniki dla przypadku, w którym ciąg ukierunkowujący był dłuższy (12 symboli), a ciągi główne – równej długości. Wyniki tych eksperymentów są bar-dzo podobne, choć względna prędkość działania algorytmu równoległości bitowej jest nieznacz-nie mnieznacz-niejsza. Wyniki ostatnich testów w tej serii (rysunki 9.19e–f) pokazują, jak zmienia się względna prędkość algorytmów w zależności od długości obu ciągów głównych (σ= 20, r = 4).

Dla bardzo krótkich ciągów głównych algorytm proponowany jest mniej niż 10-krotnie szyb-szy, ale wraz ze wzrostem długości ciągów staje się szybszy 15-krotnie dla wersji 64-bitowej i 12-krotnie dla wersji 32-bitowej w obu wariantach problemu (wyznaczanie podciągu CLCS lub tylko jego długości).

W drugiej serii eksperymentów algorytmy oceniano na danych rzeczywistych reprezentują-cych głównie sekwencje RNase. Były to te same dane, które wykorzystano w testach algorytmu zaproponowanego w podrozdz. 9.2.4 (tabela 9.1). Rozmiar alfabetu dla nich toσ= 20. Również metodologia przeprowadzenia tych testów była taka sama, a więc prezentowane są sumaryczne czasy wykonania algorytmów dla wszystkich par ciągów w ramach każdego zbioru.

Wyniki eksperymentów przedstawione są w tabeli 9.4. Jak można zauważyć, algorytm BPEE-64 okazał się najszybszy we wszystkich przypadkach. Jest on szybszy od algorytmu ChinEE od 5,6 do 16,7 razy. Od algorytmu DeoEE jest natomiast szybszy od 2 do 4 razy. Wyniki te po-kazują, że stosując proponowany algorytm równoległości bitowej dla problemu CLCS można znacząco przyspieszyć jego rozwiązywanie.

9.4. Algorytm równoległy dla procesorów graficznych

9.4.1. Algorytm

W niniejszym podrozdziale omówiony będzie algorytm równoległy dla procesorów GPU zaproponowany przez autora w [71]. Punktem wyjścia do stworzenia algorytmu CLCS-CUDA dla procesorów GPU będzie algorytm China i in. [42]. Wyznacza on trójwymiarową macierz programowania dynamicznego w prosty sposób, dzięki czemu można go zrównoleglić stosując podejście podobne do zaproponowanego w podrozdz. 7.6.2. Algorytmy oparte na idei Hunta–

9.4. Algorytm równoległy dla procesorów graficznych 185 Tabela 9.4 Czasy działania (w ms) algorytmów wyznaczania podciągu CLCS i długości podciągu CLCS dla

rzeczywistych danych. W nawiasach: ile razy dany algorytm jest szybszy niż ChinEE

Zestaw Ciąg Długość CLCS CLCS

danych ukierunk. ChinEE DeoEE BPEE-32 BPEE-64 ChinEE DeoEE BPEE-32 BPEE-64

ds0 HKH 3,133 0,968 0,409 0,358 3,904 0,910 0,615 0,538

( 1,00) ( 3,24) ( 7,66) (8,75) ( 1,00) ( 4,29) ( 6,35) (7,26)

ds1 HKH 4,436 1,420 0,570 0,468 7,370 2,380 0,872 0,723

( 1,00) ( 3,12) ( 7,78) (9,48) ( 1,00) ( 3,10) ( 8,45) (10,19)

ds1 HKSH 3,962 1,176 0,558 0,484 6,048 1,679 0,870 0,748

( 1,00) ( 3,37) ( 7,10) (8,19) ( 1,00) ( 3,60) ( 6,95) (8,09)

ds1 HKSTH 3,845 1,307 0,564 0,507 6,026 1,678 0,880 0,776

( 1,00) ( 2,94) ( 6,82) (7,58) ( 1,00) ( 3,59) ( 6,85) (7,77)

ds2 HKSH 3,040 0,950 0,380 0,351 5,773 1,934 0,595 0,522

( 1,00) ( 3,20) ( 8,00) (8,66) ( 1,00) ( 2,99) ( 9,70) (11,06)

ds2 HKSTH 2,681 0,943 0,345 0,313 5,647 1,687 0,575 0,508

( 1,00) ( 2,84) ( 7,77) (8,57) ( 1,00) ( 3,35) ( 9,82) (11,12)

ds3 HKH 8,436 2,512 0,765 0,597 15,089 2,901 1,299 0,946

( 1,00) ( 3,36) (11,03) (14,13) ( 1,00) ( 5,20) (11,62) (15,95)

ds4 DGGG 1,994 0,630 0,353 0,323 3,061 0,906 0,559 0,488

( 1,00) ( 3,17) ( 5,65) (6,17) ( 1,00) ( 3,38) ( 5,48) (6,27)

Szymanskiego (podrozdziały 9.2, 9.2.3) są szybsze od algorytmu China i in. o czynnik około 5, ale znacznie trudniej je zrównoleglić. Równie trudno zrównoleglić zaproponowany w poprzed-nim podrozdziale algorytm równoległości bitowej.

Kluczowa różnica pomiędzy problem CLCS a problemami LCS i LCTS, dla których za-proponowano algorytmy równoległe dla procesorów GPU, polega na tym, że w macierzy pro-gramowania dynamicznego dla problemu CLCS występują zależności pomiędzy poziomami.

Macierz dekomponowana jest na pudełka, ale danymi wejściowymi do obliczania każdego pu-dełka są: lewa i górna krawędź, prawa-dolna komórka lewego-górnego sąsiedniego pupu-dełka i pudełko znajdujące się poziom niżej (dla k > 0). Dlatego też wyznaczanie wartości poziomów nie jest niezależne i przetwarzanie oparte na zasadzie drugiej przekątnej dla wyższego poziomu musi się rozpocząć o krok później. Dla przykładu, w drugim etapie, pudełka, które mogą być obliczane to:

S

= {(0,0,1),(0,1,0),(1,0,0)}. Oznacza to, że w porównaniu do problemu LCS może być równolegle wyznaczanych znacznie więcej pudełek (nawet r + 1 razy więcej).

Podstawową wadą tego algorytmu są duże wymagania pamięciowe, ponieważ potrzebne mo-gą być nie tylko dwie krawędzie, ale także całe pudełko znajdujące się poziom niżej. Struktury danych, które znajdują się w pamięci globalnej procesora GPU to:

• tablice n, m i r słów na ciągi A, B i P,

• tablica n(r + 1) słów dla górnej krawędzi wszystkich poziomów,

• tablica m(r + 1) słów dla lewej krawędzi wszystkich poziomów,

• tablica 3dm/bhe(r + 1) słów dla prawych-dolnych komórek lewych-górnych sąsiednich pu-dełek do bieżących,

• tablica 2bwm(r +1) słów dla pudełek znajdujących się poziom niżej niż aktualnie obliczane.