我有一个问题,这可能是一个白日梦,但我想知道是否有我的同胞堆栈Overflow'ers的能帮助我。
在我工作的公司,我们做了数十亿的图像操作的每个月。 基本上,我们采取了大规模的图像,切片成256个像素的正方形图像,色彩量化它们,并将它们保存为PNG格式 - 和移动到下一个庞大的图像。 我们聘请了一批技术,以尽可能快地做到这一点,它是目前非常快,但我觉得这是一个机会,我们可以使它在速度恒星。
应用程序本身是NET 2.0,通过大的图像中的各个字节循环,读取对每个更小的图像的字节数,并使用GDI保存图像已经通过量化算法运行之后。 我们有很多其运行该应用程序的机器,和所有的人所拥有的NVIDIA的GeForce 8显卡(或更好)。
是否有我可以使用GPU而不是CPU的执行任何或所有的上述任务的方法吗? 如果是这样,我怎么做呢? 不幸的是我以前从来没有这样如果有人能帮助我,我可能需要解释的很彻底地(和慢)编码这样的事。
一些技术来考虑:
Windows图像处理组件 。 这不正是你之后,因为我不认为它使用了GPU(虽然我可能是黄),但它应该比GDI +显著更快的是什么。
Direct2D的 。 这是在利用GPU许多绘图操作,并与Windows成像组件集成。 但是从你的描述,目前还不清楚由GPU优化的绘图操作是否适合你所需要的东西。
在这些的顶部,你可以尝试使用像素着色器的图像处理。 这是我没有深入研究,所以我会离开它给别人发表意见的区域。
换一种方式,Windows成像组件应减少PNG加载/保存显著瓶颈。 它提供了操作可能也有助于切片图像起来比GDI +一个更优化的方式。 Direct2D和/或像素着色器应该有助于像素级别的操作。 如果有做你需要对图像颜色量化操作没有更直接的方式应该只需要在像素着色器。
定义大量的? (换言之,块状是相对的。)
这是可能的使用CUDA - NVIDIA GPU的 -
http://developer.download.nvidia.com/compute/cuda/sdk/website/projects/dxtc/doc/cuda_dxtc.pdf