Na co dzień stykamy się z efektownymi, wręcz efekciarskimi, rezultatami działania zaawansowanych algorytmów poznawczych nazywanych dziś sztuczną inteligencją. Można odczuć jednak pewien niedosyt – poza przemysłem rzadko zdarzają się implementacje prawdziwie przydatne w poważnych, np. deweloperskich, zastosowaniach. Ciekawy wyjątek stanowi opracowany na MIT Ithemal.
Nazwa Ithemal pochodzi od Instruction THroughput Estimator using MAchine Learning, co w dużej mierze wyjaśnia, z jakim oprogramowaniem mamy do czynienia. Otóż udało się opracować oparte na algorytmach uczenia maszynowego narzędzie zdolne do przewidywania liczby cykli zegara procesora niezbędnych do wykonania sekwencji instrukcji. Większość systemów wykorzystuje do tego model analityczny.
Jak donosi El Reg, Ithemal stanowi potencjalny zamiennik między innymi dla estymatora llvm-mca
wykorzystywanego przez LLVM, ale przede wszystkim dla własnościowego oprogramowania Intela. Między innymi to własność intelektualna niebieskich stanowi największy problem w opracowaniu skutecznego algorytmu, który mógłby przewidywać, jak konkretny pogram będzie wykonywał się na danym procesorze
Naukowcy z MIT twierdzą, że wyzwania w modelowaniu takich obliczeń udało się pokonać w toku analizy dużych zbiorów danych. Za sprawą braku dokładnych informacji na temat szczegółów działania procesorów Intela konieczne było znalezienie innego rozwiązania – sieć neuronowa zapełnia zatem lukę w wiedzy za pomocą symulacji opartych na dotychczas zebranych danych. Wykorzystywany jest model hierarchicznej sieci rekurencyjnej.
Oczywiście najważniejszą kwestię stanowi skuteczność tych przewidywań. Rezultaty robią wrażenie – w porównaniu do wspomnianych modeli analitycznych sieć neuronowa na ogóle wszystkich benchmarków zredukowała średni bezwzględny błąd procentowy o 50%, nie wydłużając przy tym czasu potrzebnego na obliczenia. Według pracowników MIT wkrótce sieci neuronowe odegrają dużą rolę w analizie wydajności oprogramowania.
Zobacz też: Firefox debugowany maszynowo. Kolejny krok do samopiszącego się kodu?