在实现了一些基于通用算法和迭代器的向量代数之后,我决定运行一些基准测试。这个想法是将自定义向量的性能与meta.Vectors 的性能(进行加法和缩放)进行比较。
当向量的大小设置为 10 时,自定义向量的性能略优于meta.Vectors。当向量的大小设置为 100 时,meta.Vectors 稍微优于自定义向量。当向量的大小设置为 1000 时,自定义向量执行加法和缩放的速度是 s 的两倍meta.Vector- 比meta.Vectors 稍慢(使用@splat)。
最有趣的是编译时间——那些随着向量大小的增长而增长(没有测量,无法判断编译时间是否与向量大小成线性关系)。当向量的大小设置为 10_000 时,我最终(经过长时间的等待)收到shell returned 137错误消息(在编译期间);在我注释掉任何提及之后meta.Vector,代码编译得很好。
所以我的问题是什么样的(编译器?)黑魔法让 1000 大小meta.Vector的 s 工作得如此之快,我可以用它来让我的代码更快吗?
PS:基准测试是用 -O ReleaseFast 运行的,所有变量都被标记了var
meta.VectorPPS:在调试模式下,最终编译了 10_000 大小的代码