My Numbu zkoušíme a pro Numpy atd. je to moc pěkný. Pandas to na druhou stranu tak dobře neoptimalizuje. Ale co mě zaráží nejvíc je, že ten projekt je prakticky neznámej. Nechápu proč, protože resources (hlavně CPU time) třeba na produkci opravdu šetří, řekněme z 30-40%.
Ano, pokud je program CPU bound tj. chroustí čísla pak se volají knihovny v C/C++/Fortran. Program ale nedělá většinou jen to. A Python na to vše kolem, je good enough. Jedna by mohl např. vzít Go, jako něco lepšího. Je ale třeba volání C knihoven z Go rychlejší než z Pythonu? Zdá se že ani ne. Nebo to napsat celé třeba v C++/Fortran, vždycky možnost. Člověk by se ale třeba divil jak je rychlé R, když to volá nativní knihovny.
Však ty víš lépe než já :D
23. 5. 2023, 13:16 editováno autorem komentáře
Jen mě zarazila ta strohost. Python jako glue code je jinak samozřejmě good enough.
Go se na tohle určitě nehodí, ale Cgo nijak zvlášť pomalé není, jen přeskládá ABI a zamkne vlákno. Když se volá něco ve Fortranu, co počítá déle než milisekundu, tak se to vůbec neprojeví.
S Go tohle nemám prakticky vyzkoušené. Co jsem chtěl a měl lépe říci, že nebude takový rozdíl mezi Go a Pythonem asi ani Java atd. když se volá nativní kód a pak už je na každém jestli se mu vyplatí používat lepidlo, nebo to klidně napsat v C++/Fortranu. Tam ale často přijde moment, že přidat najednou něco co v Pythonu je triviální a součástí distribuce, je náhle netriviální (IO/DB/XML) atd.
A nebo Julia, ale tam zase narážím na stejný problém, že není moc známá.
Podobné to bylo a stále je Python vs MATLAB, kde někdo prostě má lepidlo v MATLAB a kvůli tomu nechce jít do neznámých vod jako Python. MATLAB stejně volá nativní MKL, takže stejná situace jako v Pythonu
23. 5. 2023, 14:25 editováno autorem komentáře
Kromě Fortranu asi má každý ze zmíněných jazyků balíčky na “všechno” (Julia a Rust určitě, i to Go, kdyby někdo jó chtěl), ale člověk se je musí naučit používat. Možná to je prostě jen pohodlnost, mě taky baví spíše psát kód pro dif. rovnice, než IO/DB/XML. Zrovna v Julii mi chvíli trvalo zjistit, jak používat balíčky pro JSON, HTTP server, Postgres apod.
No jo, než bude použitelný StaticCompiler, tak to bude pořád bída. Možná to tak mají schválně, aby lidi platili za JuliaHub.
No ak trochu lepsie JIT sa tak vyrazne prejavi na performace, tak sa python nepouziva len ako lepidlo.
A co pouzit? Kludne modernu Javu, C#, Go,...
Jako jo, v tomhle máš pravdu. Jen nesmíš zapomenout, že binding na Python má každá druhá nativní knihovna a pak to výrazně klesá asi takhle: Java, Go, C#.
Já mám poměrně čerstvou zkušenost z projektu, kde byly výpočty i embedded s trochou robotiky (v oblasti oceánografie), a nejvíc se osvědčila nejjednodušší řešení. V zásadě nejde ani tak o rychlost, jako spíše spolehlivost a snadnou modifikovatelnost. Ten projekt byl naprosto geniální pro výuku studentů, kde si osahali spoustu praktických technologií a taky teorii (fyzikální modelování).
to praveze ne. Napred se treba udela model v Pythonu (napada me max. jeste Julia) a potom se to nasadi do produkce. A tam je snaha o snizeni nakladu nebo ziskani vysledku rychleji. A tady se Numba, PyPy nebo i AOT prekladace hodi*
* Python neni inherentne pomaly, pomaly je CPython, tedy jedna jeho implementace (a soucasne i implementace referencni), ale ne implementace jedina
Julia vznikla právě proto, aby člověk nemusel kód kvůli zvýšení rychlosti přepisovat. Ostatně je JAOT (nad LLVM). Akorát mi dost vadí, že nemá statickou typovou kontrolu (byť má typové anotace a inferenci), takže to je spíše takový nativně překládáný JavaScript.
Asi to tu všichni znáte, ale třeba si to někdo rád přečte.
https://www.nature.com/articles/d41586-020-03382-2
https://www.nature.com/articles/d41586-019-02310-3
O Go (nepřekvapivě) nic podobného není, ale časem čekám Mojo :)
Dik za clanek, Numba je super! Pro me v 90% pripadech resi pomalost Pythonich programu, a to prakticky zadarmo. Jedno omezeni, ktere jsem v clanku nezaznamenal (omlouvam se jestli jde o moji nepozornost) je omezena kompatibilita Numby s jinymi knihovnami, zejmena Scipy. Spominam, ze pri praci s distribucemi ze scipy.stats Numba nesla pouzit.