微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决meta.Vectors 背后的黑魔法是什么?

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

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

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

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

P。 S.:使用 -O ReleaseFast 运行基准测试,所有变量都标记var

P。 P.S.:在调试模式下,最终编译了 10_000 个 Meta.Vector代码

解决方法

AFAIK 所做的只是明确利用 LLVM 的 SIMD 支持。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。