Przez ostatnie kilka dni trwał zlot Vexillium, i mogę spokojnie napisać że był bardzo inspirujący. Między innymi miałem okazję poprowadzić krótką prelekcję na temat old-schoolowych efektów graficznych 2D. Na prelekcji między innymi pojawiły się metaball'e, wraz z niezbyt piękną, ale jak najbardziej działającą implementacją "edukacyjną" (całkowicie niezoptymalizowaną) w SDL+C++ (screen z metaballi widać po lewej). Dodam że całkowity brak optymalizacji tak doskwierał (14 FPS u mnie), że aż stworzyłem wersję na 4 rdzenie. Linki do obu kodów - jednowątkowego i wielowątkowego - są dostępne na końcu posta, a na dniach pojawią się w dziale z kodami (było by szybciej, ale jeszcze takiego działu nie zrobiłem ;p).
By the way...
On 22nd Nov'24 we're running a webinar called "CVEs of SSH" – it's free, but requires sign up: https://hexarcana.ch/workshops/cves-of-ssh (Dan from HexArcana is the speaker).
Na zlocie podyskutowaliśmy też chwilę o JIT'ach, i powstało pytanie czy Python ma JIT. Okazuje się że normalnie nie, ale jest dostępny zewnętrzny JIT o nazwie Psyco, który obsługuje się bezpośrednio z poziomu kodu skryptu. Wystarczy w swoim kodzie dodać import psyco, oraz wskazać które funkcję mają być kompilowane - psyco.bind(funkcja), lub podać wszystko do kompilacji - psyco.full(), i tyle. Nie trzeba zmieniać interpretera, nie trzeba go patchować, nic z tych rzeczy - po prostu instalacja lub kompilacja+instalacja Psyco, import, i działa.
Muszę przyznać że metoda działania Psyco przypadła mi do gustu, więc postanowiłem przetestować ją w praktyce. Zrobiłem więc port metaballi do Pythona (również 0 optymalizacji), i sprawdziłem jak dużą różnicę robi Psyco. Okazało się iż metaballe w Pythonie bez optymalizacji chodzą z prędkością (hmm wolnością?) jednej klatki co około 2.5 sec. Po zaimportowaniu Psyco i zbindowaniu paru funkcji czas renderingu jednej klatki spadł do 1.1 sec, a zbindowanie całości zmniejszyło go o kolejną dziesiątą część sekundy. Same metaballe może super szybkie się nie stały, ale zysk "za friko" 250% szybkości na tak prostym programie (coś koło 90 linijek nie licząc komentarzy) jest na prawdę niezły! Dodam że do renderingu metaballi użyłem liba pygame, całkiem przyjemnie się w nim klepie (screen po prawej).
OK, na dzisiaj tyle.
P.S. Wrzuciłem do menu link do RSSa, który z jakiegoś niewyjaśnionego powodu wcześniej się tam nie pojawił. Za parę dni powinno mi się udać zrobić jakiś dział z kodami i advisory, i poprzenosić jakieś stare rzeczy.
Kod:
metaballs.cpp (7kb, wymagany libSDL)
metaballs.exe (7kb, wymagana dll'ka od libSDL)
metaballs_4c.cpp (9kb, wymagany libSDL)
metaballs_4c.exe (7kb, wymagana dll'ka od libSDL)
metaballs.py (5kb, wymagany pygame)
metaballs_psyco.py (5kb, wymagany pygame i psyco)
Comments:
Hehe umieć to bym umiał, ale raczej z uwagi na brak czasu nie będę portował powyższego do innych języków, sorry ;<
Z ciekawości, jakie flagi użyłeś i która wersja MinGW ?;>
"-O3 -march=prescott -mmmx -msse -msse2 -msse3"
Thx ;> Testne potem
Add a comment: