2017-02-16 11 views
1

私はOpenMPIを使用するアプリケーションをWindowsとLinuxで起動しています。しかし、Windows用のバージョンは問題なく動作していますが、Linux上で実行するとメモリ割り当てエラーが発生します。この問題は、より多くの計算が必要な特定のアプリケーション引数で発生します。 メモリリークを解消するために、Valgrindを使ってLinuxバージョンアプリをチェックし、outputを得ました。結局のところ、出力に関する情報を検索しようとしましたが、スタックオーバーフローとGitHub(リンクを添付する評判が足りません)に関する記事が見つかりました。結局のところ、私は2.0.2にopenMPIを更新し、再びアプリケーションをチェックします。新規output。 OpenMPIのメモリリークですか?何か間違っていますか?誰かがこのvalgrindの出力をopen mpiで説明できますか?

出力の片:

==16210== 4 bytes in 1 blocks are definitely lost in loss record 5 of 327 
==16210== at 0x4C2DBB6: malloc (vg_replace_malloc.c:299) 
==16210== by 0x5657A59: strdup (strdup.c:42) 
==16210== by 0x51128E6: opal_basename (in /home/vshmelev/OMPI_2.0.2/lib/libopen-pal.so.20.2.0) 
==16210== by 0x7DDECA9: ??? 
==16210== by 0x7DDEDD4: ??? 
==16210== by 0x6FBFF84: ??? 
==16210== by 0x4E4EA9E: orte_init (in /home/vshmelev/OMPI_2.0.2/lib/libopen-rte.so.20.1.0) 
==16210== by 0x4041FD: orterun (orterun.c:818) 
==16210== by 0x4034E5: main (main.c:13) 

OpenMPIのバージョン:オープンMPI:2.0.2
Valgrindのバージョン:valgrindの-3.12.0
仮想mashine特性:Ubuntuの16.04 LTS x64の

でMPICHを使用する場合、Valgrind出力は:

==87863== HEAP SUMMARY: 
==87863==  in use at exit: 131,120 bytes in 2 blocks 
==87863== total heap usage: 2,577 allocs, 2,575 frees, 279,908 bytes allocated 
==87863== 
==87863== 131,120 bytes in 2 blocks are still reachable in loss record 1 of 1 
==87863== at 0x4C2DBB6: malloc (vg_replace_malloc.c:299) 
==87863== by 0x425803: alloc_fwd_hash (sock.c:332) 
==87863== by 0x425803: HYDU_sock_forward_stdio (sock.c:376) 
==87863== by 0x432A99: HYDT_bscu_stdio_cb (bscu_cb.c:19) 
==87863== by 0x42D9BF: HYDT_dmxu_poll_wait_for_event (demux_poll.c:75) 
==87863== by 0x42889F: HYDT_bscu_wait_for_completion (bscu_wait.c:60) 
==87863== by 0x42863C: HYDT_bsci_wait_for_completion (bsci_wait.c:21) 
==87863== by 0x40B123: HYD_pmci_wait_for_completion (pmiserv_pmci.c:217) 
==87863== by 0x4035C5: main (mpiexec.c:343) 
==87863== 
==87863== LEAK SUMMARY: 
==87863== definitely lost: 0 bytes in 0 blocks 
==87863== indirectly lost: 0 bytes in 0 blocks 
==87863==  possibly lost: 0 bytes in 0 blocks 
==87863== still reachable: 131,120 bytes in 2 blocks 
==87863==   suppressed: 0 bytes in 0 blocks 
==87863== 
==87863== For counts of detected and suppressed errors, rerun with: -v 
==87863== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) 
+0

関連リンク:[link 1](https://github.com/open-mpi/ompi/issues/2166)および[link 2](http://stackoverflow.com/questions/11218056/can -someone-explain-this-valgrind-error-with-open-mpi) –

+0

MPGHを使用してValgrind [出力](https://drive.google.com/file/d/0B871wCRylUoWQlMtTVI5WV9OWTg/view?usp=sharing)バージョン: 3.2。 –

+0

ソースに[リンク](https://drive.google.com/file/d/0B871wCRylUoWT2RvV0ZuZ3ZzVFk/view?usp=sharing) –

答えて

0

これらの出力は、アプリケーションコードではなく、MPIライブラリのメモリリークを指します。それらは無視しても問題ありません。

具体的には、これらの漏れはランチャーからのものです。 ORTEは、MPIプロセスの起動と管理を担当するOpenMPIの実行環境です。 Hydraは、MPICHのランチャーとプロセスマネージャです。

0

「間違いなく「失われた」とは、13行目のプログラムの主な機能を意味します(出力のところではメモリを直接リークしています)。あるいはメモリリークを引き起こす他の関数(orterun)を呼び出しています。それらのリークを修正するか、コードをさらに提供する必要があります。

すべてを見る前にhereをご覧ください。

+0

しかし、main.cファイルは私のソースファイルに属していません –

関連する問題