rust 2021 edition.
This is a port of the d3-geo-voronoi library into a RUST library.
As a example the library can be used to compute the following delaunay mesh.
( computed from 6,000 points on a sphere selected at random )
Currently we have 84% test coverage ( as reported by cargo tarpaulin -o Html )
A collection of d3 sub packages is being ported to rust.
The original javascript library has a benchmark in the form of web page which records the number of frames displayed per second. For comparison the benchmark has been ported.
Measuring the performance of a library is compilcated, as different applications employing the library may see different results. Desktop and mobile perfomance may differ.
There are traditionally two way of measuring increases in performance :-
A) Speed: By asking how long it takes to perform a certain computation?
B) Throughput: By asking how much more work can I perfom in a given time?
A and B are ideally linearly related, but often high throughput requires more memory which may increase page swapping. Javascipt uses garbage collection, rust does not. In garbage collected environments, the dynamics of a collectors behaviours may cause the figures reported by A and B to diverge.
Here are the results for the benchmark :-
A) When I tune the benchmark for 60ps, I find the javascript can render 600 points in 16ms. The rust version performs the same workload in 11ms. ( a 31% speedup ).
B) When I increase the number of points given to the RUST version to render, I find I can render 826 in 16ms. An increase in throughput of 37%.
I am currently looking to add more benchmarks, a diverse collection of example application code, will give greater confidence in what to expect.
This workspace contain a binary "profietarget" which outputs the result of a computation similar to that of the demopage. Before API finialization - I am currently using cargo flamegraph to identify any obvious optimizations.
from rustd3geo_voronoi
cargo install flamegraph
cargo flamegraph -- profile_target
Known bugs
Currently the demo works only then f64 is used as the floating point type. [For f32 the cell integrity is broken as some of the cell appear to takeup the whole sphere.] To be ported:-
contour.js and geo-contour-test.js
Currenly there is a failing test suite geovoronoitest.rs "geoVoronoi.hull does not break on difficult polygons"
I'm using wasm pack to package the following packages into a single wasm file. rustd3geo, rustd3delaunay.
The application displays a delaunay mesh of a large number of cells onto a sphere.
To build and start the web server:-
console
cd benchmark\www
npm install
npm run start
The last command automatically starts your web browser.
For benchmarking, to obtain best performance
console
cd benchmark\www
npm run build
npm run serve