~icefox/elixir_mathbench - 用于 Elixir 库的向量数学基准测试

这是关于 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 中不同向量数学库的性能进行了初步比较,为后续的优化和研究提供了参考。

阅读 9
0 条评论