¿Matlab almacena en caché las soluciones para eigs?

Parece que estoy obteniendo diferentes resultados de rendimiento cuando uso eigs. En la misma matriz, llamando
[c, v] = eigs(A, 2, 'sm'); A veces tarda 30 segundos y otras veces 2 segundos.
Necesito saber si hay una aceleración usando algo de almacenamiento en caché en llamadas posteriores para eigs en la misma matriz ya que necesito informar los tiempos...

preguntado el 22 de mayo de 12 a las 16:05

¿En serio? ¿30 segundos? ¿Qué tan grande es esta matriz? ¿Quizás está ejecutando algo en el proceso que consume mucha CPU? -

2 Respuestas

Si es así, esto no parece ser una característica genérica. Ejecuté esta prueba desde la línea de comando.

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

y obtuve este resultado

El tiempo transcurrido es de 32.373128 segundos.

El tiempo transcurrido es de 28.412905 segundos.

El tiempo transcurrido es de 32.752616 segundos.

El tiempo transcurrido es de 29.024055 segundos.

Estoy sorprendido, porque normalmente MATLAB intenta ser más astuto que usted y almacenará los resultados para su reutilización.

Respondido el 20 de junio de 20 a las 10:06

Esto sería algo malo SI MATLAB intentara eludir llamadas repetidas, simplemente devolviendo lo último que hizo. ¿Qué pasa si su función es un proceso aleatorio? ¿Le gustaría que MATLAB devolviera el mismo resultado? Por ejemplo, ¿las llamadas repetidas a rand deberían devolver el mismo resultado? Por supuesto que no. Pero, de hecho, eigs usa un valor inicial aleatorio, por lo que PODRÍA generar resultados diferentes en el bit menos significativo. O bien, podría devolver el mismo conjunto de vectores propios, pero con un signo diferente. - usuario85109

@woodchips: MATLAB es un lenguaje de secuencias de comandos. El intérprete a menudo puede determinar si una llamada de función repetida devolverá el mismo valor, especialmente con funciones integradas. Puede ser, como usted dice, que MATLAB sepa que eigs usa una llamada a rand y, por lo tanto, debería comenzar desde cero cada vez. - Marc

Lo siento, pero sé con certeza que MATLAB NO hace lo que usted dice, y puedo demostrar que es una afirmación cierta. Nunca ha sido cierto desde la versión 3.2 (desde que soy un gran usuario, aunque tenía una copia de una versión anterior) y todavía no es cierto en la versión más reciente. - usuario85109

@woodchips: Estoy corregido. No puedo encontrar ninguna documentación que diga que el intérprete reutiliza los resultados intermedios. Juro que he visto que la segunda llamada a una función regresa mucho más rápido, pero tal vez eso esté en mi cabeza. - Marc

En algunas circunstancias, una matriz lo suficientemente grande puede empujar cosas a la memoria virtual, o no, dependiendo de si hay disponible un bloque lo suficientemente grande de RAM contigua. O bien, puede estar haciendo algo al margen.

Puede verificar lo que sucede observando un monitor de proceso mientras realiza la prueba. ¿Hay repentinamente grandes cantidades de accesos al disco? Si es así, entonces la memoria virtual está siendo tocada. ¿Hay algún proceso activo diferente, no relacionado, que esté acaparando la CPU?

contestado el 22 de mayo de 12 a las 19:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.