Oi,
isso é com Lapack 3.8.0.
Um segfault ocorre em xeigtstz com lapack 3.8.0 e gfortran recente:
./EIG/xeigtstz <nep.in> znep.out 2>&1
/bin/sh: Zeile 1: 9026 Speicherzugriffsfehler (Speicherabzug geschrieben) ./EIG/xeigtstz <nep.in > znep.out 2>&1
Isso desaparece quando o limite de pilha é aumentado do padrão de 8192 kb para 81920 kb (o
primeiro valor que tentei).
Parece ser uma duplicata de https://github.com/Reference-LAPACK/lapack/issues/276 .
gfortran9 sinaliza um acesso fora dos limites (entre outros) TESTING/EIG/zhet21.f linha 304 (faça um loop em J rodando de 1 a N-1, acessando o elemento de array U(1, J-1 ) ... ai). Não tenho certeza se esta é a causa real e única desse problema ainda ...
EDIT: minha observação não está relacionada (e eu realmente perdi que você já abriu # 333 para isso) xeigtstz tenta alocar cerca de 10 MB na pilha para os testes NEP, como já observado em https://github.com/xianyi/OpenBLAS/ questões/1645
definir ulimit -s 16384
em vez do padrão 8192 corrigiu esse problema para mim também
Mesmo problema aqui #85.
A solução para esse problema foi aumentar o limite de pilha, mas como isso é um teste, a alocação de heap não seria uma solução melhor?
Acredito que sejam arrays alocáveis que acabam na pilha devido à opção 'recursiva' (necessária para segurança de thread), mas ainda não consegui encontrar uma solução funcional.
@weslleyspereira tentará compilar apenas zchkee.f sem a opção -frecursive. Portanto, todos os arquivos (em particular liblapack.a) serão compilados usando a opção -frecursive, mas zchkee.f será compilado sem a opção -frecursive. Nós achamos/esperamos que isso dê certo. Nós vamos testar. Acho importante compilar o LAPACK com -frecursive. Agora zchkee.f pode ser compilado sem. Isso vai ficar bem. CMake e make ficarão um pouco mais feios. Acho que estamos muito atrasados para um novo conjunto de testes, então sugerimos que façamos isso feio por enquanto e nos concentremos em um novo conjunto de testes.
Funcionou para mim desde que eu também não use o OpenMP, mas o último infelizmente implica -frecursive
(Pode usar filter_out no Makefile para remover frecursive/Mrecursive de FFLAGS, então não há muita feiúra nova)
Funcionou para mim desde que eu também não use o OpenMP, mas o último infelizmente implica -frecursive
Ah. Sim, esse é um problema em potencial.
(Pode usar filter_out no Makefile para remover frecursive/Mrecursive de FFLAGS, então não há muita feiúra nova)
Ah, boa ideia. Não faço ideia de como o filter_out no Makefile funciona. Pior investigando. Obrigado pela dica.
TESTING/EIG/Makefile, após adicionar include ../../make.inc
FFLAGS := $(filter-out -frecursive -Mrecursive,$(FFLAGS))
FFLAGS_DRV := $(filter-out -frecursive -Mrecursive,$(FFLAGS_DRV))
LDFLAGS := $(filter-out -frecursive -Mrecursive,$(LDFLAGS))
para cmake seria algo como
string(REGEX REPLACE "-(fM)recursive" "" FFLAGS ${FFLAGS})
(não testado)
Obrigado @martin-frbg! vou testar agora