在OpenCL中并行执行许多小矩阵运算

Jon*_*set 2 gpgpu matrix linear-algebra opencl lapack

我有一个问题需要我做许多(~4k)小(~3x3)平方Hermitian矩阵的特征分解和矩阵乘法.特别是,我需要每个工作项来执行一个这样的矩阵的特征分解,然后执行两个矩阵乘法.因此,每个线程必须做的工作相当少,并且完整的工作应该是高度可并行化的.

不幸的是,似乎所有可用的OpenCL LAPACK都用于将大矩阵上的操作委托给GPU,而不是用于在OpenCL内核中进行较小的线性代数操作.由于我不想在OpenCL中为任意大小的矩阵实现矩阵乘法和特征分解,我希望这里有人可能知道这个工作适合的库?

我知道OpenCL可能会在某些时候获得内置矩阵运算,因为矩阵类型是保留的,但现在这并没有多大用处.这里有一个类似的问题,从2011年开始,但它只是说要自己动手,所以我希望从那时起情况有所改善.

dsh*_*let 5

一般来说,我对LAPACK,fftw,cuFFT等图书馆的经验是,当你想要做很多像这样的小问题时,你最好自己编写自己的性能.这些库通常是为了通用性而编写的,因此您可以经常针对特定的小问题打败它们的性能,特别是如果您可以使用特定问题的独特属性.

我意识到你不想听到"滚动你自己",但对于这类问题,做IMO真的是最好的事情.您可能会找到一个库来执行此操作,但考虑到您真正想要的代码(性能)将不会概括,我怀疑它是否存在.您将专门寻找代码来查找3x3矩阵的特征值.这不是一个库,而是一个带有合适许可证的随机代码片段,您可以操作它以利用您的特定问题.

在这种特定情况下,您可以使用特征多项式使用教科书方法找到3x3矩阵的特征值.请记住,对于三次方程,存在一个相对简单的闭合形式解:http://en.wikipedia.org/wiki/Cubic_function#General_formula_for_roots.

虽然我认为这种方法很可能比迭代方法快得多,但验证性能是否是一个问题是明智的.