una tesis teorico sistema proyecto marco implementacion hipotesis escolar control bibliotecario biblioteca linux ubuntu fortran openmp fortran90

linux - teorico - tesis implementacion de una biblioteca virtual



Puestos de programa durante carreras largas (3)

Fijo:

Bueno, esto parece un poco tonto. Resulta que la parte superior no se mostraba correctamente y los programas continúan ejecutándose. Tal vez el tiempo de CPU se hizo demasiado grande para mostrar? De cualquier manera, el programa parece estar funcionando bien y toda esta pregunta era discutible.

Gracias (y perdón por la pregunta tonta).

Q original

Estoy ejecutando una simulación en una computadora con el servidor de Ubuntu 10.04.3. Las tiradas cortas (<24 horas) funcionan bien, pero las carreras largas finalmente se detienen. Por pérdida, me refiero a que el programa ya no tiene ningún tiempo de CPU, pero aún contiene toda la información en la memoria. Para ejecutar estas simulaciones, I SSH y desconecte el programa y canalice cualquier salida a un archivo.

Información Variada:

El sistema definitivamente no se está quedando sin RAM. El programa no necesita leer o escribir en el disco duro hasta que se complete; el cálculo se hace completamente en la memoria. El programa no se destruye, ya que todavía tiene un PID después de que se detiene. Estoy usando openmp, pero he aumentado la cantidad máxima de procesos y el tiempo máximo es ilimitado. Estoy encontrando los valores propios más grandes de una matriz usando la biblioteca ARPACK fortran.

¿Alguna idea sobre qué está causando este comportamiento o cómo reanudar mi programa actualmente estancado?

Gracias


Supongo que este es un programa OpenMP de tus etiquetas, aunque en realidad nunca dices esto. ¿ARPACK es seguro?

Parece que estás llegando a un punto muerto (más común en los programas MPI que OpenMP, pero definitivamente es posible). Lo primero que debe hacer es compilar indicadores de depuración, y la próxima vez que encuentre este problema, conéctelo con un depurador y descubra qué están haciendo los distintos subprocesos. Para gdb, por ejemplo, algunas instrucciones para cambiar entre hilos se muestran aquí .


La próxima vez que su programa "se detenga", adjunte GDB a él y thread apply all where .

  • Si todos sus hilos están bloqueados esperando algún mutex, tiene un punto muerto.
  • Si están esperando algo más (por ejemplo, leer), entonces necesita averiguar qué impide que se complete la operación.

Por lo general, en UNIX no necesita reconstruir con indicadores de depuración para obtener un seguimiento de pila significativo. No obtendrá números de archivo / línea, pero puede que no sean necesarios para diagnosticar el problema.


Una posible forma de entender qué está haciendo un programa en ejecución (es decir, un proceso) es adjuntarle un depurador con el gdb program *pid* (que funciona bien solo cuando el programa ha sido compilado con la depuración habilitada con -g ), o para usar strace en él, usando strace -p *pid* . strace comando strace es una utilidad (técnicamente, un depurador especializado construido sobre la interfaz de llamada del sistema ptrace ) que le muestra todas las llamadas al sistema realizadas por un programa o un proceso.

También hay una variante, llamada ltrace que intercepta la llamada a funciones en bibliotecas dinámicas.

Para tener una idea, prueba, por ejemplo, strace ls

Por supuesto, strace no te ayudará mucho si el programa en ejecución no está haciendo ninguna llamada al sistema.

Saludos. Basile Starynkevitch