我正在寻找编写需要通常的并行原语(例如scan()
,reduce()
,map()
和sort()
)以及高效的信号处理代码用于FFT和密集向量/矩阵运算的例程,以支持像principal component analysis这样的东西,其中包括寻找特征向量和放大器。特征值。大量的矩阵求逆和乘法。主机代码为C ++ 11。
我想使用OpenCL来保持平台无关,但是几天的实验并没有让我对这些工具的成熟度充满信心。我在编程模型和基元方面喜欢Boost.Compute,但我不确定像clMAGMA和FFT库FFTcl这样的LAPACK库在数据类型方面是否能很好地发挥作用,共享上下文和异步操作。我也看到clMAGMA的最新更新是在两年前。
ViennaCL涵盖了FFT和一些矩阵运算,但对LAPACK没有帮助。 VEXcl仅适用于稀疏矢量/矩阵。
使用CUDA安装Nvidia的开发工具并没有这些看起来很棘手。所有最新的库都在那里,还有像NPP这样的东西来涵盖我可能需要的其他东西。我没有发现库之间存在不兼容的风险。
我很好奇是否有其他人使用OpenCL走这条路。我想这样做,但我觉得它比使用CUDA更高的风险,因为CUDA似乎提供了更少的机会遇到无法预料的障碍。