如何使用 OpenCL 处理对于 GPU 内存来说总量太大的图像
How to deal with images that are too large in total for the GPU memory using OpenCL
因此,在 OpenCL 中编写一个内核非常容易,该内核采用一些输入 Image3D 和一些输出 Image3D,并使用它们进行一些工作。只要所有输入和输出图像都适合 GPU 内存,这很容易。现在当然通常不是这种情况,因为随着分辨率的增加,Image3D 的大小会迅速增长。
因此,给定一个内核,可以说是 4 个输入图像和 3 个输出图像,在适合 GPU 的块中处理它们的最佳选择是什么。有没有自动的形式streaming/buffering?
这里最好的意思是:1) 快速,2) 用户编写的代码很少(两者的完美结合)
解决 3D 图像的方法与解决 2D 图像的方法相同:使用图块。当您没有足够的 RAM 来存储大图像时,Photoshop 就会这样做;它会从磁盘中取出图块,对其进行处理,然后将结果写出。遍历图像。对于 3D,您将使用适合 GPU 处理的 3D 瓦片(小立方体)。
图块引擎可以简单也可以复杂,具体取决于要完成的图像处理类型。此外,某些算法(如递归高斯模糊)需要访问所有源像素,因此您可能需要存储中间结果、加载更多图块和 运行 更多内核才能在图块集中按您的方式工作。
因此,在 OpenCL 中编写一个内核非常容易,该内核采用一些输入 Image3D 和一些输出 Image3D,并使用它们进行一些工作。只要所有输入和输出图像都适合 GPU 内存,这很容易。现在当然通常不是这种情况,因为随着分辨率的增加,Image3D 的大小会迅速增长。 因此,给定一个内核,可以说是 4 个输入图像和 3 个输出图像,在适合 GPU 的块中处理它们的最佳选择是什么。有没有自动的形式streaming/buffering?
这里最好的意思是:1) 快速,2) 用户编写的代码很少(两者的完美结合)
解决 3D 图像的方法与解决 2D 图像的方法相同:使用图块。当您没有足够的 RAM 来存储大图像时,Photoshop 就会这样做;它会从磁盘中取出图块,对其进行处理,然后将结果写出。遍历图像。对于 3D,您将使用适合 GPU 处理的 3D 瓦片(小立方体)。
图块引擎可以简单也可以复杂,具体取决于要完成的图像处理类型。此外,某些算法(如递归高斯模糊)需要访问所有源像素,因此您可能需要存储中间结果、加载更多图块和 运行 更多内核才能在图块集中按您的方式工作。