我有一个包含6个方程的系统需要在程序中反复求解(当然有许多不同的输入)。我目前使用的是克莱姆法则方法来解决这个系统,效果还不错(尽管明确的方程式长度超过2页,但处理器似乎非常喜欢加法和乘法运算,它可以在1微秒内得出答案)。然而,我需要求解的次数非常多,因此我正在寻找更快的方法。
问题是,是否存在更快或更有效的方法来解决这些方程,或者像CUDA这样的东西对此有益呢?
问题是,是否存在更快或更有效的方法来解决这些方程,或者像CUDA这样的东西对此有益呢?
Cramer's rule不具备良好的可扩展性。对于只有两个或三个未知数的小型方程组,它还可以使用,但是如果方程组变得更大,则其他方法更有效率,例如:LU分解+前向替换+后向替换。
如果您想要运行CUDA,就需要一张不错的Nvidia显卡。
如果您拥有Intel的CPU,我建议您使用Intel的MKL http://software.intel.com/en-us/intel-mkl/,这是专为Intel CPU进行优化的。
如果您使用CUDA,可能会遇到浮点或双精度问题。
此外,如果您对GPU编程不熟悉,您将需要更多时间来解决CUDA的问题。
使用SSE2或更高版本,您至少可以获得两倍的速度提升。但与CUDA或OpenCL端口相比,这只是微不足道的。如果正确实现,CUDA或OpenCL端口可以获得一到两个数量级的加速。
如果您了解Python,PyCUDA可能是一个很好的入门点。
除非你能够以非顺序的方式解决方程,否则CUDA是无法帮助你的。事实上,CUDA可能会更慢。任何不是极度并行的东西都不会从CUDA中获益。通过编译器开关启用SSE2是不够的。你需要一个编码为使用SSE2的库。在我看来,最好的线性代数库是Eigen。它非常容易使用,并支持SIMD(不仅仅是SSE2)。