WebAssembly做科学计算时如何高效传递数组数据?
我用Rust编译成WASM来做矩阵运算,但每次传大数组都特别慢,是不是我用法不对?
试过直接传JS的Float64Array过去,结果性能还不如纯JS。查了文档说要用内存共享,但我照着写还是卡在数据拷贝上。
<script type="module">
import init, { mat_mul } from './pkg/matrix.js';
async function run() {
await init();
const a = new Float64Array([1, 2, 3, 4]);
const b = new Float64Array([5, 6, 7, 8]);
const result = mat_mul(a, b); // 这里感觉每次都复制了一遍
console.log(result);
}
run();
</script>
WebAssembly.Memory共享内存,别直接传 Float64Array。在 Rust 里定义共享内存,然后用Uint8Array来访问。差不多这样:Rust 部分也要改,别直接接收 JS 数组,从共享内存读数据。累死我了,但这能快不少。