我最近一直在玩计算着色器,我正在尝试确定设置我的 [numthreads(x,y,z)] 和调度调用的最佳方式。我的演示窗口是 800x600,我每像素启动 1 个线程。我正在执行 2D 纹理修改 - 没有太重。
我的第一次尝试是指定
[numthreads(32,32,1)]
我的 Dispatch() 电话总是
Dispatch(ceil(screenWidth/numThreads.x),ceil(screenHeight/numThreads.y),1)
所以首先是
Dispatch(25,19,1)
这以 25-26 fps 的速度运行。然后我减少到以 16 fps 运行的 [numthreads(4,4,1)]。将其增加到 [numthreads(16,16,1)] 开始产生大约 30 fps 的不错结果。玩弄 Y 线程组编号 [numthreads(16,8,1)] 设法将其推到 32 fps。
我的问题是是否有确定线程数的最佳方法,以便我可以最有效地利用 GPU,还是只是好的试错法?