# spaceform A library for 3D rendering and simulation. It aims to be ergonomic, fast, and flexible. ## Speed Operation | `cgmath` | `spaceform` simd | `spaceform` scalar ------------------------|-----------|------------------|------------------- Vector + Vector | 0.45 ns | 0.23 ns | 0.45 ns Vector - Vector | 0.45 ns | 0.23 ns | 0.45 ns Vector * Vector | 0.45 ns | 0.23 ns | 0.45 ns Vector / Vector | 0.45 ns | 0.23 ns | 0.45 ns Vector abs | - | 0.23 ns | 0.45 ns Vector horizontal sum | 0.22 ns | 0.22 ns | 0.22 ns Vector min and max | - | 0.23 ns | 0.45 ns Vector dot product | 0.23 ns | 0.23 ns | 0.23 ns Vector cross product | 0.46 ns | 0.23 ns | 0.45 ns Vector * Matrix | 5.5 ns | 0.22 ns | 0.45 ns Matrix * Matrix | 24 ns | 0.95 ns | 2 ns Matrix transpose | 2 ns | 0.9 ns | 2 ns Matrix inverse | 12 ns | 0.95 ns | 2 ns Quaternion * Quaternion | 0.45 ns | 0.23 ns | 0.45 ns Benchmarked on an i7-4790K @ 4.6 Ghz. At worst, `spaceform` is as fast as `cgmath`. For vector-vector operations, `spaceform` is around twice as fast as `cgmath`. For matrix operations, `spaceform` blows `cgmath` out of the water. In some cases, even scalar `spaceform` is faster than `cgmath`. Here is the worst case scenario for `spaceform`, where data has to be loaded from memory before *every single operation*. Operation | `cgmath` | `spaceform` simd | `spaceform` scalar ------------------------|-----------|------------------|------------------- Vector + Vector | 1.8 ns | 0.5 ns | 1.8 ns Vector - Vector | 1.8 ns | 0.5 ns | 1.8 ns Vector * Vector | 1.8 ns | 0.5 ns | 1.8 ns Vector / Vector | 1.8 ns | 1.7 ns | 6.2 ns Vector abs | - | 0.5 ns | 1 ns Vector horizontal sum | 1 ns | 0.65 ns | 1 ns Vector min and max | - | 0.6 ns | 0.9 ns Vector dot product | 2 ns | 0.9 ns | 2 ns Vector cross product | 2.3 ns | 0.9 ns | 3.2 ns Vector * Matrix | 5.5 ns | 1.5 ns | 4.8 ns Matrix * Matrix | 30 ns | 4.7 ns | 19 ns Matrix transpose | 4.5 ns | 1.9 ns | 5.6 ns Matrix inverse | 22 ns | 11.8 ns | 30 ns Quaternion * Quaternion | 0.45 ns | 0.23 ns | 0.45 ns `spaceform` still beats `cgmath` with simd.