WebAssembly是否支持三角函数?

7

WebAssembly是否支持三角函数?我的意思是内置支持,因为似乎我们必须从JavaScript导入这些函数。如果我们有像下面这样的东西就好了:

f32.sin
f32.cos

如果有意义的话。如果它们不存在,我认为这是因为实现非常依赖于系统。

问题:

想象一下,我们有一个非常复杂且计算成本高昂的公式,其中涉及到这些数学函数。我希望在不依赖导入或将我的代码细分为在WebAssembly中运行的部分和在JavaScript中运行的其他部分的情况下,在WebAssembly中计算所有内容。

除此之外,我相信如果三角函数内置,语义上看起来会更整洁。


显然相关:https://github.com/emscripten-core/emscripten/issues/19284 - starball
1个回答

13

虽然讨论过1, 2, 3,但三角函数在WebAssembly中不可用。一般而言,WebAssembly提供的操作码是CPU指令的高效实现,而三角函数却没有现代高效的CPU版本(即使x86的sin/cos也很慢)。

此外,我们目前不希望强制规定具体的精度限制。以正确的精度指定三角函数本身就是一种艺术形式,迄今为止并没有太大兴趣。

将来,我们希望看到像libm.wasm这样的代码共享机制,这将消除代码下载负担。

某些实现可以更加高效,如果有ISA信息的话,但我们需要有数据支持的倡导者来推动其标准化。我预计第一个这样的案例将是快速sqrt和inverse sqrt近似值,它们经常用于游戏并且有很好的ISA支持。除了WebAssembly的上下文之外,我没有听说过真正性能敏感的三角函数用途。并不是说这种用途不存在:这只是社区组中的优先事项问题。


我刚刚创建了一个模块,并使用泰勒定理编写了一个简单的算法。对于某些情况,它运行得相当不错,但并非100%准确。 - Asperger
在 sin/cos 处理大输入时具有低精度并不一定是每个人都想要的,但如果我们将它们作为 WebAssembly 内部函数提供,我们基本上不得不这样做。这种类型的权衡使得难以争论一个适用于所有情况的内置函数。 - JF Bastien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接