2010-05-31 190 views
7

我正在尝试使用OpenCL加速一些计算,部分算法由反转矩阵组成。是否有任何开源库或免费代码来计算在OpenCL或CUDA中编写的矩阵或常规反演的lu分解(lapack dgetrf和dgetri)?矩阵是真实的和方形的,但除此之外没有任何其他特殊属性。到目前为止,我已经设法在gpu上找到基本的blas矩阵向量操作实现。OpenCL中的矩阵求逆

该矩阵相当小,只有大约60-100行和列,所以它可以在CPU上更快地计算,但它在算法中间使用,所以我不得不将它转移到主机,计算反过来,然后将结果传回设备,然后将其用于更大的计算。

+0

您还应该注意,反转矩阵可能是一项昂贵的操作,特别是对于大型矩阵,并且通常有其他解决手头问题的方法。 LU分解是一个“构建块”,可以用来避免做一个真正的逆转。 – Tom 2010-06-01 11:53:39

回答

5

我在Open CL中没有实现,但是"Numerical Recipes"和Gil Strang的"Into to Applied Math"都有很好的解释,它们很容易编码。 “NR”有你可以适应的C代码。

计算逆

这是不正确。你没有用LU分解来计算一个逆,你正在分解这个矩阵。如果你想要反过来,你必须用一系列的单位向量做前向替换。这是一个小而重要的区别。

11
+0

这就是我想要的。唯一的问题是LU分解的内核不使用pivoting,所以对于某些输入来说,它们的性能可能相当差并且数值不稳定。 – buchtak 2010-07-14 08:27:53

1

我知道这是有点晚了,但如果你正在尝试做一个矩阵那就是任何矩阵计算小的(60-100行),那么在CPU上而不是在GPU上的计算速度会更快,因为将信息从主存储器复制到GPU的内存需要花费很多时间。如果您想要这样做,那么我会建议您考虑使用OpenMP或MPI等并行语言,因为这样可以让您并行化代码以加速CPU上的计算。