Lapack: Falha de segmentação em ./EIG/xeigtstz

Criado em 19 abr. 2019  ·  11Comentários  ·  Fonte: Reference-LAPACK/lapack

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).

Build System Testing

Todos 11 comentários

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

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

miroi picture miroi  ·  10Comentários

nboelter picture nboelter  ·  3Comentários

h-vetinari picture h-vetinari  ·  8Comentários

weslleyspereira picture weslleyspereira  ·  5Comentários

hokb picture hokb  ·  16Comentários