61 lines
2.0 KiB
JavaScript
61 lines
2.0 KiB
JavaScript
|
|
import WasmModule from './binaries/wasm_add_pthread.js';
|
||
|
|
|
||
|
|
async function main() {
|
||
|
|
const loadStart = Date.now();
|
||
|
|
const wasmModule = await WasmModule();
|
||
|
|
const loadDuration = Date.now() - loadStart;
|
||
|
|
console.log(`WASM module load time: ${loadDuration} ms`);
|
||
|
|
|
||
|
|
if (!wasmModule.wasmMemory || !wasmModule.wasmMemory.buffer) {
|
||
|
|
console.error("wasmMemory or wasmMemory.buffer not found!");
|
||
|
|
process.exit(1);
|
||
|
|
}
|
||
|
|
|
||
|
|
const ARRAY_SIZE = 15000576;
|
||
|
|
|
||
|
|
const allocStart = Date.now();
|
||
|
|
const aPtr = wasmModule._alloc_float_array(ARRAY_SIZE);
|
||
|
|
const bPtr = wasmModule._alloc_float_array(ARRAY_SIZE);
|
||
|
|
const cPtr = wasmModule._alloc_float_array(ARRAY_SIZE);
|
||
|
|
const allocDuration = Date.now() - allocStart;
|
||
|
|
console.log(`Memory allocation time: ${allocDuration} ms`);
|
||
|
|
|
||
|
|
const initStart = Date.now();
|
||
|
|
wasmModule._init_arrays(aPtr, bPtr);
|
||
|
|
const initDuration = Date.now() - initStart;
|
||
|
|
console.log(`Array initialization time: ${initDuration} ms`);
|
||
|
|
|
||
|
|
const memory = new Float32Array(wasmModule.wasmMemory.buffer);
|
||
|
|
|
||
|
|
const calcStart = Date.now();
|
||
|
|
for (let i = 0; i < 100; i++) {
|
||
|
|
wasmModule._calculate_range(aPtr, bPtr, cPtr, 0, ARRAY_SIZE);
|
||
|
|
}
|
||
|
|
const calcDuration = Date.now() - calcStart;
|
||
|
|
console.log(`Average calc time: ${(calcDuration / 100).toFixed(2)} ms`);
|
||
|
|
|
||
|
|
for (let i = 0; i < 10; i++) {
|
||
|
|
console.log(`c[${i}] = ${memory[cPtr / 4 + i]}`);
|
||
|
|
}
|
||
|
|
|
||
|
|
var testSize = 1000000;
|
||
|
|
|
||
|
|
// Benchmark the copy process
|
||
|
|
const copyStart = Date.now();
|
||
|
|
const jsArray = new Float32Array(testSize);
|
||
|
|
jsArray.set(memory.subarray(aPtr / 4, aPtr / 4 + testSize));
|
||
|
|
const copyDuration = Date.now() - copyStart;
|
||
|
|
console.log(`Copy time from WASM to JS ${testSize} items: ${copyDuration} ms`);
|
||
|
|
|
||
|
|
// the jsArray can be used inside WebGpu.
|
||
|
|
|
||
|
|
const deallocStart = Date.now();
|
||
|
|
wasmModule._dealloc_float_array(aPtr);
|
||
|
|
wasmModule._dealloc_float_array(bPtr);
|
||
|
|
wasmModule._dealloc_float_array(cPtr);
|
||
|
|
const deallocDuration = Date.now() - deallocStart;
|
||
|
|
console.log(`Memory deallocation time: ${deallocDuration} ms`);
|
||
|
|
}
|
||
|
|
|
||
|
|
main();
|