meta.Vectors 背后的黑魔法是啥?

Posted

技术标签:

【中文标题】meta.Vectors 背后的黑魔法是啥?【英文标题】:what is dark magic behind meta.Vectors?meta.Vectors 背后的黑魔法是什么? 【发布时间】:2021-07-21 17:51:38 【问题描述】:

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

当向量的大小设置为 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 大小的 meta.Vectors 代码

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于meta.Vectors 背后的黑魔法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Python的黑魔法@property装饰器的使用技巧

宏定义的黑魔法 - 宏菜鸟起飞手册

宏定义的黑魔法——assert原理详解

iOS H5容器的一些探究:iOS 下的黑魔法 NSURLProtocol

runtime总结二之消息机制(包括消息转发,消息交换的黑魔法)

了解3D世界的黑魔法 - 纯Java构造一个简单的3D渲染引擎