我正在英特尔上用 C++ 开发一些图像处理软件,它必须一遍又一遍地在小(大约 1kpx)图像上运行双三次插值算法。这需要很多时间,我的目标是加快速度。我现在拥有的是一个基于文献的基本实现,一个稍微改进的(关于速度)版本,它不进行矩阵乘法,而是对插值多项式和最后一个固定的部分使用预先计算的公式矩阵乘法代码的点版本(实际上工作得更慢)。我也有一个具有优化实现的外部库,但是对于我的需求来说它仍然太慢了。我接下来考虑的是:
- 在浮点和定点版本上使用 MMX/SSE 流处理进行矢量化
- 使用卷积在傅里叶域中进行插值
- 使用 OpenCL 或类似工具将工作转移到 GPU 上
这些方法中的哪一种可以产生最大的性能提升?你能推荐另一个吗?谢谢。