使用eigs
. 在同一个矩阵上,调用
[c, v] = eigs(A, 2, 'sm');
somtimes 需要 30 秒,有时需要 2 秒。
我需要知道eigs
在同一矩阵上的后续调用中使用一些缓存是否有加速,因为我需要报告时间......
问问题
204 次
2 回答
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 会试图比你聪明,并且会存储结果以供重复使用。
于 2012-05-22T16:56:40.360 回答
0
在某些情况下,足够大的矩阵可能会将事物推入虚拟内存,也可能不会,这取决于是否有足够大的连续 RAM 块可用。或者,您可能正在做一些事情。
您可以在进行测试时通过观察过程监视器来验证正在发生的事情。是否突然有大量磁盘访问?如果是这样,那么虚拟内存正在被触及。是否有一个不同的、不相关的进程正在占用 CPU?
于 2012-05-22T18:01:50.397 回答