Parallelizing calls to msDrawLayer()

Tamas Szekeres szekerest at GMAIL.COM
Sun Oct 14 04:20:05 EDT 2007


2007/10/14, David Fuhry <dfuhry at cs.kent.edu>:

>
> Ah ok, glancing at maplayer.c and mapdraw.c, I'm starting to see what
> you mean.  So msDrawVectorLayer currently loops like:
>
> while (s = layer->vtable->NextShape())
> {
>     msDrawShape(s);
> }
>
> and your thought is to... buffer the shapes (some of them, or all of
> them) with asynchronous NextShape calls, then render the buffer?  I
> think I fail to grasp the full picture, because what will be going on
> while NextShape() asynchronously fetches the next shape(s)?  The answer
> can't be "nothing", or we fail to exploit parallelism.
>
> Or are you suggesting we fetch the /first/ shape of every layer in
> parallel, so as to get the rest of the shapes queued up behind the first
> one (depending on the driver, sort of)?
>


It somewhat depends on the driver which startegy would bring the best
performance.  We should indeed gather some statistics related to the
drivers to make further decisions.


> Steve W. had valid concerns that overzealous buffering would use
> excessive memory.  I see now that msDrawVectorLayer() uses a pipelined
> approach which keeps minimal geometry (a single shape) around at once,
> leaving buffering decisions to the driver.  I like it.
>

I think it would be better to allow the decision to the
user/administrator how the performance/memory requirement should be
optimized. Mapserver should allow be parametrized for either the low
or the high memory consumption profile.

Best regards,

Tamas



More information about the mapserver-dev mailing list