如何使用OpenCL处理GPU内存中总大小过大的图像

How to deal with images that are too large in total for the GPU memory using OpenCL

本文关键字:图像 OpenCL 何使用 处理 GPU 内存      更新时间:2023-10-16

因此,在OpenCL中编写一个内核非常容易,它可以获取一些输入Image3D和输出Image3D,并对它们进行一些处理。只要所有的输入和输出图像都适合GPU内存,这就很容易。当然,通常情况并非如此,因为随着分辨率的提高,Image3D的大小增长得相当快。因此,假设内核需要4个输入图像和3个输出图像,那么在适合GPU的块中处理它们的最佳选项是什么。是否有一种形式的自动流/缓冲?

这里最好的意思是:1)速度快,2)用户编写的代码少(两者的良好组合)

您可以像解决2D图像一样解决3D图像的问题:使用瓦片。Photoshop在你没有足够的RAM来处理大图像时就这么做了;它会从磁盘中引入瓦片,对其进行处理,然后写出结果。在图像上迭代。对于3D,您可以使用适合GPU进行处理的3D瓦片(小立方体)。

Tile引擎可以是简单的,也可以是复杂的,这取决于要进行的图像处理的类型。此外,一些算法(如递归高斯模糊)需要访问所有源像素,因此您可能需要存储中间结果,加载更多的瓦片,并运行更多的内核来处理瓦片集。