【发布时间】:2013-11-02 19:34:47
【问题描述】:
我最近一直在玩计算机着色器,我正在尝试确定设置 [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,还是只是好的尝试和错误?
【问题讨论】:
标签: directx direct3d directx-11 compute-shader directcompute