Subscribe to this thread
Home - General / All posts - 9.0.168: interpolation performance compared to 8
adamw


8,242 post(s)
#07-Aug-18 16:09

Here are some numbers comparing the performance of interpolation operations added in 9.0.168 to analogous operations in Manifold 8.

The test system is one with a cheap 8-core CPU, 32 GB RAM, Windows 10. Both 8 and 9 were run in 64-bit mode. All settings were kept at defaults, which generally meant that 9 was using 8 threads whenever possible.

The test data set is a Manifold 8 MAP file: bathymetry-8.map (42 MB)

With the SRTM surface from the file, 4,800 x 6,000 pixels, int16:

Test 1

Build contour lines from -5,000 to 5,000 step 1,000 (contouring was technically added before 9.0.168, but we need to build source data for the interpolation anyway).

8.0.30: 21.940 sec

9.0.168: 0.869 sec (better data structures plus threads)

Test 2

Interpolate contours back into a surface using triangulation (discarding connections between segments and using only heights at coordinates). Resolution = original (0.0083333333333 deg in 8, specified as a multiplier of 1 to the existing resolution of 0.0083333333333 deg in 9).

8.0.30: 33.500 sec + about 4 sec to compute intermediate levels on open

9.0.168: 4.037 sec (including time to compute intermediate levels, big boost from threads)

Test 3

Interpolate contours back into a surface using triangulation with segments, removing flat areas using DEST, resolution = original.

8.0.30: 118.220 sec + about 4 sec to compute intermediate levels on open

9.0.168: 22.133 sec (big boost from threads, additional processing with DEST is faster in 9 but it is not 8x faster as other parts so the performance win, while still very big, gets proportionally smaller)

With the point grid from the file, about 50,000 points, step of 0.2 deg, heights transferred from the SRTM surface:

Test 4

Interpolate grid into a surface using kriging, model = auto, 10 neighbors, resolution = original.

8.0.30: 311.350 sec + about 4 sec to compute intermediate levels on open

9.0.168: 32.144 sec (big boost from threads plus computing interpolation model is faster)

Test 5

Interpolate grid into a surface using kriging, model = auto, Voronoi neighbors, resolution = original.

8.0.30: hours

9.0.168: 25.124 sec (an additional big boost comes from using the representation for Voronoi diagram which works much faster with interpolation)

The performance difference on larger amounts of data is much bigger.

tjhb

8,399 post(s)
online
#08-Aug-18 03:26

This is really huge, a proper game changer. I'm so happy to be able to use it and to spread the brilliant work around.

I will post some timings from the work I do, too.

This is probably silly--though not pointless--but I am going to wait for a little while before doing that, for this reason: I am partway through writing my own SQL to do the work of the new built-in interpolation templates, now added in 9.0.168. It's a valuable learning exercise for me, a little bit like an exam (in a really good way). I don't want to look at the Manifold-produced code until I've got my own code working--or until I get really stuck.

Then I'll post some more cool numbers.

Manifold User Community Use Agreement Copyright (C) 2007-2017 Manifold Software Limited. All rights reserved.