#quaternions #simd #linear-algebra #gamedev #3d-rendering

nightly spaceform

一个跨平台的SIMD加速3D图形数学库

3个不稳定版本

0.1.0 2021年12月23日
0.0.2 2021年12月23日
0.0.1 2021年12月13日

#1473 in 数学

Apache-2.0

66KB
2K SLoC

spaceform

一个用于3D渲染和仿真的库。
它的目标是易于使用、快速和灵活。

速度

操作 cgmath spaceform simd spaceform 矢量
矢量 + 矢量 0.45 ns 0.23 ns 0.45 ns
矢量 - 矢量 0.45 ns 0.23 ns 0.45 ns
矢量 * 矢量 0.45 ns 0.23 ns 0.45 ns
矢量 / 矢量 0.45 ns 0.23 ns 0.45 ns
矢量绝对值 - 0.23 ns 0.45 ns
矢量水平求和 0.22 ns 0.22 ns 0.22 ns
矢量最小和最大值 - 0.23 ns 0.45 ns
矢量点积 0.23 ns 0.23 ns 0.23 ns
矢量叉积 0.46 ns 0.23 ns 0.45 ns
矢量 * 矩阵 5.5 ns 0.22 ns 0.45 ns
矩阵 * 矩阵 24 ns 0.95 ns 2 ns
矩阵转置 2 ns 0.9 ns 2 ns
矩阵逆 12 ns 0.95 ns 2 ns
四元数 * 四元数 0.45 ns 0.23 ns 0.45 ns

在i7-4790K @ 4.6 Ghz的CPU上进行了基准测试。
在最坏的情况下,spaceformcgmath 一样快。
对于矢量-矢量操作,spaceform 比约快两倍于 cgmath
对于矩阵操作,spaceform 远远快于 cgmath
在某些情况下,标量 spaceform 甚至比 cgmath 更快。

以下是 spaceform 的最坏情况,其中必须在每次操作之前从内存中加载数据。

操作 cgmath spaceform simd spaceform 矢量
矢量 + 矢量 1.8 ns 0.5 ns 1.8 ns
矢量 - 矢量 1.8 ns 0.5 ns 1.8 ns
矢量 * 矢量 1.8 ns 0.5 ns 1.8 ns
矢量 / 矢量 1.8 ns 1.7 ns 6.2 ns
矢量绝对值 - 0.5 ns 1 ns
矢量水平求和 1 ns 0.65 ns 1 ns
矢量最小和最大值 - 0.6 ns 0.9 ns
矢量点积 2 ns 0.9 ns 2 ns
矢量叉积 2.3 ns 0.9 ns 3.2 ns
矢量 * 矩阵 5.5 ns 1.5 ns 4.8 ns
矩阵 * 矩阵 30 ns 4.7 ns 19 ns
矩阵转置 4.5 ns 1.9 ns 5.6 ns
矩阵逆 22 ns 11.8 ns 30 ns
四元数 * 四元数 0.45 ns 0.23 ns 0.45 ns

spaceform 仍然通过SIMD打败了 cgmath

无运行时依赖