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可用時,這可能是您最好的選擇。