Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing GPU上的线程_Image Processing_Directx_Gpgpu_Directcompute - Fatal编程技术网

Image processing GPU上的线程

Image processing GPU上的线程,image-processing,directx,gpgpu,directcompute,Image Processing,Directx,Gpgpu,Directcompute,我使用DirectCompute在GPU上进行通用计算。目前,我正在尝试操作分辨率为1920x1080的纹理。我有一个Dispatch(2,1080,1)和numthreads(960,1,1),根据我的计算,它精确地覆盖了每像素一个线程的图像 现在,据我所知,所有线程应该同时运行,对吗?然而,在我的代码中,如果像素是黑色的,我不做任何计算。所以我注意到,当我的大部分图像都是黑色时,性能会明显提高。但是,如果一个对象阻塞了屏幕,则性能会急剧下降 我的问题是:如果所有线程都并行运行,处理帧的速度将

我使用DirectCompute在GPU上进行通用计算。目前,我正在尝试操作分辨率为1920x1080的纹理。我有一个Dispatch(2,1080,1)和numthreads(960,1,1),根据我的计算,它精确地覆盖了每像素一个线程的图像

现在,据我所知,所有线程应该同时运行,对吗?然而,在我的代码中,如果像素是黑色的,我不做任何计算。所以我注意到,当我的大部分图像都是黑色时,性能会明显提高。但是,如果一个对象阻塞了屏幕,则性能会急剧下降

我的问题是:如果所有线程都并行运行,处理帧的速度将由性能最差的线程决定,基本上黑色像素上运行的线程将处于空闲状态,对吗?那么,当处理更多像素时,为什么我会看到速度变慢呢?他们应该同时这样做。还是我完全搞错了


任何帮助都将不胜感激。

如果您有一个非常繁重的算法,并且正在使用图像进行backbuffer渲染,则可能会造成暂停。强制backbuffer等待映像。尝试在下一帧渲染它。所以你是“幕后黑手”


您的算法看起来怎么样?

并非所有线程都同时执行。确切的数字可能有点变化,但几年前,高端CPU一次能够保持16k线程运行,但“只有”几百个线程实际上是并发执行的。(然后再进一步细分为更小的子组,这样子组中的每个线程都以精确的锁步、逐指令、逐分支运行)其余线程被挂起,等待I/O或以其他方式被阻塞

因此,如果你有一个算法需要200万次执行,那么在任何时候,只有一小部分算法会以线程的形式存在,而在这些算法中,只有一小部分算法会在一个批中执行。在当前正在执行的线程中,有些线程被强制以精确的锁定步骤运行(因此没有任何线程提前退出,整个组必须遵循相同的路径),但是不同的组可以在不同的时间终止


是的,GPU上的线程处理很复杂。

我想这解释了我一直在想的很多问题。谢谢你的回答。我将不得不对互联网上的GPU线程做更多的研究。我在做双缓冲,所以我总是显示一个图像,同时进行下一个图像的计算。然而,我认为问题在于我的算法太慢。但贾尔夫的话非常有启发性。我的算法?我正在探索实时光线跟踪领域,刚刚编写了一个蛮力算法来测试我的GPU的功能。显然,将需要大量的选择。