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

作为一个更大问题的一部分,我需要解决小型线性系统(即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操作的矩阵求解代码,请查看我的懒惰写入

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

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

或者甚至更好地使用像Gram-Schmidt过程中的Householderreflection进行QR分解。

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