Perforacja pętli przyśpiesza programy

| Technologia

Komputery powstały po to, by dać odpowiedzi na trudne logiczne pytania. I przez dziesięciolecia służyły właśnie temu celowi - precyzyjnemu rozwiązywaniu zadań. W ostatnim czasie sytuacja się jednak zmienia i coraz częściej jesteśmy skłonni poświęcić precyzję na rzecz prędkości.

Przykładem niech będzie sposób działania wyszukiwarek. Rezultaty uzyskane z Google'a czy Yahoo! nie są najbardziej precyzyjne z możliwych, jednak internauci wolą szybko uzyskać nieco mniej dokładną odpowiedź, niż dłużej czekać na najlepszą z możliwych. Stąd też np. dokładna kolejność pierwszych kilku czy kilkunastu wyników wyszukiwania nie jest ważna.

Grupa badaczy z MIT-u pracująca pod kierunkiem profesora Martina Rinarda postanowiła wykorzystać takie podejście i stworzyła system automatycznie wyszukujący w kodzie komputerowym miejsc, w których nieco dokładności może zostać poświęconej na rzecz znacznego przyspieszenia pracy programu.

Udało im się osiągnąć zadziwiające rezultaty. Podczas testów skrócili o połowę czas potrzebny do zakodowania transmisji wideo w celu przesłania jej przez sieć. Jakość obrazu pozostała przy tym niezmieniona. Takie samo podejście może zostać wykorzystane wszędzie tam, gdzie konieczne jest przetwarzanie danych w czasie rzeczywistym, a więc np. w oprogramowaniu do analiz giełdowych czy systemach śledzenia i monitorowania wykorzystujących sieci czujników.

Opracowany przez zespół Rinarda system może działać dwojako. Potrafi wskazać programiście te miejsca kodu, w których możliwe jest poświęcenie precyzji na rzecz prędkości. Jest też w stanie samodzielnie dokonać odpowiednich zmian. Przykładem takiego zastosowania niech będzie wideokonferencja przeprowadzana z użyciem laptopa. Gdy program do konferencji jest jedynym uruchomionym na maszynie, kodowanie sygnału wideo może odbywać się tradycyjnymi metodami. Jeśli jednak komputer wykonuje jednocześnie inne zadania, mógłby automatycznie przełączać kodowanie w tryb wymagający zużycia mniej mocy procesora.

Uczeni z MIT-u wykorzystali bardzo prosty trick. Rozbudowane programy komputerowe wykorzystują liczne pętle, czyli wielokrotnie powtarzane procesy. Rinard oraz współpracujący z nim naukowcy Stelios Sidiroglou-Douskos, Hank Hoffman i Sasa Misailovic nazwali swoją technikę "perforacją pętli". Polega ona na "wybijaniu dziur" w pętlach, co po prostu polega na pomijaniu pewnych kroków w pętli. System automatycznie ocenia, ile takich kroków można pominąć by znacząco przyspieszyć pracę programu, a jednocześnie nie poświęcić zbyt wiele z precyzji jego działania.

Sam system opracowany przez grupę Rinarda jest pętlą - przeszukuje on program, "wybija" w nim dziury, a następnie uruchamia program i wylicza, jak jego działanie wpłynęło na wydajność programu. Następnie oceniane jet, która z "perforacji" najlepiej wpływa na zwiększenie wydajności, a jednocześnie oznacza najmniejsze straty w precyzji.

Pomysł uczonych z MIT-u jest niezwykle prosty, a jednocześnie zapewnia olbrzymi wzrost wydajności. Jednocześnie jest sprzeczny z intuicją programistów, którzy starają się udoskonalać swój kod, a teraz słyszą, że mogą część swojej pracy wyrzucić do kosza, a jednocześnie nie poświęcą zbyt dużo z precyzji działania programu.

program szybkość MIT Martin Rinard Stelios Sidiroglou-Douskos Hank Hoffman Sasa Misailovic perforacja pętli