バークレー統合パラレルC(UPC)。 GNU gdb C debbugerを使用したデバッグ。 呼び出し履歴

健康!



画像 Unified Parallel C(UPC)は、大規模な並列マシンでの高性能コンピューティング用に設計されたC言語拡張です。 この言語は、共有メモリと共有メモリを備えたシステムの単一のプログラミングモデルを表します。 並列処理の量は、プログラムの開始時に固定され、通常はプロセッサコアごとに1つのスレッドが使用されます。



» UPCの公式ウェブサイト

» バークレーUPC公式ウェブサイト



前回の記事で、 WindowsおよびLinuxへのインストールでは、UPCインストールの実行方法について説明しましたが、デバッグの使用に関する重要な問題は未解決のままです。 メモリがどこかに間違って割り当てられたり、配列が大きすぎると、プログラムが非常に頻繁にクラッシュします

***致命的な信号をキャッチ:ノード0/1のSIGSEGV(11)

注意:バグを報告する前に、環境でGASNET_BACKTRACE = 1で実行して、バックトレースを生成してください。

セグメンテーションエラー(撮影されたキャスト)


この状況で検索を絞り込むために何ができますか? これについては、現在の記事で説明しています。



長い間、私はデバッグについて学ぶことを避けていました。 すでにプログラミングを行う必要がありました。 デバッグする代わりに、各スレッドのアクションのprintfを使用して十分な詳細を記録しました。 ただし、UPCプログラムがCに変換され、一般的なケースでは解釈されないという事実によって、問題は影になります。 ある行が(ログによって)正常に実行され、次のログが発生しなかった場合、ログに記録された行の間にエラーがあるという事実ではありません! 非常に多くの場合、「将来」のエラーは現在の状況に影響し、プログラムをまったく別の場所でクラッシュさせます。



すべてが英語で正常に機能している場合、完全なデバッグ情報はDebugging Berkeley UPC applicationsの公式ページにあります



大学のドメインにメールボックスがある場合は、推奨されるTotalViewの学生ライセンスをリクエストできます。そうでない場合は、通常のデバッガーCを使用できます。



Cに変換した後、main()関数はuser_main()に変わることに注意してください。



まず、特別なデバッグモードを使用するには、 -g



オプションを指定してupccを実行する必要があります。 これは、特別なUPC構成がdbgサブフォルダーから開始されることを意味します。 特定のコード行を表示できるようにするには、コンパイル時に-save-temps



パラメーターを使用して一時ファイルをソースとともに保存する必要があります。



 upcc ./Pack_Polycubes.upc -o Pack_Polycubes -pthreads <b>-save-temps -g</b>
      
      





いくつかのデバッグエントリポイントがあります。 -freeze[=<thread_id>]



パラメーターを使用して特定の番号のスレッドを停止するか、または-freeze-on-error



して誤って単純に停止することができ-freeze-on-error







 upcrun -n 1 -freeze-on-error ./Pack_Polycubes
      
      





-警告警告警告警告警告警告警告



このアプリケーションは、Berkeley UPCインストールから構築されました。

これらのオプション機能を有効にして構成および構築されました。

デバッグトレース統計コレクションデバッグmalloc

通常、これはパフォーマンスに重大な影響を与えるため、

このプログラムの実行で報告されたパフォーマンス値を信頼してください!!!



このメッセージを抑制するには、「-quiet」をupcrunコマンドに渡すか、設定します

UPC_NO_WARNまたはUPC_QUIET環境変数。

-UPCR:Rosa-VBのUPCスレッド0 of 1(pshmノード0 of 1、プロセス0 of 1、pid = 31257)

こんにちは、私は1 of 0です。

...

***致命的な信号をキャッチ:ノード0/1のSIGSEGV(11)

デバッガー用に凍結されたプロセス:ホスト= Rosa-VB pid = 31257

凍結を解除するには、デバッガを接続して「gasnet_frozen」を0に設定するか、SIGCONTを送信します


次に、出力コンパイルファイルがあるフォルダーから別のコンソールセッションでgdbを実行し、ストリームのPIDを指定する必要があります。



 gdb Pack_Polycubes.o 31257
      
      





GNU gdb(リナロGDB)7.7.1_2014.06_1-10()

著作権©2014 Free Software Foundation、Inc.

...

/lib64/ld-linux-x86-64.so.2のロードされたシンボル

/lib64/libc.so.6からの__nanosleep_nocancel()の0x00007f0afab16cd0


プログラムを続行するには、次のコードを実行する必要があります。



 (gdb) set gasnet_frozen = 0 (gdb) continue
      
      





プログラムは、有用なエラーのある行を報告します。



プログラムは信号SIGSEGV、セグメンテーション障害を受信しました。

MultiplyMatrixPackSpaceの0x00000000004289f8(結果= 0x26274ac、マトリックス= 0x2696340、CurPackSpace = 0x7ffd81634020)

./Pack_Polycubes.upc:1065で

1065結果[行] [列] = 0;


現在のブレークポイントをより詳細に表示するには、次のコマンドを使用できます。



 (gdb) list
      
      





1060 //「列ごとの行」ルールによる乗算

1061 for(row = 0; row <Params.Demension; row ++)

1062 {

1063 for(col = 0; col <Params.Demension; col ++)

1064 {

1065結果[行] [列] = 0;



誰が考えたでしょう。 インデックスと割り当てられたメモリを扱います))コールスタックを確認するには、btコマンドを使用します



 (gdb) bt
      
      





#0 0x00000000004289f8 in MultiplyMatrixPackSpace(結果= 0x26274ac、マトリックス= 0x2696340、CurPackSpace = 0x7ffd81634020)

#1 0x0000000000428680 in CheckIndependancePS(CurPackSpace = 0x7ffd81634020)at ./Pack_Polycubes.upc:1032

#2 0x0000000000428430 AddIndependentPackSpace(CurPackSpace = 0x7ffd81634020)in ./Pack_Polycubes.upc:1011

...

#8 0x0000000000427e21 ExplorePackSpaces()at ./Pack_Polycubes.upc:922

#9 0x00000000004244c5 in user_main(argc = 4、argv = 0x7ffd816344e8)at ./Pack_Polycubes.upc:214 ...


呼び出しスタックは下から見る必要があります。 ユーザープログラムはuser_mainで始まり、呼び出しは順番に行われ、エラーが発生した場所とパラメーターを明確にします。



デバッグを正しく終了するには、さらに続行する必要があります。その後、 quit



を実行できます。



 (gdb) continue
      
      





続く

シグナルSIGSEGV、セグメンテーションエラーでプログラムが終了しました。

プログラムはもう存在しません。


何らかの理由でデバッグプロセスがスタックしている場合、別のコンソールウィンドウからkill



コマンドを使用してそれらを強制終了できますが、RosaではCtrl ^ Cを使用すると簡単になります。



最もリクエストされたgdbコマンド:



break [file:]functiop



関数にbreak [file:]functiop



を設定しbreak [file:]functiop





bt



呼び出しスタック

print expr



式の値を出力します





プログラムの実行を続ける

next



プログラムの次の行を実行します(ジャンプ)

step



プログラム行内をステップ

list-現在のブレークポイントを表示

help



- help



を求める

quit



-終了


そしていつものように、 man gdb







ご清聴ありがとうございました! 誰かが役に立つといいな



All Articles