Meu principal problema é receber este erro:
Makefile:463: recipe for target 'znep.out' failed
depois de corrermake
Eu estava tentando instalar o GPAW (g Projector Augmented Wave method, para simulações DFT ) na minha máquina. O ASE está funcionando, e eu já instalei o Libxc , e compilei as bibliotecas BLAS conforme especificado aqui, mas ao executar 'make' no pacote extraído, sempre recebo o mesmo erro:
~/Downloads/lapack-3.8.0$ make
gfortran -O2 -frecursive -c -o zunt03.o zunt03.f
gfortran -o xeigtstz zchkee.o zbdt01.o zbdt02.o zbdt03.o zbdt05.o zchkbb.o zchkbd.o zchkbk.o zchkbl.o zchkec.o zchkgg.o zchkgk.o zchkgl.o zchkhb.o zchkhs.o zchkst.o zchkst2stg.o zchkhb2stg.o zckcsd.o zckglm.o zckgqr.o zckgsv.o zcklse.o zcsdts.o zdrges.o zdrgev.o zdrges3.o zdrgev3.o zdrgsx.o zdrgvx.o zdrvbd.o zdrves.o zdrvev.o zdrvsg.o zdrvsg2stg.o zdrvst.o zdrvst2stg.o zdrvsx.o zdrvvx.o zerrbd.o zerrec.o zerred.o zerrgg.o zerrhs.o zerrst.o zget02.o zget10.o zget22.o zget23.o zget24.o zget35.o zget36.o zget37.o zget38.o zget51.o zget52.o zget54.o zglmts.o zgqrts.o zgrqts.o zgsvts3.o zhbt21.o zhet21.o zhet22.o zhpt21.o zhst01.o zlarfy.o zlarhs.o zlatm4.o zlctes.o zlctsx.o zlsets.o zsbmv.o zsgt01.o zslect.o zstt21.o zstt22.o zunt01.o zunt03.o dlafts.o dlahd2.o dlasum.o dlatb9.o dstech.o dstect.o dsvdch.o dsvdct.o dsxt1.o alahdg.o alasum.o alasvm.o alareq.o ilaenv.o xerbla.o xlaenv.o chkxer.o ../../libtmglib.a ../../liblapack.a ../../librefblas.a
make[2]: Leaving directory '/home/joshua/Downloads/lapack-3.8.0/TESTING/EIG'
NEP: Testing Nonsymmetric Eigenvalue Problem routines
./EIG/xeigtstz < nep.in > znep.out 2>&1
Makefile:463: recipe for target 'znep.out' failed
make[1]: *** [znep.out] Error 139
make[1]: Leaving directory '/home/joshua/Downloads/lapack-3.8.0/TESTING'
Makefile:42: recipe for target 'lapack_testing' failed
make: *** [lapack_testing] Error 2
Eu usei a configuração padrão para o 'Makefile' que é proposto nas instruções de instalação. O arquivo padrão está aqui .
Alguma sugestão? Eu uso Kubuntu 17.10
Depois de assistir a uma palestra sobre HPC e fazer algumas pesquisas, tive a resposta.
Parece que o kernel associa uma certa quantidade de memória aos processos de compilação. Esse recurso ajuda em alguns casos, quando podem surgir bugs e eles começam a alocar grandes quantidades de memória desnecessariamente. Mas, às vezes, a compilação requer mais memória do que o normal e começa a apresentar erros.
Em seguida, usando o seguinte comando, ele define uma quantidade ilimitada de memória para a compilação.
Agora tudo funciona bem.
Obrigado a @steeldriver pelas perguntas extras.
A
ulimit -s unlimited
solução alternativa não resolveu completamente o problema para mim. Houve uma falha adicional causada pelo protetor de quebra de pilha do gcc:Para desativar o protetor de quebra de pilha, edite a linha CFLAGS em make.inc para:
Então
make clean
emake all
.É muito possível que o detector de quebra de pilha do gcc esteja detectando bugs de memória reais aqui, alguns comentários neste relatório de bug sugerem que alguns dos testes têm erros off-by-1 ao indexar alguns arrays, então pode valer a pena tentar uma versão posterior de lapack que inclui as correções desse bug e, se ainda não foi corrigido, gera um bug upstream.
(Aliás, também encontrei outro bug de compilação: ele falha ao compilar com um make paralelo, ou seja
make -j16 all
, mas funciona com o processo único padrãomake all
.)Eu tive o mesmo problema. Eu tentei a
ulimit -s unlimited
solução alternativa, mas quando o teste é executado, e não durante a compilação. E todos os testes agora passaram!