[GRASS-user] v.lidar.edgedetection very slow
Moritz Lennert
mlennert at club.worldonline.be
Fri Jun 26 06:09:04 EDT 2009
On 22/06/09 07:00, Michael Perdue wrote:
>
> On 19-Jun-09, at 8:54 PM, Hamish wrote:
>
>>
>> Michael wrote:
>>> I actually get the same thing.
>>> For the first while the process runs in full use
>>> of one core, but once the process starts writing results to
>>> the db, the whole process bogs down to a
>>> grinding halt. CPU usage for v.lidar.edgedetection
>>> drops down to ~1% (1% of one core) and sqlite usage rises to
>>> ~16%. Maybe I'm wrong, but my impression was that the
>>> bottle neck was the modifications to the database.
>>
>> hmmm. I've seen no problems on Linux64 + DBF backend. 100% core until
>> completion.
>>
>> Are you running WinXP + SQlite? Can you try with the DBF driver?
>> maybe the common problem is in the SQLite driver... ??
>
> I'm running Mac OS X + SQLite with a 64 bit version of grass. I ran a
> whole bunch of tests today and it looks like there are at least a couple
> of things going on and SQLite is one of the issues. I ran a 500m x500m
> tile with three different DB back-ends (SQLite, Postgres and DBF) and
> these are the results I obtained;
> (SQLite)
> time v.lidar.edgedetection input=Cal_QTile output=Cal_QTile_edges
> real 38m53.458s
> user 1m17.602s
> sys 4m6.353s
>
> (Postgres)
> time v.lidar.edgedetection input=Cal_QTile output=Cal_QTile_edges
> real 6m49.060s
> user 0m46.622s
> sys 1m20.324s
>
> (DBF)
> time v.lidar.edgedetection input=Cal_QTile output=Cal_QTile_edges
> real 1m54.065s
> user 0m48.530s
> sys 1m8.686s
>
> The results with Postgres and SQLite were a real surprise to me.
As Hamish already mentioned, the main bottleneck here is the connection
to the database which is much slower for actual database systems than
for simple file-based DBF. Looking at the code, I see lots of calls to
the Insert(), InsertInterpolation() and UpDate() functions. At each call
you are hit with the overhead of the database connection. I don't know
the code at all, but it might be worth thinking about grouping these
database calls, possibly by putting all the SQL statements into a temp
file and executing that only once at the end. In scripts doing this has
lead to significant speed gains.
Moritz
More information about the grass-user
mailing list