20 Dariusz Burak
— Procedurę 2 - dla pozostałych standardowych trybów pracy szyfrów blokowych,
— Procedurę 3 - dla szyfrów strumieniowych oraz szyfrów asymetrycznych.
Wszystkie procedury zrównoleglenia pętli zawierają transformacje składowe zgromadzone w ramach trzech grup transformacji. Grupę pierwszą tworzą transformacje wstępne, grupę drugą transformacje usuwające, bądź redukujące istniejące zależności w kodzie źródłowym algorytmów, a grupę trzecią transformacje umożliwiające przetwarzanie równoległe pętli programowych.
W celu uzyskania optymalnej wersji programu poprzez przebadanie wszystkich możliwych wariantów (ciągów) transformacji metoda automatycznego zrównoleglenia wybranych algorytmów szyfrowania wykorzystuje koncepcję kompilacji ite-racyjnej, zaproponowaną przez Knijnenburga, Kisukiegoi 0’Boyle’a w [11, 12, 13]. Zastosowanie oryginalnych procedur zrównoleglenia pętli programowych skutecznie rozwiązuje problem znacznej pracochłonności wykonywania testowych wersji programu w ramach kompilacji iteracyjnej z uwagi na znaczne ograniczenie liczby możliwych wariantów (6 możliwości w przypadku Procedury 1, trzy możliwości w przypadku Procedury 2, dwie możliwości w przypadku Procedury 3 [6]).
W skład zestawu narzędzi wspierających proces automatycznego zrównoleglenia algorytmów szyfrowania (Rys.l) wchodzi:
— wstępny restrukturyzator kodu,
— translator z języka C na język Petit,
— program Petit,
— optymalizator kodu równoległego,
— translator wstawiający dyrektywy standardu OpenMP,
— profiler kodu,
— kontroler transformacji kodu.
5.1. Wstępny restrukturyzator kodu
Zadaniem wstępnego restrukturyzatora kodu źródłowego zapisanego w języku C jest umożliwienie przeprowadzenia analizy zależności danych z zastosowaniem programu Petit. Z uwagi na specyfikę kodów źródłowych algorytmów szyfrowania oraz ograniczenia programu Petit do głównych zadań restrukturyzatora należy:
— konwersja zmiennych wskaźnikowych równoważnymi im zmiennymi tablicowymi,
— zastąpienie indeksowania tablic według stałych wartości na indeksowanie według zmiennych indeksowych pętli for (w ciałach pętli for),