http://www.lshift.net/blog/2008/10/29/t ... -in-python
Sourcecode: http://www.lshift.net/~tonyg/raytrace.py
Wäre mal eine Idee wert raytrace.py einmal mit CPython und einmal mit PyPy laufen zu lassen
EDIT: Oh, das wird anscheinend schon gemacht:
https://bitbucket.org/pypy/benchmarks/s ... -simple.py
Siehe: http://speed.pypy.org/timeline/?ben=raytrace-simple
raytracer in Python
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Auf der Suche nach einem Ray Tracer implementation, welches das multiprocessing nutzt habe ich noch ein paar Interessante Seiten über Python/Raytracing gefunden:
PyGmy
An extremely slow raytracer: http://www.pawfal.org/index.php?page=PyGmy
MiniLight
Ein minimal global illumination renderer: http://www.hxa.name/minilight/
MiniLight ist eigentlich in C++ geschrieben, wurde aber in verschiedenen Sprachen portiert, u.a. in Python. Sourcen habe ich im Python-to-C++ compiler "Shed Skin" gefunden: https://gitorious.org/shedskin/mainline ... xamples/ml
Es gibt bei MiniLight auch Vergleiche:
Lustig ist auch die Implementierung in Flash, welches direkt live im Browser rechnet: http://www.hxa.name/minilight/minilight-flex.html
Pygame
Was anderes: Ray-Tracer mit Pygame: http://pygame.org/project-Ray+Tracer-794-.html Kann anscheinend auch .obj Dateien lesen und ist auch recht übersichtlich...
PyGmy
An extremely slow raytracer: http://www.pawfal.org/index.php?page=PyGmy
MiniLight
Ein minimal global illumination renderer: http://www.hxa.name/minilight/
MiniLight ist eigentlich in C++ geschrieben, wurde aber in verschiedenen Sprachen portiert, u.a. in Python. Sourcen habe ich im Python-to-C++ compiler "Shed Skin" gefunden: https://gitorious.org/shedskin/mainline ... xamples/ml
Es gibt bei MiniLight auch Vergleiche:
Code: Alles auswählen
Code Zeilen (gesammt / relativ zu C++)
Python 2.5.1 490 lines / 0.52
Python ShedSkin 0.1.1 496 lines / 0.52
Geschwindigkeit (in bezug zur C++ implementierung):
Python 2.5.1 1 / 180
Python ShedSkin 0.1.1 1 / 1.8
Pygame
Was anderes: Ray-Tracer mit Pygame: http://pygame.org/project-Ray+Tracer-794-.html Kann anscheinend auch .obj Dateien lesen und ist auch recht übersichtlich...
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Ich fand die Idee so toll, da hab ich den Sourcecode mal abgeändert, das man das Rendering live in einem Tkinter Fenster sehen kann: https://github.com/jedie/python-code-sn ... aytrace.pyjens hat geschrieben:http://www.lshift.net/blog/2008/10/29/t ... -in-python
Sourcecode: http://www.lshift.net/~tonyg/raytrace.py
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
So, nachdem ich nun auch TKinter mit PyPy verwenden kann, kann ich mal vergleichen:
PyPy schaft das 640x480 in 13.4Sec
CPython 54.4sec!
PyPy schaft das 640x480 in 13.4Sec
CPython 54.4sec!
WOW! Damit habe ich definitiv nicht gerechnet, ich habe pypy immer als Spielerei angesehen …
CPython: "Rendered in 23.3sec"
Pypy: "Rendered in 5.2sec"
CPython: "Rendered in 23.3sec"
Pypy: "Rendered in 5.2sec"
the more they change the more they stay the same
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Gerade beim raytracer merkt man wie der JIT nach und nach die Sache schneller macht. Wobei es auch wegen dem Szenen-Aufbau am Ende schneller ist...
Ich frage mich allerdings ob PyPy nicht die JIT Optimierungsdaten speichern könnte, um diese beim nächsten Lauf wieder verwenden zu können. Sowas ähnliches wie .pyc...
Ich frage mich allerdings ob PyPy nicht die JIT Optimierungsdaten speichern könnte, um diese beim nächsten Lauf wieder verwenden zu können. Sowas ähnliches wie .pyc...
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Damit verlierst Du dann aber die Plattformunabhängigkeit bzw. müsstest ja vor einem Lauf wissen, ob das System noch dasselbe istjens hat geschrieben: Ich frage mich allerdings ob PyPy nicht die JIT Optimierungsdaten speichern könnte, um diese beim nächsten Lauf wieder verwenden zu können. Sowas ähnliches wie .pyc...
Edit: Nicht genug nachgedacht Man könnte ja mittels Metainformationen das System hinterlegen - zur Laufzeit muss PyPy das intern ja selber ermitteln und bräuchte dann nur noch abgleichen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Außerdem ist die Idee bei JIT ja, dass Just-in-Time optimiert wird, das heißt der auch tatsächlich das optimiert wird, was ein Hotspot ist. Das kann bei mehreren Durchläufen verschiedener Code sein. Jens, was du dir vermutlich wünscht ist sowas wie Profile Guided Optimization (PGO), wie das etwa GCC bietet.
Zudem vermute ich mal das der generierte Code eher enorm ist, wenn man bedenkt dass quasi alle JIT-Compiler relativ viel Speicher benötigen.
Zudem vermute ich mal das der generierte Code eher enorm ist, wenn man bedenkt dass quasi alle JIT-Compiler relativ viel Speicher benötigen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Sowas würde schon Sinn machen ist aber wohl mit etwas Aufwand verbunden.
Ich denke mal Python 3, Numpy und STM haben da höhere Priorität.
Ich denke mal Python 3, Numpy und STM haben da höhere Priorität.