On Tue, Aug 18, 2009 at 11:04 PM, Jon Burgess<[email protected]> wrote: > On Tue, 2009-08-18 at 16:41 +0300, Andrii V. Mishkovskyi wrote: >> Hello, fellow mapnik users and/or developers. >> >> Recently I've stumbled upon strange performance issues when using >> Python bindings. After investigating a little I've came to a >> conclusion that rendering map from Python bindings is (at least) twice >> as slow as using C++ to do the same job. To check my assumptions, I've >> created simple test, which renders 250 images of size 768x768. >> Coordinates are being shifted by 0.01 degree for each image, so I'm >> going from somewhere near north France shore to somewhere near >> Cambridge. Aaanyway, just look in the source code, the idea is pretty >> simple -- http://bitbucket.org/mishok13/mapnik-perf-testing/src/ >> C++ code was compiled using following command: >> g++ -Wall -O2 -I/usr/include/freetype2 -I/usr/include/mapnik -lagg_pic >> -lmapnik render.cpp -o render 2>&1 >> >> So, the timings for these: >> C++ render: >> $ time ./render >> >> real 0m19.766s >> user 0m5.196s >> sys 0m0.636s >> >> Python render: >> $ time ./render.py >> >> real 0m52.883s >> user 0m22.445s >> sys 0m0.844s >> >> As you can see, results are not really satisfying. I'm still resisting >> to just simply use C++, as writing non-library C++ code hurts my >> feelings badly, so if anyone has any clues -- don't hesitate to share >> them with me. :) >> You could also run the tests on your computer and share the results. > > The speed difference is due to a bug in the C++ code. You need to > project the co-ordinates before you create the bbox, i.e. > > prj.forward(c0x, c0y); > prj.forward(c1x, c1y); > Envelope<double> bbox(c0x, c0y, c1x, c1y);
Oh, gosh, stupid me. Thanks for noticing silly mistake. > > With this changed I get the following timings which say the python > version is now faster than the C++ (I repeated this and verified it was > consistent). > > [jburg...@shark mapnik-perf-testing]$ time ./render.py > > real 0m57.730s > user 0m23.179s > sys 0m0.731s > [jburg...@shark mapnik-perf-testing]$ time ./render > > real 1m28.892s > user 0m59.408s > sys 0m0.856s > > I then commented out the bbox.width() & bbox.height() calls which are > only in the C++ version, now the C++ time runs a couple of seconds > faster than the python: > > [jburg...@shark mapnik-perf-testing]$ time ./render > > real 0m54.636s > user 0m22.965s > sys 0m0.816s > > This was done using a UK import and the default OSM style. Yeah, I can confirm that now both tests take almost identical amount of time (Python version being slower by several seconds). > > You should probably save the images into files and do some visual sanity > checking to double check they are producing the same output. Doing that right now. Should have done that from the start. Thanks for help! > > Jon > > > -- Wbr, Andrii V. Mishkovskyi. I have the last page code of rocket launch program in NASA written in Lisp: ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) _______________________________________________ Mapnik-users mailing list [email protected] https://lists.berlios.de/mailman/listinfo/mapnik-users

