Good day.
I am doing some benchmarking trying to find out the most optimal way to calculate vegetation indexes. For example I am calculating NDVI index where the size of NIR and RED bands are 2.2 GB each and I get the following results on same hardware.
-
using i.vi
Calculation takes 14m 24s -
using r.mapcalc (it is compiled with --with-pthread option)
Calculation takes 6m 30s (huge difference - same result!!!) -
using i.vi.mpi within 1 node with 8 cores
Number of CPU | Calculation time
2 CPU | 12m 14s
3 CPU | 12m 8s
4 CPU | 11m 59s
And when I am trying to submit this job on cluster, on a several nods (e.g. 6 nods with 8 CPU on each - 48 CPU), I am getting VERY BAD result - more than 90 minutes , for a calculation which r.mapcalc did in just 6m30s.
So now I really cannot understand the meaning of i.vi or i.vi.mpi.
Can anyone explain, what purposes these modules developed for? Which kind of tasks they do better than r.mapcalc? What can I try to see the usefulness of i.vi or i.vi.mpi?
Where can I find some documentation explaining the inner structure of these modules and understand the differences between i.vi and r.mapcalc (because actually, as I found out, r.mapcalc can do everything that i.vi do, but more that 2 times faster.) ?