有人能为我提供一个用于计算稀疏Cholesky分解的并行算法吗?它必须适合在GPU上执行。我们非常感谢CUDA,OpenCL甚至伪代码中的任何答案。
答案 0 :(得分:9)
一般来说,直接稀疏方法不适合GPU。虽然最好的直接求解器(考虑像CHOLMOD,SuperLU,MUMPS这样的包)使用策略来生成可以使用L3 BLAS处理的密集子块,但块的大小和形状不会因使用GPU BLAS而受益加速。这并不意味着它无法完成,只是性能改进可能不值得努力。
当你在询问稀疏的Cholesky分解时,我假设矩阵是对称的正定。在这种情况下,您可以考虑使用迭代求解器 - 有许多良好的Conjugate Gradient和其他Krylov子空间方法的实现,这些方法可以使用简单的预处理器。如果您的问题适合迭代方法,那么CUDA的Cusp库可能值得研究。如果您正在寻找OpenCL,ViennaCL库提供类似的东西。
答案 1 :(得分:4)
多正面算法似乎是并行稀疏因子分解的流行选择。查看MUMPS
包here。
据我了解,代码广泛使用3级BLAS
调用(DGEMM
等)来实现高性能。我会调查是否可以链接到基于GPU
的{{1}}实施,例如BLAS
等,如果您热衷于使用CUDA BLAS
而非{{{} 1}}。
与密集因子分解相反,除了浮点工作之外,稀疏方法总是包括不可忽略的整数工作量(尽管浮点仍占主导地位)。我不是GPU
的专家,但是FPU
是否比GPU's
更适合整数工作?这可能是反对为CPU
...
希望这有帮助。
答案 2 :(得分:2)
查看这些文章,礼貌的ACM(SC'08和PPoPP '09是优秀的会议)。
诉Volkov,J。W. Demmel。对GPU进行基准测试以调整密集线性代数。 SC'08。
-G。 Quintana-Orti,F。D. Igual,E。S. Quintana-Orti,R。A. van de Geijn。在具有多个硬件加速器的平台上解决密集线性系统。 PPoPP '09。
如果您无法通过ACM门户/ DL访问这些内容,他们可能会在某处联机。否则......我可以引用一些最相关的部分,引用,并使其合理使用。
编辑:
可能会检查出来吗?
EDIT2:错过了关于“稀疏”的部分。
在网上和ACM / IEEE上看,我没有看到很多东西突然出现在我面前。我所看到的看起来并不乐观......这可能不是一个计算,你会看到使用GPU带来很多好处。
答案 3 :(得分:1)
GPU上的稀疏Cholesky因子分解是一个悬而未决的问题。即使前面提到的Linear Programming paper使用密集算法,而大多数问题都很稀疏。商业LP解决方案市场非常具有竞争力,但没有人拥有可以充分利用GPU的产品。
答案 4 :(得分:0)
请参阅UHM - 未组合的超级矩阵求解器。它可以在一台主机上使用多个GPU计算稀疏Cholesky分解。