JavaCL - 管理非常大的图像处理

Lam*_*ash 6 java image-processing

我正在从事一个处理大型图像处理的工业项目(每个图像50Mo),关键是性能.

我选择在JavaCL的帮助下将图像处理委托给GPU .我写了一些测试,以确定方法是否正确.结果很清楚!

超过100次图像着色GPU获胜: GPU = 172ms vs. CPU = 438ms

目前,很明显GPU对于这种计算来说比CPU更强大但是!有一个问题,一个记忆问题.事实上,我的显卡有256Mo的VRam,无法分配大于8Mo的图像!

所以,我的问题是,处理大于8Mo的图像的最佳方法是什么?

  1. 平铺图像并处理每个图块?由于RAM和VRAM之间的延迟,将成为性能杀手
  2. 将原始像素提取为float4向量并将其发送到GPU?
  3. 换我的显卡?
  4. 投掷项目?
  5. 多喝咖啡?

感谢所有提前:-)

Ani*_*Ani 2

我不熟悉 JavaCL 绑定 - 但在 OpenCL 中,有图像,然后有缓冲区。

您可以分配尽可能大的缓冲区,但使用clCreateImage2D创建的 cl_mem 的大小有限制(CL_DEVICE_IMAGE2D_MAX_WIDTH 和 CL_DEVICE_IMAGE2D_MAX_HEIGHT)。与原始缓冲区相比,图像具有一些优势,例如提供硬件加速采样。如果您不需要采样或者可以在内核内部实现您自己的采样 - 那么可以使用缓冲区。否则,您将必须平铺输入图像并解决平铺处理将引入的任何过滤伪像。

希望这可以帮助!