JavaScript中矩阵乘法的糟糕表现是高性能webgl的障碍。所以我正在考虑使用pnacl来加速它。理想情况下,我想将ArrayBuffer(Float32Array)和矩阵传递给pnacl,然后使用本机代码完成乘法并更新缓冲区中的值,最后通知页面(javascript)。是否有可能通过pnacl加速webgl矩阵乘法?
但我怀疑缓冲区内存是否可以共享pnacl和page javascript? 如果不是,我必须将缓冲区传递给客户端,我不确定这种操作对性能的影响。
任何建议将不胜感激!
JavaScript中矩阵乘法的糟糕表现是高性能webgl的障碍。所以我正在考虑使用pnacl来加速它。理想情况下,我想将ArrayBuffer(Float32Array)和矩阵传递给pnacl,然后使用本机代码完成乘法并更新缓冲区中的值,最后通知页面(javascript)。是否有可能通过pnacl加速webgl矩阵乘法?
但我怀疑缓冲区内存是否可以共享pnacl和page javascript? 如果不是,我必须将缓冲区传递给客户端,我不确定这种操作对性能的影响。
任何建议将不胜感激!
PPAPI使用共享内存传递ArrayBuffer,因此复制将最小。
https://code.google.com/p/chromium/codesearch#chromium/src/ppapi/proxy/plugin_array_buffer_var.h
然而,PNaCl插件在Chrome不同的(插件)的进程中运行,所以延迟(时间消息发送到插件和接收的答案)可以从否定的本机代码的任何性能改进。
与所有优化问题一样,您应该剖析代码以查看矩阵乘法是否是一个问题。如果是,bbudge是正确的,那么必须通过将数组传递到PNaCl并返回到JavaScript,您可能会失去性能收益。
asm.js代码与JavaScript运行在相同的进程和堆栈中,因此您可以通过使用它看到好处。看看http://jsperf.com/matrix-multiplication-with-asm-js/6。不幸的是,并不能保证asm.js能够在所有浏览器上运行。如果浏览器不直接支持asm.js,它将作为普通的JavaScript执行,最终可能会变慢。
当WebAssembly可用时,这可能是您最好的选择。