我有一个问题,这可能是一个梦想,但我想知道我的任何Stack Overflow'ers是否可以帮助我。
在我工作的公司中,我们每个月都会进行数十亿次的图像处理。基本上,我们拍摄一张海量图像,将其切成256像素的正方形图像,对其进行颜色量化并将其保存为pngs - 然后移动到下一个庞大的图像上。我们采用了许多技术尽可能快地完成这项工作,目前它的速度非常快,但我认为我们有可能在速度方面取得优异成绩。
应用程序本身是.Net 2.0,循环遍历大图像中的各个字节,读取每个较小图像的字节,并在运行量化算法后使用GDI保存图像。我们有几十台运行此应用程序的机器,它们都有Nvidia Geforce 8视频卡(或更好)。
有没有办法可以使用GPU而不是CPU来执行上述任何或所有任务?如果是这样,我该怎么做?不幸的是我以前从来没有编过这样的事情,所以如果有人可以帮助我,我可能需要它解释得非常彻底(而且很慢)。
答案 0 :(得分:2)
定义大量? (换句话说,大规模是相对的。)
可以使用CUDA - NVIDIA GPU's -
http://developer.download.nvidia.com/compute/cuda/sdk/website/projects/dxtc/doc/cuda_dxtc.pdf
答案 1 :(得分:1)
要研究的一些技术:
Windows Imaging Components。这并不是你所追求的,因为我不认为它使用GPU(虽然我可能会很好),但它应该比GDI +快得多。
Direct2D。这确实将GPU用于许多绘图操作,并与Windows Imaging Components完美集成。但是根据你的描述,不清楚GPU优化的绘图操作是否完全符合你的需要。
除此之外,您还可以尝试使用像素着色器进行图像处理。这是一个我没有深入研究过的领域,所以我会留待其他人发表评论。
换句话说,Windows Imaging Components应该显着减少PNG加载/保存瓶颈。它提供的操作可能还有助于以比GDI +更优化的方式对图像进行切片。 Direct2D和/或像素着色器应该有助于像素级操作。只有在没有更直接的方法对图像进行颜色量化操作时才应该使用像素着色器。