为假发做matlab缓存解决方案

时间:2012-05-22 15:34:42

标签: performance matlab caching eigenvector

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

2 个答案:

答案 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?