我知道这不是一个明确的答案,但它可以给出一个如何使用 CUDA 的想法。在这个阶段很难给出建议,因为为此需要详细了解实际代码
正如评论中已经写的那样,一般来说,最好不要反转矩阵,而是求解线性系统(有关为什么请参阅此问题的详细信息)。
有可能 CUDA 可以帮助你,但在你之前应该考虑一些方面。一般来说,CUDA 应用程序的真正瓶颈是内存传输,有时重新计算比移动它们更好,您必须考虑可用内存,在其他情况下,内存传输使用更多时间尊重 cpu 的使用。另一个需要关注的点是您希望并行化的流中存在if条件,在这种情况下,流被停止,两个不同的分支按顺序执行,性能大大降低。我需要什么精度?这对于硬件的选择很重要,并且还取决于您使用的算法。
考虑到这一点,您可以开始研究算法的哪些部分从并行化中获得了最大优势。例如,更好地为每个 CUDA 内核分配一个线性系统还是更好地并行化某些任务?也许一个想法,而不是真正尊重您的代码,是并行化线性系统的解决方案(=反转矩阵)。另一个,如果您使用 feval,则尝试在 matlab 中使用并行 feval。其他可能性可以考虑牛顿方法的变体来获得加速,这不仅与 GPU 的使用有关。
一些链接:
- 用于 cuda 中求解器的CUDA 库。
- pdf与 CUDA 中针对 Netwon 方法的特定案例的示例
- 带有 CUDA 的牛顿方法变体的文章 pdf 。Philip-Daniel Beck, Marco Nehmeier在 CUDA 上的平行区间牛顿法