这是关于 Elixir 中各种向量数学库的粗略基准测试报告,主要内容如下:
- 目的:比较不同 Elixir 向量数学库在 Erlang VM 上进行游戏开发类型数值计算的速度,以及 BEAM VM 的 JIT 进展对其的影响
- 实现方法:各种向量数学库采用不同的实现方式,如使用原生数据类型、用 NIF 包装 BLAS 原语、用 NIF 包装高级 C 或 Rust 代码等
- 测试工具及环境:使用 Benchee 作为测试工具,在 Linux 系统(AMD Ryzen 5 7640U)上,Elixir 版本 1.15.4,Erlang 版本 26.0.2 下进行测试
- 测试配置:时间为 5s,并行度为 1,预热时间为 2s
详细结果:
- vec3 相关操作:graphmath 在 vec3_add、vec3_cross、vec3_dot 等操作上性能较好,nx 和 exla 在这些操作上性能较差,内存使用方面 nx 和 exla 占用较大
- quat_rotations 操作:graphmath 在 quat_rotations 操作上性能远好于 matrex
- mat4 相关操作:matrex 在 mat4_add、mat4_mul 等操作上性能较好,nx 和 exla 在这些操作上性能较差,内存使用方面 nx 和 exla 占用较大
- vec4_mat4_mul 操作:matrex 在 vec4_mat4_mul 操作上性能较好,nx 和 exla 在这些操作上性能较差,内存使用方面 nx 和 exla 占用较大
- mat4_transpose 操作:graphmath 在 mat4_transpose 操作上性能远好于其他库,exla 在这些操作上性能最差
- 结论:Graphmath 是唯一包含图形和物理相关所有操作的库,在大多数情况下性能较好;对于一些原生代码库在矩阵乘法等操作上表现较好,可进一步研究优化;同时提到用 Rust 和
glam
crate 进行的一些尝试,其在某些操作上速度非常快 - 可能的混杂因素:测试是对 1000 个值的列表应用给定操作,实际系统中使用更密集的数据结构可能有收益;未检查库的正确性;未对矩阵的创建和销毁进行基准测试
总的来说,该报告对 Elixir 中不同向量数学库的性能进行了初步比较,为后续的优化和研究提供了参考。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。