[GRASS-dev] Re: grass-dev Digest, Vol 43, Issue 8

Markus Metz markus.metz.giswork at googlemail.com
Sat Nov 7 05:05:28 EST 2009


Hi Laura,


Laura Toma wrote:
> Hi Markus,
>
> How much memory was available  on the machine?  
8 GB
> If the machine had more than 512MB  RAM,  it is not fair to run
> terracost running with mem=400MB, and compare it with an algorithm
> that can use more memory.
I don't understand, both modules can use more than 400MB of memory. I
set r.terracost to use 400MB max and r.cost to use 135MB max. If
anything, this is not fair for r.cost and gives an advantage to
r.terracost. I did not mention that I gave r.terracost another advantage
by assigning the temporary directories to a folder on a separate, very
fast hard drive that had nothing else to do but manage the temp files of
r.terracost. The temp files of r.cost are in the standard grass
.tmp/$HOST directory, in my case that (slower) hard drive also had other
things to do than just manage r.cost's temp files. I really tried to
give r.terracost a head start ;-)
>
> However, I am surprised that withnumtiles=1,  it was slower than
> r.cost.   
???
cut'n paste from below
r.terracost numtiles=1
real    0m17.969s
user    0m17.276s
sys    0m0.500s

r.cost in grass7, percent_memory=20% # that's not percent of available
memory, that's percent of the region to keep in memory, for the test
region this was max 135 MB
real    0m55.349s
user    0m53.360s
sys    0m1.797s

-> r.terracost with numtiles=1 is much faster than r.cost

> That's something I'd like to  look into.  Would you mind sharing the
> raster with me, and sending me the exact commands that you ran?
Is in the message you replied to, see below.
cut'n paste from below

North Carolina sample dataset

g.region rast=elev_state_500m at PERMANENT res=100
# gives about 28 million cells
v.to.rast nc_state at PERMANENT use=val val=500.0 out=cost --o
v.to.rast urbanarea at PERMANENT use=val val=1 out=urbanarea --o
r.cost in=cost start_rast=urbanarea out=dist_urban percent_memory=20 --o

r.terracost in=cost start_rast=urbanarea out=dist_urban_terracost -i
gives
[...]
TILESIZE: nc_spm_08 N=28064550 elements, M=419430400 bytes, optimal
numtiles=1870

# test command for r.terracost, same as above, now with optimal
numtiles=1870
r.terracost in=cost start_rast=urbanarea out=dist_urban_terracost
numtiles=1870

>
> A grid with 29M points is pretty small, for today's machines.  I
> suggest running on something 10 times larger.
Will do.
>   And use a lot of sources, that makes the data access  pattern  less
> local.
Yes, I thought about that too, best would be a lot of evenly distributed
start points, that should force r.cost to do highly random and scattered
disk access. My theory however predicts that the current r.cost will
always be faster than the current r.terracost if r.terracost is run with
numtiles>1. We will see.

BTW, I took the liberty to fix r.terracost, it works now with
numtiles>1. See changelog for r39684
https://trac.osgeo.org/grass/changeset/39684

Markus M

>
> -Laura
>
>
>
>> ----------------------------------------------------------------------
>>
>> Message: 1
>> Date: Fri, 06 Nov 2009 09:50:02 +0100
>> From: Markus Metz <markus.metz.giswork at googlemail.com>
>> Subject: [GRASS-dev] comparing r.cost and r.terracost
>> To: GRASS developers list <grass-dev at lists.osgeo.org>
>> Message-ID: <4AF3E33A.1090208 at googlemail.com>
>> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>>
>> Same test region as before
>>
>> North Carolina sample dataset
>>
>> g.region rast=elev_state_500m at PERMANENT res=100
>> # gives about 28 million cells
>> v.to.rast nc_state at PERMANENT use=val val=500.0 out=cost --o
>> v.to.rast urbanarea at PERMANENT use=val val=1 out=urbanarea --o
>> r.cost in=cost start_rast=urbanarea out=dist_urban percent_memory=20 --o
>>
>> grass7 r.cost
>> real    0m55.349s
>> user    0m53.360s
>> sys    0m1.797s
>>
>> grass65 r.cost
>> real    26m35.166s
>> user    2m55.612s
>> sys    23m37.921s
>>
>> r.terracost: check optimal tile size for 400MB memory (default setting;
>> r.cost in grass7 used 135MB with 20% of maps in memory)
>> r.terracost in=cost start_rast=urbanarea out=dist_urban_terracost -i
>> [...]
>> TILESIZE: nc_spm_08 N=28064550 elements, M=419430400 bytes, optimal
>> numtiles=1870
>>
>> r.terracost numtiles=1870, intermediate data are stored on disk as
>> r.cost does
>> real    25m13.593s
>> user    22m46.978s
>> sys    1m8.059s
>>
>> r.terracost numtiles=1, all in memory (just fits into 400MB)
>> real    0m17.969s
>> user    0m17.276s
>> sys    0m0.500s
>>
>> According to Laura Toma, when comparing r.cost with r.terracost,
>> numtiles must be >1 for r.terracost in order to compare disk I/O
>> algorithms [1]
>>
>> With these test settings that intentionally reduced memory consumption
>> in order to test disk I/O performance, r.terracost is not really faster
>> than r.cost in grass65 and much slower than r.cost in grass7.
>>
>> Markus M
>>
>> [1] http://lists.osgeo.org/pipermail/grass-dev/2009-July/045157.html
>>
>>
>>
>>
>> ------------------------------
>>
>> _______________________________________________
>> grass-dev mailing list
>> grass-dev at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/grass-dev
>>
>> End of grass-dev Digest, Vol 43, Issue 8
>> ****************************************
>
> _______________________________________________
> grass-dev mailing list
> grass-dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/grass-dev



More information about the grass-dev mailing list