Lapack: Segfault в ./EIG/xeigtstz

Созданный на 19 апр. 2019  ·  11Комментарии  ·  Источник: Reference-LAPACK/lapack

Привет,

это с Lapack 3.8.0.

Segfault происходит в xeigtstz с lapack 3.8.0 и последним gfortran:

./EIG/xeigtstz < nep.in > znep.out 2>&1
/bin/sh: Zeile 1: 9026 Speicherzugriffsfehler (Speicherabzug geschrieben)./EIG/xeigtstz < nep.in > znep.out 2>&1

Это исчезает, когда предел стека увеличивается с 8192 КБ по умолчанию до 81920 КБ (т.
первое значение, которое я попробовал).

Build System Testing

Все 11 Комментарий

Кажется, это дубликат https://github.com/Reference-LAPACK/lapack/issues/276 .

gfortran9 помечает выход за границы в (среди прочего) TESTING/EIG/zhet21.f, строка 304 (выполнение цикла на J, работающем от 1 до N-1, доступ к элементу массива U(1, J-1 )... ой). Не уверен, что это фактическая и единственная причина этой проблемы, хотя...
РЕДАКТИРОВАТЬ: мое наблюдение не имеет отношения к делу (и я действительно пропустил, что вы уже открыли для него # 333) xeigtstz пытается выделить около 10 МБ в стеке для тестов NEP, как уже отмечалось в https://github.com/xianyi/OpenBLAS/ выпусков/1645

установка ulimit -s 16384 вместо 8192 по умолчанию устранила эту проблему и для меня.

Та же проблема №85.

Решение этой проблемы состояло в том, чтобы увеличить лимит стека, но, поскольку это тест, не будет ли выделение кучи лучшим решением?

Я считаю, что это выделяемые массивы, которые попадают в стек из-за «рекурсивной» опции (необходимой для безопасности потоков), но мне еще не удалось найти работающее решение.

@weslleyspereira попытается скомпилировать только zchkee.f без опции -frecursive. Таким образом, все файлы (в частности, liblapack.a) будут скомпилированы с параметром -frecursive, а zchkee.f будет скомпилирован без параметра -frecursive. Мы думаем/надеемся, что это поможет. Мы будем тестировать. Я думаю, что важно скомпилировать LAPACK с параметром -frecursive. Теперь zchkee.f можно компилировать без него. Это будет просто прекрасно. CMake и make будут выглядеть немного уродливее. Я думаю, что нам давно пора разработать новый набор тестов, поэтому мы предлагаем пока сделать это безобразно и сосредоточиться на новом наборе тестов.

У меня работало до тех пор, пока я не использовал OpenMP, но последний, к сожалению, подразумевает -frecursive
(Можно использовать filter_out в Makefile для удаления frecursive/Mrecursive из FFLAGS, так что не так много новых уродств)

У меня работало до тех пор, пока я не использовал OpenMP, но последний, к сожалению, подразумевает -frecursive

Ах. Да, это потенциальная проблема.

(Можно использовать filter_out в Makefile для удаления frecursive/Mrecursive из FFLAGS, так что не так много новых уродств)

А, хорошая идея. Понятия не имею, как работает filter_out в Makefile. Хуже расследования. Спасибо за совет.

TESTING/EIG/Makefile после добавления include ../../make.inc

FFLAGS := $(filter-out -frecursive -Mrecursive,$(FFLAGS))
FFLAGS_DRV := $(filter-out -frecursive -Mrecursive,$(FFLAGS_DRV))
LDFLAGS := $(filter-out -frecursive -Mrecursive,$(LDFLAGS))

для cmake это будет что-то вроде
string(REGEX REPLACE "-(fM)recursive" "" FFLAGS ${FFLAGS})
(не проверено)

Спасибо @martin-frbg! сейчас проверю

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

hokb picture hokb  ·  16Комментарии

weslleyspereira picture weslleyspereira  ·  5Комментарии

JHenneberg picture JHenneberg  ·  10Комментарии

epsilon-0 picture epsilon-0  ·  41Комментарии

christoph-conrads picture christoph-conrads  ·  26Комментарии