使用C解决矩阵(在CUDA内)

时间:2011-04-13 16:03:04

标签: c matrix cuda solver

作为一个更大问题的一部分,我需要解决小型线性系统(即NxN,其中N~10),因此使用相关的cuda库在速度方面没有任何意义。

不幸的是,还有一些不清楚的问题是如何在不拉动像GSL,EIGEN等大枪的情况下解决这些系统。

任何人都能指出我在直线C中的密集矩阵求解器(Ax = B)的方向吗?

对于那些感兴趣的人,这部分代码的生成器的基本结构是:

ndarray=some.generator(N,N)
for v in range N:
    B[v]=_F(v)*constant
    for x in range N:
        A[v,x]=-_F(v)*ndarray[x,v]

不幸的是,我对高等数学知之甚少,所以任何建议都会受到赞赏。

更新:我一直在努力解决这个问题,并且有一个近乎解决方案可以运行但不起作用。任何潜伏的人都欢迎查看我到目前为止pastebin上的内容。

我正在使用Crout Decomposition with Pivoting,这似乎是最常用的方法。这个测试的想法是每个线程都做同样的工作。无聊我知道,但计划是增加matrixcount变量,放入实际数据,每个线程单独解决小矩阵。

感谢所有正在检查此事的人。

POST-ANSWER UPDATE:完成了CPU和GPU操作的矩阵求解代码,查看我的懒惰写入here

1 个答案:

答案 0 :(得分:0)

CUDA在这里没有帮助,这是真的。像这样的矩阵对它来说太小了。

你要解决的线性方程组是LU分解:

甚至更好的是使用Householder反射进行QR分解,就像Gram-Schmidt过程一样。

之后解决线性方程变得容易,但我担心总会涉及一些“高等数学”(线性代数)。那,并且有许多(很多!)C库用于求解线性方程。对我来说似乎不是“大枪”。