javacl-管理超大图像处理

jutyujz0  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(368)

我正在从事一个工业项目,处理大图像处理(每幅图像50mo),关键是性能。
我选择在javacl的帮助下将图像处理委托给gpu。我编写了一些测试来确定方法是否正确。结果很清楚!
超过100次图像着色gpu获胜:gpu=172ms vs.cpu=438ms
就目前而言,gpu显然比cpu更强大,但是!有一个问题,一个记忆的问题。事实上,我的显卡有256mo的vram,不能分配大于8mo的图像!
所以,我的问题是,处理大于8毫米的图像最好的方法是什么?
平铺图像并处理每个平铺?由于ram和vram之间的延迟,将成为性能杀手
提取原始像素作为float4向量并将其发送到gpu?
换我的显卡?
放弃这个项目?
多喝点咖啡?
提前感谢所有人:-)

nszi6y05

nszi6y051#

如果你对语言的选择持开放态度,那么我推荐你cuvi(http://cuvilib.com). 它提供现成的易于使用的成像功能。很多颜色运算,滤镜,边缘检测器,算术运算等等。它是用c语言编写的,具有非常简洁的c++模块化接口。
是的,你也可以分配大图像!
我可以帮助您(或任何其他感兴趣的人)开始使用cuvi。在线维基(http://wiki.cuvilib.com)是一个开始的好地方。
披露:我是开发cuvi团队的一员。此外,cuvi是一个商业软件

xzabzqsa

xzabzqsa2#

我不熟悉javacl绑定,但是在opencl中,有图像,然后有缓冲区。
您可以分配尽可能大的缓冲区,但是使用clcreateimage2d创建的cl\u mem的大小有限制(cl\u device\u image2d\u max\u width和cl\u device\u image2d\u max\u height)。与原始缓冲区相比,图像有一些优势,比如提供硬件加速采样。如果您不需要采样或者可以在内核中实现自己的采样,那么可以使用缓冲区。否则,您将不得不平铺您的输入图像并解决平铺处理将引入的任何过滤瑕疵。
希望这有帮助!

相关问题