是否有可能通过pnacl加速webgl矩阵乘法?

时间:2016-02-23 10:08:19

标签: javascript matrix webgl google-nativeclient

javascript中矩阵乘法的糟糕表现是高性能webgl的障碍。所以我在考虑使用pnacl来加速它。

理想情况下,我想将ArrayBuffer(Float32Array)和矩阵传递给pnacl,然后使用本机代码完成乘法并更新缓冲区中的值,最后通知页面(javascript)。

但我怀疑缓冲存储器是否可以为pnacl和页面javascript共享? 如果没有,我必须将缓冲区传回客户端,我不确定此类操作对性能的影响。

任何建议都将不胜感激!

2 个答案:

答案 0 :(得分:1)

PPAPI使用共享内存传递ArrayBuffer,因此复制将是最小的。

https://code.google.com/p/chromium/codesearch#chromium/src/ppapi/proxy/plugin_array_buffer_var.h

但是,PNaCl插件在Chrome中的不同(插件)进程中运行,因此延迟(将消息发送到插件并接收答案的时间)可能会抵消本机代码的任何性能提升。

答案 1 :(得分:0)

与所有优化问题一样,您应该对代码进行分析,以查看矩阵乘法是否是一个问题。如果是,bbudge是正确的,你可能会因为必须将数组传递给PNaCl并返回JavaScript而失去任何性能提升。

asm.js代码在与JavaScript相同的进程和堆栈中运行,因此您可以通过使用它来看到好处。看看http://jsperf.com/matrix-multiplication-with-asm-js/6。不幸的是,无法保证asm.js在所有浏览器上都具有高性能。如果浏览器不直接支持asm.js,它将以纯JavaScript的形式执行,这可能会变慢。

WebAssembly可用时,这可能是您最好的选择。