2个版本
0.25.1 | 2022年2月4日 |
---|---|
0.25.0 | 2022年2月4日 |
#277 在 性能分析
155KB
2.5K SLoC
AoC 2021
这包含了所有AoC 2021谜题的高效解决方案。更多信息请见AOC 2021。
查看文档以了解解决方案的详细说明。
lib.rs
:
这个crate包含了所有AoC 2021谜题的合理高效解决方案。更多信息,包括谜题提示,请见AOC 2021。
如果你之前没有使用过Rust,这些是从代码库中生成的文档。它们应该涵盖了我对问题和解决方案的想法,提供一个概述,并允许通过屏幕右侧的[src]
按钮轻松浏览代码。这是我第一次这样想通过Rust文档显示更多的内容,所以我很好奇反馈。
初始目标
在JVM启动之前执行所有谜题(约800ms)。
注意:这已经得到了稳固的实现,因为所有谜题在每次基准测试的系统上都运行在 <100ms。在我的台式机上,它们比python
的冷启动要快(通过time python3 -c "exit()"
测量)!
代码布局
每一天的代码都在不同的模块中(在页面底部链接),有三个强制函数:generator
、part1
和part2。
generator
接受输入文本,从中解析并计算一个有用的中间表示形式,然后将该值的引用传递给part1
和part2
。
这允许我们单独关注每个部分,同时追踪解析输入的成本。然而,这也意味着我们在part1
和part2
之间经常要做重复工作。
解决方案旨在通用,但可能需要更改常量。例如,如果输入是固定大小的网格,数据结构可能会使用一个常量集来表示这个固定大小,因为这可以减少所需的指针遍历。
由于我的台式机缓存(按现代标准)较弱,我经常优化内存效率而不是CPU完成的工作量。在具有更快内存层次结构的系统上,这可能不会带来同样的回报。
基准测试
已对几种不同的系统上的解决方案进行了基准测试,但主要开发是在英特尔i7-6700K上完成的。系统信息和结果可以在benchmarks
模块下找到。
有关完整代码,包括框架和基准测试代码,请参阅Gitlab仓库。
依赖项
~2–12MB
~103K SLoC