@@ -15,6 +15,7 @@ BUILD_MEM64="${WEBGPU_BRIDGE_BUILD_MEM64:-0}"
1515MEM64_MAX_MEMORY=" ${WEBGPU_BRIDGE_MEM64_MAX_MEMORY:- 12884901888} "
1616ENABLE_PTHREADS=" ${WEBGPU_BRIDGE_PTHREADS:- 1} "
1717PTHREAD_POOL_SIZE=" ${WEBGPU_BRIDGE_PTHREAD_POOL_SIZE:- 4} "
18+ PTHREAD_POOL_SIZE_STRICT=" ${WEBGPU_BRIDGE_PTHREAD_POOL_SIZE_STRICT:- 0} "
1819ALLOW_MEMORY_GROWTH=" ${WEBGPU_BRIDGE_ALLOW_MEMORY_GROWTH:- 1} "
1920INITIAL_MEMORY=" ${WEBGPU_BRIDGE_INITIAL_MEMORY:- 0} "
2021
@@ -43,6 +44,7 @@ Environment variables:
4344 WEBGPU_BRIDGE_MEM64_MAX_MEMORY wasm64 max linear memory bytes (default: 12884901888)
4445 WEBGPU_BRIDGE_PTHREADS Enable pthread runtime support (default: 1)
4546 WEBGPU_BRIDGE_PTHREAD_POOL_SIZE PThread pool size when enabled (default: 4)
47+ WEBGPU_BRIDGE_PTHREAD_POOL_SIZE_STRICT PThread strictness when enabled (default: 0)
4648 WEBGPU_BRIDGE_ALLOW_MEMORY_GROWTH Allow wasm memory growth (default: 1)
4749 WEBGPU_BRIDGE_INITIAL_MEMORY Fixed wasm memory bytes when growth disabled
4850
@@ -82,6 +84,7 @@ emcmake cmake \
8284 -DCMAKE_BUILD_TYPE=" $CMAKE_BUILD_TYPE " \
8385 -DLLAMADART_WEBGPU_PTHREADS=" $CMAKE_PTHREADS " \
8486 -DLLAMADART_WEBGPU_PTHREAD_POOL_SIZE=" $PTHREAD_POOL_SIZE " \
87+ -DLLAMADART_WEBGPU_PTHREAD_POOL_SIZE_STRICT=" $PTHREAD_POOL_SIZE_STRICT " \
8588 -DLLAMADART_WEBGPU_ALLOW_MEMORY_GROWTH=" $CMAKE_ALLOW_MEMORY_GROWTH " \
8689 -DLLAMADART_WEBGPU_INITIAL_MEMORY=" $INITIAL_MEMORY "
8790
@@ -116,6 +119,7 @@ if [[ "$BUILD_MEM64" == "1" ]]; then
116119 -DLLAMADART_WEBGPU_MEM64_MAX_MEMORY=" $MEM64_MAX_MEMORY " \
117120 -DLLAMADART_WEBGPU_PTHREADS=" $CMAKE_PTHREADS " \
118121 -DLLAMADART_WEBGPU_PTHREAD_POOL_SIZE=" $PTHREAD_POOL_SIZE " \
122+ -DLLAMADART_WEBGPU_PTHREAD_POOL_SIZE_STRICT=" $PTHREAD_POOL_SIZE_STRICT " \
119123 -DLLAMADART_WEBGPU_ALLOW_MEMORY_GROWTH=" $CMAKE_ALLOW_MEMORY_GROWTH " \
120124 -DLLAMADART_WEBGPU_INITIAL_MEMORY=" $INITIAL_MEMORY "
121125
@@ -136,27 +140,47 @@ if [[ "$BUILD_MEM64" == "1" ]]; then
136140 echo " [bridge] applying wasm64 runtime bigint interop patch"
137141 python3 - << 'PY ' "$OUT_DIR/llama_webgpu_core_mem64.js"
138142from pathlib import Path
143+ import re
139144import sys
140145
141146target = Path(sys.argv[1])
142147text = target.read_text(encoding='utf-8', errors='ignore')
143148
144- replacements = {
145- "__wasmfs_read(stream.fd,dataBuffer,length)": "__wasmfs_read(stream.fd,BigInt(dataBuffer),BigInt(length))",
146- "__wasmfs_read(stream.fd,dataBuffer,BigInt(length))": "__wasmfs_read(stream.fd,BigInt(dataBuffer),BigInt(length))",
147- "__wasmfs_pread(stream.fd,dataBuffer,length,BigInt(position))": "__wasmfs_pread(stream.fd,BigInt(dataBuffer),BigInt(length),BigInt(position))",
148- "__wasmfs_pread(stream.fd,dataBuffer,BigInt(length),BigInt(position))": "__wasmfs_pread(stream.fd,BigInt(dataBuffer),BigInt(length),BigInt(position))",
149- "__wasmfs_write(stream.fd,dataBuffer,length)": "__wasmfs_write(stream.fd,BigInt(dataBuffer),BigInt(length))",
150- "__wasmfs_write(stream.fd,dataBuffer,BigInt(length))": "__wasmfs_write(stream.fd,BigInt(dataBuffer),BigInt(length))",
151- "__wasmfs_pwrite(stream.fd,dataBuffer,length,BigInt(position))": "__wasmfs_pwrite(stream.fd,BigInt(dataBuffer),BigInt(length),BigInt(position))",
152- "__wasmfs_pwrite(stream.fd,dataBuffer,BigInt(length),BigInt(position))": "__wasmfs_pwrite(stream.fd,BigInt(dataBuffer),BigInt(length),BigInt(position))",
153- "__wasmfs_mmap(length,prot,flags,stream.fd,BigInt(offset))": "__wasmfs_mmap(BigInt(length),prot,flags,stream.fd,BigInt(offset))",
154- }
149+ def bigint_or_name(name):
150+ return rf"(?:BigInt\(\s*{name}\s*\)|{name})"
151+
152+ data_buffer = bigint_or_name("dataBuffer")
153+ length = bigint_or_name("length")
154+ position = bigint_or_name("position")
155+ offset = bigint_or_name("offset")
156+
157+ replacements = [
158+ (
159+ rf"__wasmfs_read\(\s*stream\.fd\s*,\s*{data_buffer}\s*,\s*{length}\s*\)",
160+ "__wasmfs_read(stream.fd,BigInt(dataBuffer),BigInt(length))",
161+ ),
162+ (
163+ rf"__wasmfs_pread\(\s*stream\.fd\s*,\s*{data_buffer}\s*,\s*{length}\s*,\s*{position}\s*\)",
164+ "__wasmfs_pread(stream.fd,BigInt(dataBuffer),BigInt(length),BigInt(position))",
165+ ),
166+ (
167+ rf"__wasmfs_write\(\s*stream\.fd\s*,\s*{data_buffer}\s*,\s*{length}\s*\)",
168+ "__wasmfs_write(stream.fd,BigInt(dataBuffer),BigInt(length))",
169+ ),
170+ (
171+ rf"__wasmfs_pwrite\(\s*stream\.fd\s*,\s*{data_buffer}\s*,\s*{length}\s*,\s*{position}\s*\)",
172+ "__wasmfs_pwrite(stream.fd,BigInt(dataBuffer),BigInt(length),BigInt(position))",
173+ ),
174+ (
175+ rf"__wasmfs_mmap\(\s*{length}\s*,\s*prot\s*,\s*flags\s*,\s*stream\.fd\s*,\s*{offset}\s*\)",
176+ "__wasmfs_mmap(BigInt(length),prot,flags,stream.fd,BigInt(offset))",
177+ ),
178+ ]
155179
156180changed = False
157- for old, new in replacements.items() :
158- if old in text:
159- text = text.replace(old, new)
181+ for pattern, replacement in replacements:
182+ text, count = re.subn(pattern, replacement, text)
183+ if count > 0:
160184 changed = True
161185
162186if not changed:
0 commit comments