我有一个图像处理程序,我认为可以很快地实现并行化。每个像素需要大约2k次操作,这些操作不依赖于相邻像素的操作,因此将工作分割成不同的单元相当简单。
我的问题是,最好的方法是什么,这样我就可以获得最快的速度提升效果?
理想情况下,我正在寻找的库/方法应满足以下标准:
- 在未来5年仍然存在。类似CUDA或ATI的变体可能会被不太依赖硬件的解决方案所取代,因此我希望选择更加稳定的方案。如果我的CUDA印象是错误的,我欢迎纠正。
- 实现速度要快。我已经编写了这段代码并且它可以串行运行,但非常缓慢。理想情况下,我只需重新编译我的代码以实现并行化,但我认为这可能是一种幻想。如果我使用不同的范例(例如着色器)重写它,那也可以。
- 不需要太多硬件知识。我希望能够不必指定线程数或操作单元,而是根据使用的机器自动计算出所有这些内容。
- 可在廉价硬件上运行。这可能意味着需要150美元的显卡或其他设备。
- 可在Windows上运行。类似GCD的东西可能是正确的选择,但我所针对的客户群体不会很快转向Mac或Linux。请注意,这使得问题的回答与this other question有所不同。
我应该关注哪些库/方法/语言?我已经看过OpenMP、CUDA、GCD等等,但我想知道是否还有其他的东西我错过了。
我现在倾向于像着色器和opengl 2.0这样的东西,但可能不是正确的选择,因为我不确定我能以这种方式获得多少内存访问--这些2k操作需要以很多方式访问所有相邻的像素。