使用eigs
时,我似乎得到了不同的效果结果。在同一个矩阵上,调用
[c, v] = eigs(A, 2, 'sm');
somtimes需要30秒,有时需要2秒。
我需要知道在同一矩阵的后续eigs
调用中是否有使用缓存的加速,因为我需要报告时间......
答案 0 :(得分:1)
如果是这样,这似乎不是一般功能。我从命令行运行了这个测试
A = randn(10000);
B = randn(10000);
C = B;
tic; [c1,v1] = eigs(A,2,'sm'); toc;
tic; [c2,v2] = eigs(A,2,'sm'); toc;
tic; [c3,v3] = eigs(B,2,'sm'); toc;
tic; [c4,v4] = eigs(C,2,'sm'); toc
并得到了这个结果
经过的时间是32.373128秒。
经过的时间是28.412905秒。
经过的时间是32.752616秒。
经过的时间是29.024055秒。
我很惊讶,因为通常MATLAB会试图超越你并存储结果以供重复使用。
答案 1 :(得分:0)
在某些情况下,足够大的矩阵可能会将内容推送到虚拟内存中,具体取决于是否有足够大的连续RAM块可用。或者,你可能正在做一些事情。
您可以在进行测试时通过观察过程监视器来验证发生的情况。突然有大量的磁盘访问吗?如果是这样,则触摸虚拟内存。是否存在一个不同的,不相关的进程,它会占用CPU?