You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WebGL GPGPU排序计时与调用顺序问题咨询

WebGL GPGPU排序器的计时问题

我通过渲染到纹理的方式,用WebGL实现了一个GPGPU排序器。排序器功能正常,但无法准确统计其执行时间,尤其没法和JS原生sort方法的耗时做对比。

GPU排序包含三个核心函数:

  • initGpu(..):初始化纹理、缓冲区、帧缓冲等资源
  • sortGpu(..):设置uniform变量并运行着色器程序,将输入纹理排序后绘制到帧缓冲绑定的纹理上
  • readFB(..):通过readPixels导出指定帧缓冲的内容

统计CPU排序耗时的方法很直接,用performance.now()计算时间差:

const a = [1, ..., 100];
const then = performance.now();
a.sort();
console.log(`${performance.now() - then}ms`)

但用同样方式包裹sortGpu(..)计时时,无论输入数组大小增加多少,耗时都维持在约0.005毫秒,直到绘制调用耗时超过上限导致GL实例丢失。我的GPU有约1000个CUDA核心,数组规模超过这个数值后理应变慢,这让我困惑。

我了解JS中GL调用是完全顺序执行的,比如以下代码中,x会在绘制完成后才被修改,这也是批量绘制更高效的原因之一:

gl.drawArrays(...);
x += 10;

readFB(..)(以及readPixels(..))必须遵循这种顺序性,否则输出数组不可靠。我知道可以通过计时sortGpu(..); readFB(..)来获取准确时间,但这会引入不需要的额外开销——我希望将输出保留为纹理,用于其他GPGPU操作。

内容的提问来源于stack exchange,提问作者josh-stackexchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 00:06:24