[geos-devel] [Fwd: [Boost-users] [boost] Formal Review: Boost.Polygon starts today August 24, 2009]

Martin Davis mbdavis at refractions.net
Tue Sep 1 19:57:29 EDT 2009

One thing to make clear - GEOS does not alway require allocations to be 
done pointwise.  The CoordinateSequence interface and various subclasses 
provide the option of allocating all storage for a list of points in a 
single allocation.

I would certainly be curious to see how the algorithmic component of 
GEOS compares to GGL (or any other library).  The JTS/GEOS predicate and 
overlay algorithms were developed with the primary goal being first 
generality and then performance.  So no doubt there's better ways of 
doing things. 

In the GEOS algorithms at least I don't see any way of avoiding dynamic 
allocation, since there's no way to predict a priori how many line 
segment intersections will be found, or how what the structure of the 
output geometry is.  Does GGL avoid this problem in some way?

Barend Gehrels wrote:
> Martin Davis wrote:
>> Ok, I can see that.  So in other words, GEOS uses a dynamic 
>> coordinate access paradigm, which gives flexibility to access 
>> different data structures, but can't be optimized by the compiler?
> It is not only the compiler. Dynamic memory allocations are relatively 
> slow. Allocating 1000 times a point is slower than allocating once 
> 1000 points.
>> Is this the reason for the performance difference for *all* the other 
>> libraries which beat it in peformance?  Or maybe some of them *don't* 
>> provide the dynamic data structure wrapper, and hence also can be 
>> optimized by the compiler (but thus they are less adaptable for use 
>> with external data structures).
> I don't know this for sure but I think most allocate for the whole 
> polygon or linestring at once. GPC is e.g. C, not C++.
>> I presume it would be a big job to convert GEOS to a template-based 
>> paradigm?  
> Probably. What would be possible and feasable is adapting GEOS's 
> datastructures (polygon) to GGL's concepts and then call e.g. GGL's 
> intersection. It would at least be a nice experiment. You still have 
> the dynamic memory then, but you can see which part is the algorithm 
> and which part is the memory access
>> It's somewhat annoying that the problem of efficient memory access 
>> and compiler optimization is quite orthogonal to the actual geometric 
>> algorithms, and yet it seems difficult to express the algorithms in a 
>> sufficiently abstract way to allow optimizations to take place.
> I don't see this. Using the std-library, both access to a vector and 
> (temporary) storage using a vector or deque are usually quite fast.
> Regards, Barend
> _______________________________________________
> geos-devel mailing list
> geos-devel at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/geos-devel

Martin Davis
Senior Technical Architect
Refractions Research, Inc.
(250) 383-3022

More information about the geos-devel mailing list