-
Notifications
You must be signed in to change notification settings - Fork 201
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
union op causes out of bounds error using i_overlay 1.7.4 #1273
Comments
(Test was run in release mode, fyi) |
The same issue I got. |
Should we pin to 1.7.2? And has this been reported upstream to |
I think we should pin, yes. We can't report yet because there have now been subsequent i_overlay releases which may have fixed the issue, but we can't test against them because of broken API compat. So I think we need to do the following:
Bonus: |
I can take a look tomorrow.
|
Can you zip and upload the wkt here? I don't have a dropbox account. |
Can you see if #1275 (i_overlay 1.8) fixes anything for you @urschrei ? Or i_overaly 1.9: https://github.com/georust/geo/tree/mkirk/i_overlay_1.9 |
Tests now pass on #1275, with a slight perf improvement over 1.72, but note that the results are different (we end up with fewer output points – I think this is good?) Multi-Threaded Unary Union Perf Test2.42s -> 2.05s Note that this isn't a criterion-based test as that isn't feasible given the duration, but considering how much work is being done, the timings are stable. |
Uhhh possibly may have spoken too soon: results for the same test (number of output polygon points) varies between single- and multi-threaded versions of the algorithm. multi-thread: 3539 It's a small difference, but I'm not sure why it's arising. Let me check whether it's the same on 1.72… |
(I will also note that single-thread perf for that test using 1.9 is 11.3s -> 6.1s. That's a very big improvement…) |
Also seeing differences (different differences ofc) between single- and multi on 1.72, so that's something to dig into separately as part of #1246. |
Note there is a serious performance regression for larger geometries in our benchmarks vs. 1.8. cargo bench --bench=boolean_ops -- --baseline=main ... small ones are fine, but big ones have huge regression Circular polygon boolean-ops/bops::union/1024 time: [4.3625 ms 4.3922 ms 4.4093 ms] change: [+1.7493% +2.4971% +3.2026%] (p = 0.00 < 0.05) Performance has regressed. Circular polygon boolean-ops/bops::intersection/2048 time: [14.057 ms 14.115 ms 14.157 ms] change: [+9.0224% +10.438% +11.658%] (p = 0.00 < 0.05) Performance has regressed. Circular polygon boolean-ops/bops::union/2048 time: [14.012 ms 14.071 ms 14.134 ms] change: [+11.212% +12.141% +13.317%] (p = 0.00 < 0.05) Performance has regressed. Found 1 outliers among 10 measurements (10.00%) 1 (10.00%) high severe Circular polygon boolean-ops/bops::intersection/4096 time: [360.66 ms 361.18 ms 361.83 ms] change: [+709.38% +713.12% +716.34%] (p = 0.00 < 0.05) Performance has regressed. Found 2 outliers among 10 measurements (20.00%) 2 (20.00%) high severe Circular polygon boolean-ops/bops::union/4096 time: [361.35 ms 361.71 ms 362.13 ms] change: [+710.58% +713.76% +716.59%] (p = 0.00 < 0.05) Performance has regressed. Likely this is because there is a new heuristic for "solver" strategies based on how big your input is - the cliff likely indicates the switch to one of the solvers used for larger inputs. See iShape-Rust/iOverlay#13 There are significant gains with some "real world" data, e.g. urshrei's cascaded union tests: #1273 (comment) I'm more inclined to trust that more realistic data over the synthetic geometries we use in our benchmarks. Plus, I'd prefer to leave in performance twiddling to upstream and contribute changes there rather than fine-tuning things at our own call sites.
Closed by #1275 |
Repro:
try to union this geometry (valid WKT AFAIK) using the
unary_union
branch in #1246.Result:
Note the i_overlay version. Unfortunately there's no way to use 1.7.2 using our current Cargo.toml. This works:
The text was updated successfully, but these errors were encountered: