Zdawać by się mogło, że komputerowe programy, będąc tylko ciągiem cyfr, nie powinny się starzeć. Jednak, jak pokazuje praktyka, z czasem programy stają się coraz bardziej ospałe, coraz trudniejsze w obsłudze, coraz częściej zawodzą, a każda kolejna aktualizacja wymaga większych nakładów pracy programistów. Proces ten, zwany z angielska bit rot, czyli gniciem bitów, ma różne przyczyny.

Po pierwsze, każda kolejna modyfikacja zwiększa zwykle skomplikowanie programu. Rośnie liczba linii kodu, a wraz z nią liczba potencjalnych błędów oraz zależności pomiędzy poszczególnymi częściami programu (a także pomiędzy nimi, a elementami środowiska). Kiedy zdamy sobie sprawę z tego, że efekty nie dodają się do siebie, a mnożą, widzimy gotowy przepis na katastrofę.

Po drugie, nawet jeżeli nie zmienia się sam program, to zmienia się środowisko w którym pracuje. Zmieniają się systemy operacyjne, biblioteki, zmieniają się architektury wykorzystywanych procesorów… I nasz program pracuje coraz wolniej, albo w ogóle odmawia współpracy. Sam niedawno przeżyłem zawód próbując uruchomić leciwe GTA San Andreas na laptopie z Windowsem 7. Znane są już w przyrodzie przypadki, że istnieje program, którego nie da się już w żaden sposób uruchomić – choćby dlatego, że nie zachowała się ani jedna kopia bibliotek, z których korzystał.

Walka ze wspomnianymi problemami, czyli narastającym skomplikowaniem kodu i koniecznością dostosowania do pracy w nowym środowisku, pochłania olbrzymie środki. Nim program starszy i bardziej skomplikowany, tym oczywiście większe. Dlatego badacze z Computer Science and Artificial Intelligence Laboratory, należącego do MIT, postanowili wziąć na warsztat optymalizację pochodzącego z firmy Adobe, liczącego sobie już ćwierć wieku, rozbudowanego program do obróbki grafiki rastrowej, czyli sławnego Photoshopa.

W efekcie prowadzonych na MIT prac powstał program, o nazwie Helium, który pozwala na automatyzację optymalizacji starego kodu. Program, w ramach testów, miał pomóc w poprawie działania tzw. „stencil kernels”, czyli fragmentów kodu Photoshopa wykonujących bezpośrednio operacje na grupach pikseli. Helium samodzielnie odnalazł rzeczone fragmenty w skompilowanym już, gotowym do użytku programie, wyekstrahował je i przepisał na język wysokiego poziomu – Halide.

Chociaż autor oryginalnego kernela może już od lat przebywać na emeryturze, a kopię zapasową plików źródłowych dawno myszy zjadły, program „zrekonstruował” źródło do postaci czytelnego algorytmu, pozbawionego zaciemniających obraz optymalizacji. Zrekonstruowany w ten sposób algorytm można ręcznie poprawić lub po prostu bez zmian jeszcze raz go skompilować, tym razem używając jednak nowoczesnych narzędzi, zoptymalizowanych pod kątem obecnie używanych systemów operacyjnych i architektur.

Zmiany, które doskonale opłacanym programistom zajęłyby trzy miesiące, zestaw narzędzi od MIT przeprowadził w ciągu jednego dnia. Po aktualizacji szybkość objętych nimi kerneli wzrosła o 75%. Jeszcze lepsze wyniki badacze uzyskali testując swoje rozwiązanie na innych programach. Stencil kernele z miniGMG udało się przyspieszyć do 425% oryginału, a zawarte w popularnym IrfanView do… 497%.

Choć trzeba przyznać, że ideę testowano na fragmentach kodu, które wykonują powtarzalne operacje na dużych ilościach danych, co czyni je stosunkowo łatwymi do optymalizacji, to i tak wyniki wydają się zachęcające. Może już w niedalekiej przyszłości programiści będą mogli się skupić na tworzeniu nowości, zamiast na żmudnym poprawianiu programów w zaawansowanym wieku, których starzenie uda się w końcu zatrzymać.

[źródło i zdjęcie: phys.org]

Kolejny artykuł znajdziesz poniżej