我正在使用 DirectCompute 在 GPU 上进行一般计算。目前,我正在尝试对分辨率为 1920x1080 的纹理进行操作。我有一个 Dispatch(2, 1080, 1) 和 numthreads(960, 1, 1) 根据我的计算,它们准确地覆盖了我的图像,每个像素一个线程。
现在,据我了解,所有线程都应该同时运行,对吧?但是,在我的代码中,如果像素为黑色,我不会进行任何计算。因此,当我的大部分图像为黑色时,我注意到性能明显提高。但是,如果一个物体挡住了屏幕,性能就会急剧下降。
我的问题是:如果所有线程都并行运行,处理一帧的速度将由性能最差的线程决定,本质上运行在黑色像素上的线程将处于空闲状态,对吧?那么,为什么在处理更多像素时我会看到速度变慢?他们应该同时这样做。还是我把这一切都搞错了?
任何帮助,将不胜感激。