2016-05-06 127 views
0

因此,在OpenCL中编写内核非常简单,只需要少量输入Image3D输出一些输出Image3D并对它们执行一些操作即可。只要所有输入和输出图像都适合GPU内存,就很容易。现在通常情况并非如此,因为随着您的分辨率的提高,Image3D的规模不断扩大。 因此,给定一个内核可以让我们说4个输入图像和3个输出图像,那么在适合GPU的区块中处理它们的最佳选择是什么。是否有自动流式传输/缓冲的形式?如何使用OpenCL处理GPU内存过大的图像

最佳这里是指:1)快速,2)小用户编写的代码(两个)

+0

尝试use_host_ptr并计算1/10大小的块,并在需要时添加仅用于内核的1/10大小的临时设备端缓冲区。 –

回答

1

一个很好的组合你会解决这个问题的3D图像则解决了2D图像相同的方式:使用瓷砖。当你没有足够的RAM用于大图像时,Photoshop做了这个工作;它会从磁盘中引入磁贴,处理它们,然后写出结果。遍历图像。对于3D,您可以使用适合GPU进行处理的3D贴图(小立方体)。

根据要完成的图像处理类型,图块引擎可能很简单也可能很复杂。此外,一些算法(如递归高斯模糊)需要访问所有源像素,因此您可能需要存储中间结果,加载更多的图块,并运行更多的内核以在整个图块集合中工作。