I am finding that ShortestPathFinder in FME Desktop 2019.1.0 gets exponentially slower as I increase the number of "From-To" lines, whereas I would expect it to get linearly slower (i.e. twice as many From-To lines, twice the time) as each path calculation should be independent. Can someone explain why this would be and how I can avoid it?
To give some context, I am running ShortestPathFinder over a (road) network with simple 2-point "From-To" lines whose vertices have already been snapped to the (road) network. There are (up to) 120,000 from-to lines, with a network of 280,000 edges (as output by a LineOnLineOverlayer to split all lines at intersections). For ShortestPathFinder I am using default settings, other than turning off snapping (reducing iterations from 10000 to 1000 made little difference). fStrangely, setting "Re-order From-To Line" to "No" hides all the other optimization settings - a bug?]
The final output results are all exactly as I would expect, but it takes about a day to run (on an a fairly new Intel i5 HP Elitebook laptop with 16GB RAM). If I limit the number of From-To lines, it runs much faster. I have tried reworking the workbench to put the ShortestPathFinder in a Custom transformer to run on "moderate" parallel processing, hence 8 processor threads and also to limit it to groups of exactly 2000 from-to lines each. Although this maxes out the CPUs, this does not appear to run a lot faster. However, because the timing of each group is reported separately it very clearly demonstrates it getting slower - the following is an edit of the logfile to pull out the lines indicating successive group session durations. (I could understand the first 3 or 4 running faster as they are probably getting a bigger slice of the computer non-CPU resources):
13:20:44|0> Duration: 1 minute 49.2 seconds.
13:21:50|1> Duration: 2 minutes 53.4 seconds.
13:25:34|2> Duration: 6 minutes 36.7 seconds.
13:26:34|3> Duration: 7 minutes 34.3 seconds.
13:27:54|7> Duration: 8 minutes 42.5 seconds.
13:28:14|5> Duration: 9 minutes 9.1 seconds.
13:28:30|6> Duration: 9 minutes 21.6 seconds.
13:28:33|4> Duration: 9 minutes 31.3 seconds.
13:32:13|8> Duration: 10 minutes 59.7 seconds
13:35:37|9> Duration: 13 minutes 31.0 seconds
13:41:06|10> Duration: 15 minutes 17.6 seconds
13:47:38|11> Duration: 20 minutes 49.8 seconds
13:54:24|12> Duration: 26 minutes 16.3 seconds
13:59:03|13> Duration: 30 minutes 34.1 seconds
14:00:37|14> Duration: 32 minutes 6.1 seconds.
14:03:38|15> Duration: 35 minutes 3.2 seconds.
14:10:05|16> Duration: 37 minutes 36.4 seconds
14:16:19|17> Duration: 40 minutes 29.0 seconds
14:24:35|18> Duration: 43 minutes 14.4 seconds
14:34:04|19> Duration: 46 minutes 5.2 seconds.
14:42:22|20> Duration: 47 minutes 37.8 seconds
14:48:19|21> Duration: 48 minutes 46.5 seconds
14:52:22|22> Duration: 51 minutes 25.9 seconds
15:00:08|23> Duration: 56 minutes 8.9 seconds.
15:10:25|24> Duration: 59 minutes 35.7 seconds.
15:18:45|25> Duration: 1 hour 2 minutes 7.9 seconds.
Note: I have also tried splitting it across WorkspaceRunner (as suggested in one of the blogs), but this was extremely slow with passing each From-To line to the WorkspaceRunner. I may try reworking that to get the workspace in the runner to read their own groups of from-to lines from a file. But that's a bit of a distraction... I can't see why the original single-thread version is running exponentially slower.
Your suggestions appreciated!