meta.Vectors背后的黑魔法是什么?

what is dark magic behind meta.Vectors?

在基于通用算法和迭代器实现了一些向量代数之后,我决定 运行 一些基准测试。这个想法是将自定义向量与 meta.Vector 的性能(进行加法和缩放)进行比较。

当向量的大小设置为 10 时,自定义向量的性能略优于 meta.Vectors。当向量的大小设置为 100 时,meta.Vectors 略优于自定义向量。当向量的大小设置为 1000 时,自定义向量执行加法的速度是 meta.Vectors 的两倍,缩放速度比 meta.Vectors 稍慢(使用 @splat)。

最有趣的是编译时间——它们随着向量大小的增长而增长(没有测量,无法判断编译时间是否与向量大小呈线性关系)。当向量的大小设置为 10_000 时,我最终(经过漫长的等待)收到 shell returned 137 错误消息(在编译期间);在我注释掉任何提及 meta.Vector 之后,代码编译得很好。

所以我的问题是,什么样的(编译器?)黑魔法让 1000 大小的 meta.Vectors 工作得如此之快,我可以用它来使我的代码更快吗?

P. S.:基准测试是 运行 和 -O ReleaseFast,所有变量都标记为 var

P. P. S.:在调试模式下代码 10_000-sized meta.Vectors 最终编译

据我所知,它所做的就是明确利用 LLVM 的 SIMD 支持。

https://ziglang.org/documentation/0.8.0/#Vectors