已发布 34 个版本
0.10.4 | 2024 年 7 月 2 日 |
---|---|
0.10.3 | 2024 年 3 月 12 日 |
0.10.2 | 2024 年 2 月 13 日 |
0.10.0 | 2023 年 12 月 19 日 |
0.1.0 | 2022 年 12 月 31 日 |
在 算法 类别中排名 242
每月下载量 343 次
54KB
1.5K SLoC
d3_geo_voronoi_rs
rust 2021 版本
给定一组球坐标下的对象,它计算它们的 Delaunay 三角化和其对偶,Voronoi 图。
这是将 d3-geo-voronoi 库移植到 RUST 库中。
它是将 d3 模块移植到 rust 的集合的一部分。
- d3_geo_rs
- d3_delaunay_rs
- d3_geo_voronoi_rs
例如,库可以用来计算以下 Delaunay 网格。
(从球面上的 6,000 个随机点计算而来)
目前,我们有 84% 的测试覆盖率(如 cargo tarpaulin -o Html 报告)
性能分析
演示页面
原始 JavaScript 库有一个基准测试,以网页形式记录每秒显示的帧数。为了比较,基准测试也已移植。
- javascript - d3-geo_voronoi/src/benchmark/sphereCanvas.html
- rust - rust_d3_geo_voronoi/benchmark.
衡量库的性能很复杂,因为使用库的不同应用程序可能会看到不同的结果。桌面和移动性能可能不同。
通常有两种衡量性能提升的方法:
A) 速度:通过询问执行某项计算需要多长时间?
B) 吞吐量:通过询问在给定时间内可以完成多少工作?
A 和 B 理想情况下是线性相关的,但高吞吐量通常需要更多内存,这可能会导致页面交换增加。JavaScript 使用垃圾回收,Rust 不使用。在垃圾回收环境中,回收器的动态可能导致 A 和 B 报告的数字不同。
以下是基准测试的结果:
A) 当我为60ps调整基准测试时,我发现JavaScript可以在16ms内渲染600个点。Rust版本完成相同的工作量只需要8.165ms。(速度提升1.95倍)。
B) 当我增加分配给Rust版本渲染的点数时,我发现我可以在16ms内渲染1220个点。增加了不到2倍。
我目前正在寻找更多的基准测试,一个多样化的示例应用代码集合,将增加我们对预期的信心。
性能分析目标
此工作区包含一个名为"profile_target"的二进制文件,它输出类似于demo_page的计算结果。在API最终确定之前——我目前使用cargo flame-graph来识别任何明显的优化。
来自rust_d3_geo_voronoi
cargo install flamegraph
cargo flamegraph -- profile_target
进一步开发
考虑到从0.9.0迁移到0.10.0。许多非规范化的"新"方法已被TryFrom实现所取代。有关更多详细信息,请参阅CHANGELOG.md
目前,当使用f64作为浮点类型时,演示才能正常工作。[对于f32,单元格的完整性被破坏,因为一些单元格似乎占据了整个球体。] 待移植:
contour.js 和 geo-contour-test.js
目前有一个失败的测试套件geo_voronoi_test.rs "geoVoronoi.hull在困难的多边形上不会断裂"。
构建基准测试的说明
我正在使用wasm pack将以下包打包成一个单独的wasm文件。rust_d3_geo,rust_d3_delaunay。
该应用程序在球体上显示大量单元格的Delaunay网格。
要构建并启动Web服务器:
cd benchmark\www
npm install
npm run start
最后一个命令将自动启动您的Web浏览器。
对于基准测试,为了获得最佳性能
cd benchmark\www
npm run build
npm run serve
依赖关系
~17MB
~299K SLoC