翻超分 Worker 的配置时我停在了一行上。快速档模型的分块参数写的是 tileCore:160, wasmTileCore:96, overlap:12。GPU 上每块有效区 160 像素而退到 WASM 就缩成 96。按我的直觉应该反过来:CPU 慢而块越大越能摊掉每次 run 的固定开销。超分分块不是我做的,我在图映只管端侧编解码和模型加载那一层。这篇是我拿同一轮实测的单块耗时去倒推这个取舍的记录,推的部分会标出来。
超分分块大小怎么选:先把重叠区算进去
我用的是图映 ImgIng(imging.cn/)9 月 3 日线上 upscale Worker 的代码副本,配上同一天跑的单块基准。跑基准的是一台 16 GB 内存的 M4 Mac。内核用 Chromium 149 开源构建且 ORT Web 版本是 1.27.0。快速档模型是只有 4 871 195 字节的 Real-ESRGAN General x4v3。另一档 x4plus 写的是 tileCore:128, wasmTileCore:96 并同样在 WASM 下缩块。手机端还有一个 mobileTileCore:64 的配置,这次没测。
选块的函数很短。它按后端取 core 值再把 overlap 加在四周作为上下文。模型实际吃进去的是 core 加两倍 overlap 的方块:WebGPU 是 184² 而 WASM 是 120²。推理完只把中间 core 那块贴回画布而四周的上下文裁掉。重叠区的计算因此是纯开销。184² 里重叠占 24%。120² 里占 36%。块越小这笔税越重。

这张图要看的是两种网格的密度差。底图是那张程序生成的瓶子样本缩到 1000×750 后叠上的两套分块。左边红线是 WebGPU 的 160 像素有效区(35 块)。右边蓝线是 WASM 的 96 像素有效区(88 块)。块边上断开的缺口就是 12 像素的重叠带。同一张图在 WASM 下要多跑一倍半的块,每块还有三分之一以上的面积是白算的。
160 和 96 每个像素各花多少
单块稳态耗时是实测的 3 次重复中位数。WebGPU 跑 184² 要 331 毫秒而跑 120² 要 150 毫秒。WASM 开 4 线程跑 184² 要 485 毫秒而跑 120² 要 211 毫秒。每块耗时不能直接横着比。我写了几行把它换算到每个有效像素上:
js
const plan = (w, h, core, pad, msPerTile) => {
const side = core + pad * 2;
const tiles = Math.ceil(w / core) * Math.ceil(h / core);
return { side, tiles, usPerPx: msPerTile * 1000 / (core * core),
estSec: tiles * msPerTile / 1000 };
};
线上两组配置下每个有效像素分别是 12.9 和 22.9 微秒。接下来是推算而不是整图实测。1000×750 的图在 WebGPU 下约 11.6 秒(35 块)而在 WASM 下约 18.6 秒(88 块),差约 1.8 倍。这个数没算拼接和编码,边缘那一圈块的实际输入比满块小。脚本按满块算,整图的估计会偏保守。这几个数我对过脚本输出和手算结果。
算到这里我自己也卡了一下。按同一张表,WASM 跑 184² 的 485 毫秒折成每有效像素约 18.9 微秒,比 96 那档的 22.9 还低。单看这台 M4 上的吞吐,WASM 用 160 的块反而更省时间。选 96 的理由我理解主要不在速度而在控制内存。可这台机器上 WASM 跑 184² 的渲染进程峰值是 594 MB,跑 120² 是 536 MB(只差 58 MB)。16 GB 的 Mac 显不出这笔账,内存更紧的设备上可能不一样,我手上没有数。代码里还有一个我觉得同样相关的细节。每块开始前它都会检查一次取消,再发一次「第 N / 总数 块」的进度。WASM 每块 211 毫秒而不是 485 毫秒,取消的响应和进度条的颗粒都细了一倍多。这是我读代码得出的推测,没有问过写这块的人。
顺带一个跑题的发现。超分 Worker 的 WASM 线程数取核数减一再封顶到 4,比抠图那边多留一个核给主线程。这台 10 核的机器上两边都落在 4 线程。
自己项目里怎么定块大小
我后来都先在两个后端上各跑两种块尺寸的单块稳态(一共四个数)。然后按有效面积换算成每像素耗时再比,而不是比每块耗时。GPU 上 184² 每像素 12.9 微秒而 120² 是 16.3 微秒,大块更划算这点没有悬念。WASM 上两档的差距要拿自己的模型和目标设备的内存上限一起看。只拿一台 16 GB 的 Mac 定下来的块尺寸,我不会直接推到手机上。