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); */ }