1

使用eigs. 在同一个矩阵上,调用
[c, v] = eigs(A, 2, 'sm'); somtimes 需要 30 秒,有时需要 2 秒。
我需要知道eigs在同一矩阵上的后续调用中使用一些缓存是否有加速,因为我需要报告时间......

4

2 回答 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 回答