我编写的一些迭代矩阵算法(CG、GMRES 等)表现得相当有趣。他们收敛到正确的答案,但运行时间异常长。我正在找出原因。
我认为的第一步是找出方法的算法复杂性。例如,我需要知道 CG 是否确实像预期的那样采用并且类似。
如何找出这些方法的确切算法复杂度?(我正在寻找某种方法来获得算法的确切界限,例如)。
甚至在此之前,这是提高性能的有效第一步吗?
到目前为止,我专注于单核性能(这本身就很糟糕)。
我也在考虑尝试确定内存访问。是否有任何免费软件(不一定是开源)可以让我在一个漂亮的 GUI 中这样做?我使用 VTune 进行并行,但它对串行没有用。
我试过谷歌搜索,但所有算法问题最终都出现在计算的搜索/排序部分,这与迭代矩阵算法完全不同。
我已经尝试解决从 1 到 1000 的矩阵大小的算法,绘制该大小所花费的平均时间图并曲线拟合它(二次)。但我似乎没有通过这个。
编辑:为了清楚起见,我想验证算法在实践中的复杂性是否与理论预测的相同。我想验证我的算法 Matrix-Vector 确实是。
此外,我不介意了解每次迭代的复杂性。