Python

Z Denik

Přejít na: navigace, hledání

GraalVM umí spouštět různé jazyky, mimo jinými i Python. Proto jsem byl překvapený, že Pavel Tišňovský ve svých předchozích porovnáních různých implementací jazyka Python neuvedl i GraalPython (například při popisu RPythonu či Cythonu). Trochu uraženě jsem si tedy vyzkoušel, jak si s uvedeným Mandelbrot příkladem poradí náš Python. No a nakonec jsem byl vlastně rád, že to Pavel nevyzkoušel. Nejen, že to počítalo dlouho, ale hlavně počítalo úplně špatně. Výsledný obrázek nevypadal tak jako ostatní.

To však bylo na začátku srpna. Od té doby si s tím Petr Pišl hraje, udělal pár vylepšení a GraalVM 1.0.0 RC6 již nejen počítá správně, ale je také výrazně rychlejší než standardní Python3 a přitom nevyžaduje žádné změny kódu. Dovolil jsem si tedy Petra vyzpovídat a zeptat se jej, jak to dokázal.

Obsah

Pracuješ v pražské pobočce OracleLabs. Co tu vlastně děláš?

Posledních pár měsíců pracuji na implementaci jazyka Python v Graal VM. Před tím, než jsem začal pracovat v Oracle Labs, tak jsem dělal pár editorů do NetBeans IDE. V NetBeans jsem se naučil hodně o lexování, pársovaní, AST a mnoho dalších věcí, které se týkají analýzy zdrojového kódu. Tohle mi určitě pomohlo v Oracle Labs, ale i tak je to jen malá část toho, co potřebují vědět nyní.

Co jsi zkoumal nejdříve? Proč to nefunguje správně?

U implementace jazyka Pythonu do Graal VM nejsem od začátku. Nastoupil jsem již do rozjetého projektu, což není většinou jednoduché u projektů jako je tento. Prvních pár týdnů jsem implementoval Math modul, na kterém jsem se učil základní věci. Vlastně se pořád učím.

Občas zkouším rozjet náhodné scripty, abychom viděli, jak je na tom naše implementace. Jednak tím testujeme možné chyby a jednak také sleduji performance. Když jsem narazil na článek na Root.cz, kde byla porovnávána rychlost výpočtu obrázku různého rozlišení na základě Mandelbrotovy množiny, zkusil jsem autorův Python skript pustit také na naší implementaci. Nejdříve jsem musel doimplementovat asi dvě specializace v naší implementaci, abychom byli schopni skript spustit. To bylo jednoduché a otázka několik minut.

Jenže po spuštění jsem zjistil, že čas který je potřeba pro výpočet obrázku je několikanásobně větší než je potřeba pro výpočet toho samého obrázku v CPython. Problém byl v tom, že algoritmus vypočítané barvy jednotlivých bodů ukládá do stringu a nakonec celý string je vypsán na standartní výstup, který je přesměrován do souboru. Asi si řeknete, že to není ideální řešení, nicméně je to zdrojový kód z praxe.

Proč to vlastně bylo tak pomalé? A jak jsi na to přišel?

Jak jsi to zrychloval?

Co si myslíš o Pythonu jako jazyku?

Plánuješ to ještě nějak zrychlit?