web-dev-qa-db-ja.com

LAPACK makeの失敗:「ターゲット 'znep.out'のレシピが失敗しました」エラー

私の主な問題はこのエラーを受け取ることです:

Makefile:463: recipe for target 'znep.out' failed

makeを実行した後

[〜#〜] gpaw [〜#〜] (g Projector Augmented Wave method、for [〜#〜] dft [〜#〜] シミュレーションをインストールしようとしました)私のマシンで。 ASEは機能しており、すでに Libxc をインストールし、BLASライブラリを指定したとおりにコンパイルしました here ですが、抽出したパッケージで「make」を実行すると、常に同じエラーが発生します。

~/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

インストール手順で提案されている「Makefile」のデフォルト設定を使用しました。デフォルトのファイルは here にあります。

なにか提案を? Kubuntu 17.10を使用しています

4
Joshua Salazar

HPCの講義に参加していくつかの調査を行った後、私は答えを見つけました。

カーネルがコンパイルプロセスに一定量のメモリを関連付けているようです。この機能は、バグが発生し、不必要に大量のメモリが割り当てられる場合に役立ちます。ただし、コンパイルに通常より多くのメモリが必要になり、エラーが発生する場合があります。

次に、次のコマンドを使用して、無制限の量のメモリをコンパイルに設定します。

ulimit -s unlimited

これですべてが正常に動作します。

追加の質問については@steeldriverに感謝します。

5
Joshua Salazar

ulimit -s unlimited回避策で問題が完全に解決されませんでした。 gccスタックのスマッシングプロテクターが原因で、さらに障害が発生しました。

# cat TESTING/snep.out 
*** stack smashing detected ***: <unknown> terminated
IOT Trap
 Tests of the Nonsymmetric Eigenvalue Problem routines

スタック破壊プロテクターをオフにするには、make.incのCFLAGS行を次のように編集します。

 CFLAGS    = -O3 -I$(TOPDIR)/INCLUDE -fno-stack-protector

次にmake cleanおよびmake all

Gccスタックスマッシングディテクターが実際のメモリバグをここで検出している可能性は非常に高いです。 this bug report のコメントの一部では、一部のテストで一部の配列のインデックスを作成するときに1つずれるエラーが発生することを示唆しています。そのバグの修正を含む新しいバージョンのlapackを試してみる価値があるかもしれません。それでも修正されない場合は、上流のバグを報告してください。

(ちなみに、別のビルドバグも発生しました:並列makeでビルドできない、つまりmake -j16 allですが、標準の単一プロセスで機能しますmake all。)

0
bain