programa fortran falha instantaneamente com falha de segmentação

0

Eu tenho um programa de fortran que eu mesmo compilei e rodei o executável centenas de vezes (sem recompilar nem nada), mas agora, quando eu o executo, ele falha instantaneamente com falha de segmentação. Existem três outras instâncias do programa em execução no momento. top apresenta o seguinte:

top - 15:37:06 up 5 days,  1:06,  2 users,  load average: 3,00, 3,01, 3,06
Tasks: 290 total,   4 running, 285 sleeping,   0 stopped,   1 zombie
%Cpu(s): 24,4 us,  0,0 sy,  0,0 ni, 75,5 id,  0,1 wa,  0,0 hi,  0,0 si,  0,0 st
KiB Mem :  8058952 total,  2409096 free,  2964692 used,  2685164 buff/cache
KiB Swap:  8263676 total,  8263676 free,        0 used.  4614096 avail Mem 

PID USER   PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                                      
1230 user  20   0 12,329g 675720   3080 R 100,0  8,4  14:17.45 tetramer                                                                    
1236 user  20   0 12,329g 675688   3052 R 100,0  8,4  13:58.96 tetramer                                                                    
1234 user  20   0 12,329g 675800   3168 R 100,0  8,4  14:02.23 tetramer                                                                                                                                                     

Ele usa muita memória (pelo menos memória virtual), mas até agora costumava ser possível executar várias instâncias ao mesmo tempo, desde que o uso real da memória fosse baixo o suficiente. O código fortran em questão segue, ele falha antes de chegar ao write .

   IMPLICIT REAL*8(A-H,O-Z)
c
  PARAMETER ( np = 220 )
c
  PARAMETER ( ndim = 25000)
  PARAMETER ( ndim2 = ndim*(ndim+1)/2 )
C
  DIMENSION  array(np,6,6),array2(np)
c
  DIMENSION  vector(50), vector2(50)
  DIMENSION  v1(159,30001),v2(159,30001),v3(159,30001)
C
  COMMON /PARM/com1(99000) ,com2(0:8,0:8,99000)
 1        ,com3(0:8),com4(0:8,0:8,0:8),nmax,mmax
 1        ,com5(0:8,0:8)
C
  COMMON /SET/ AX(0:4,-4:4,50),AY(0:4,-4:4,50),AZ(0:4,-4:4,50)
 1          ,DD(0:4,-4:4,50), dd2(0:4,-4:4), nmax0(0:4,-4:4)
C
  DIMENSION  AH( ndim2 ),AF( ndim2 ),AF2(ndim2)
  DIMENSION  E( ndim ),VEC( ndim,ndim)
  DIMENSION   AH2(ndim,ndim),TEMP(ndim,ndim)
  dimension nbarray(6)
C
  CHARACTER*1   PARI
C
  write(6,*) ' ######   ##### '

Eu realmente não tenho ideia de porque estou recebendo uma falha de segmentação de repente. Tanto quanto eu posso dizer, eu não estou nem acessando nenhuma memória no programa ainda (apenas alocando), então como posso obter uma falha de segmentação?

Além disso, ao direcionar a saída do programa para um perlskript, recebi um SIGPIPE por algum motivo, embora tenha sido o programa do fortran que caiu, não o perlskript.

Alguém tem alguma ideia do que pode estar acontecendo aqui e como posso corrigi-lo?

Estou executando o Ubuntu 16.04, se isso for relevante.

Editar: as saídas solicitadas são:

~$ ldd ./tetramer 
    not a dynamic executable

~$ strace ./tetramer 
    execve("./tetramer", ["./tetramer"], [/* 32 vars */]) = -1 ENOMEM (Cannot allocate memory)
    --- SIGSEGV {si_signo=SIGSEGV, si_code=SI_KERNEL, si_addr=0} ---
    +++ killed by SIGSEGV +++
    Segmentation fault (core dumped)

Eu também fiz alguns testes e é sempre a quarta instância do programa que falha com a falha de segmentação. Recentemente, eu fiz uma reinstalação (limpei alguns ubuntu mais antigos e instalei o 16.04), e pode ser que sob 16.04 eu só pudesse rodar três de cada vez e não percebesse. As vezes em que tenho absoluta certeza de que havia mais de três instâncias em que tudo antes da reinstalação.

Eu acho que pode ter a ver com o fato de que o programa tenta alocar 12gb de memória quando o total de memória mais swap é de apenas 16gb, mas com os parâmetros que estou usando agora só precisa de cerca de 1gb (no Coluna RES), então não vejo por que não posso executar mais de três instâncias.

    
por fifaltra 13.06.2016 / 16:15

0 respostas