- 稠密数组存储矩阵
- 用 foreach 包装一下枚举的过程
- 分离 read/write/create 三种访问模式
- 改用 unordered_map来存储
- unordered_map 手动 read(i, j) 也一样速度
- 把坐标和值打包成 tuple,存储在 vector
- map 基于红黑树,会按照键值排序,需要键值具有 operator< 重载,复杂度 O(logn) C++11 新增的 unordered_map 基于哈希表,不保证顺序但更高效,需要键值能被哈希,复杂度 O(1)
- unordered_map 作为顶层,指针作为中层,稠密数组作为底层
- OpenVDB 的稀疏体积,可以存储符号距离场(SDF),也可以存储烟雾仿真的结果等
- 操作系统管理内存的最小单位:页(4KB)
- 配合莫顿分块,AOSOA等第七课的技术,就得到SPGrid(sparse-paged grid)
- SPGrid 的利弊
- 优点:平坦直观,适合插桩,顺序访问,自适应网格
- 缺点:尺寸受限,操作系统挂钩,依赖 x86 硬件机制
- 完成作业基本要求 50 分(详见下方"作业要求")
- 能够在 ANSWER.md 中用自己的话解释 25 分
- 代码格式规范、能够跨平台 5 分
- 有自己独特的创新点 20 分
- 明显抄袭现象 -100 分
修改 main.cpp,改良其中的康威生命游戏模拟器(使用稀疏数据结构,高效利用内存),回答注释中的问题,并保证输出的答案正确。
测试的结果和你的优化思路,请填到 ANSWER.md。
温馨提示:如果用了 IDE,记得统一开启 Release 模式来比较性能。
如果你自己实现了哈希表而没有用标准库,或是结合第七课知识用了 _mm_stream_ps
,或是用了莫顿序分块的,用了局部数组实现 loop fusion:
只要是在 满足作业要求的基础 上,这是件好事!
老师会酌情加分,视为“独特的创新点”,但最多不超过 20 分。