可以使用 Webassembly 触发功能吗?
Posted
技术标签:
【中文标题】可以使用 Webassembly 触发功能吗?【英文标题】:Webassembly trig functions possible? 【发布时间】:2017-12-28 21:55:44 【问题描述】:webassembly 是否支持三角函数?我的意思是像内置支持,因为似乎我们必须从 javascript 导入那些。如果我们有类似的东西会很棒:
f32.sin
f32.cos
如果有任何意义。如果它们不存在,我认为它是因为实现非常依赖于系统。
问题:
想象一下,我们有一些涉及这些数学函数的非常复杂且计算量大的公式。我想在 webassembly 中计算所有内容,而不依赖于导入或细分我的代码,其中一部分在 webassembly 中运行,另一部分在 javascript 中运行。
除此之外,我相信如果内置三角函数,语义上的东西看起来会更整洁。
【问题讨论】:
【参考方案1】:三角函数在 WebAssembly 中不可用,尽管在 1、2、3 之前已经讨论过它。一般来说,WebAssembly 为作为 CPU 指令有效存在的东西提供操作码,而三角函数现在没有高效的 CPU 版本(即使 x86 sin / cos 也很慢)。
此外,我们现在不想强制规定特定的精度范围。以正确的精度指定三角函数是一种艺术形式,到目前为止还没有引起强烈的兴趣。
未来,我们希望看到类似 libm.wasm 的代码共享,这将消除代码下载负担。
可以提出一个论点,即如果拥有 ISA 信息,实施可能会更有效,但我们需要有人用数据来支持该用例以对其进行标准化。我希望第一个这样的情况是快速 sqrt 和逆 sqrt 近似,它们经常在游戏中使用并且确实具有良好的 ISA 支持。在 WebAssembly 的上下文中,我还没有听说过真正对性能敏感的三角函数用法。并不是说我认为它们不存在:这是Community Group 的简单优先级问题。
【讨论】:
我刚刚创建了一个模块并使用泰勒定理编写了一个简单的算法。在某些情况下效果很好,但不是 100% 准确。 是的,对于 sin / cos 的大输入具有低精度不一定是每个人都想要的,但如果我们将它们设为 WebAssembly 内在函数,我们基本上必须提供。这种类型的权衡使得很难争论一刀切的内在。以上是关于可以使用 Webassembly 触发功能吗?的主要内容,如果未能解决你的问题,请参考以下文章
WebAssembly 编译器错误:使用外部库编译时未定义符号
第1449期WebAssembly 后 MVP 时代的未来:卡通技能树
浏览器中的 webassembly gl 画布可以使用透明背景吗?