75 lines
2.1 KiB
JavaScript
75 lines
2.1 KiB
JavaScript
export async function setupWebAssembly( wasmBuffer, workerData, arraySize, threadCount ) {
|
|
|
|
const { start, end, sabA, sabB, sabC } = workerData;
|
|
|
|
var sizePerThread = arraySize / threadCount;
|
|
|
|
// const a = new Float32Array(sabA);
|
|
//const b = new Float32Array(sabB);
|
|
//const c = new Float32Array(sabC);
|
|
|
|
|
|
const memory = new WebAssembly.Memory({
|
|
initial: 2747, // ~172 MB
|
|
maximum: 4096, // ~256 MB
|
|
shared: true
|
|
});
|
|
|
|
|
|
const { instance } = await WebAssembly.instantiate( wasmBuffer, {
|
|
env: {
|
|
memory: memory,
|
|
emscripten_notify_memory_growth: (index) => {
|
|
// This function is called when the WASM module wants to grow memory.
|
|
// You can log it or handle it as needed.
|
|
console.log(`Memory grew to ${index / 65536} pages`);
|
|
},
|
|
|
|
}
|
|
});
|
|
|
|
const ARRAY_SIZE = 15000576;
|
|
const a = instance.exports.alloc_float_array(sizePerThread);
|
|
const b = instance.exports.alloc_float_array(sizePerThread);
|
|
const c = instance.exports.alloc_float_array(sizePerThread);
|
|
|
|
//if (!a || !b || !c) throw new Error("Failed to allocate memory");
|
|
|
|
/*
|
|
// Benchmark initialization
|
|
const initStart = performance.now();
|
|
|
|
instance.exports.init_arrays_range(a, b);
|
|
|
|
const initTime = performance.now() - initStart;
|
|
|
|
// Benchmark calculation
|
|
const calcStart = performance.now();
|
|
|
|
instance.exports.calculate(a, b, c);
|
|
|
|
const calcTime = performance.now() - calcStart;
|
|
|
|
|
|
console.log(`Array initialization time: ${initTime.toFixed(3)} ms`);
|
|
|
|
console.log(`Calculation time: ${calcTime.toFixed(3)} ms`);
|
|
|
|
console.log(`Total time: ${(initTime + calcTime).toFixed(3)} ms`);
|
|
|
|
// Sample output
|
|
const mem = new Float32Array(instance.exports.memory.buffer);
|
|
|
|
for (let i = 0; i < 10; i++) {
|
|
|
|
console.log(`c[${i}] = ${mem[c/4 + i]}`);
|
|
|
|
}
|
|
|
|
// Clean up
|
|
instance.exports.dealloc_float_array(a);
|
|
instance.exports.dealloc_float_array(b);
|
|
instance.exports.dealloc_float_array(c);
|
|
*/
|
|
}
|