一个用于游戏和图形的广泛线性代数库。
ultraviolet这是一个用于计算机图形和游戏相关的线性和几何代数的库,但快速,无论是从生产力还是运行时性能的角度来看。
在运行时性能方面,Ultraviolet 从一开始就考虑了性能。为此,我们为每种类型提供了两种不同的类型,每种类型的功能几乎相同,一种使用常规的 f32 标量值,另一种是"宽"类型,每个值都使用 SIMD f32x4 向量。这种设计目标明确,也使代码能够充分利用 SIMD。
"宽"类型采用"SoA"(数组结构)架构,即每个宽数据结构实际上包含其关联数据类型的 4 或 8 个数据,并同时对所有 SIMD "通道"执行操作。例如,Vec3x8 相当于 8 个 Vec3,全部捆绑在一个数据结构中。采用这种方法可能比标准的 "AoS"(结构数组)布局快得多(10 倍),但这取决于您的工作负载和算法要求。算法必须精心设计,以充分利用这种架构,而且要做到这一点说起来容易做起来难,尤其是如果您的算法涉及大量分支。
ultraviolet 是第一个以这种"AoSoA"方式设计的 Rust 数学库,尽管 nalgebra 现在也支持它的某些数据结构。
暂无开放 Issues,或尚未同步最近议题。