Fortran アプリケーションにおけるインテル® Inspector XE の使用 – パート 1 メモリー解析

同カテゴリーの次の記事

インテル® Parallel Studio XE を使用した Linux* 環境での Fortran プログラムの正当性解析

この記事は、インテル® ソフトウェア・ネットワークに掲載されている「Using Intel® Inspector XE on Fortran Applications – Memory Analysis」の日本語参考訳です。


インテル® Inspector XE の正当性/セキュリティー検証は、C/C++、C#、Fortran 言語で記述されたプログラムの解析をサポートします。この記事は、Fortran アプリケーションにおけるインテル® Inspector XE の使用方法を紹介するシリーズ (全 3 パート) の 1 つ目です。ここでは、Fortran サンプル・アプリケーションを使って、インテル® Inspector XE のメモリー解析について説明します。パート 2 と 3 では、Fortran でのスレッド解析とスタティック・セキュリティー解析の使用方法を説明します。

デバッグ設定 (最適化を無効にし、デバッグ情報を含む) が完了し、コンパイルに成功したら、インテル® Inspector XE プロジェクトを作成します (以下のスクリーンショットを参照)。Microsoft* Visual Studio* を使用している場合、インテル® Inspector XE は Visual Studio* プロジェクトを使用するため、このステップはスキップします。

newProject

新しいプロジェクトを作成する際は、インテル® Inspector XE のプロジェクト・プロパティーで、起動するアプリケーションの場所 (この例では “nqueens_memory_debug”)、アプリケーションへの引数、作業ディレクトリーを設定します。

ProjectProperties.png

上記の 2 つのスクリーンショットは Linux* 環境の GUI バージョンに必要なステップを示しています。ここからは、Visual Studio* IDE のスクリーンショットを使用しますが、スタンドアロン GUI でも外観はほぼ同じです。

アプリケーションのメモリー解析を行うには、[New Analysis (新しい解析)] をクリックし、[Analysis Type (解析タイプ)] を選択して、[Start (開始)] をクリックします (以下のスクリーンショットを参照)。以下のスクリーンショットでは、[Detect Memory Problems (メモリー問題の検出)] 解析タイプが選択されています。インテル® Inspector XE には、[Detect Leaks (リークの検出)] と [Locate Memory Problems (メモリー問題の特定)] という定義済みの解析タイプもあります。

それぞれの解析タイプには、オーバーヘッド、検出される問題、詳細レベルに関するトレードオフがあります。[Analysis Type (解析タイプ)] ウィンドウの [Details (詳細)] に各解析タイプの詳細情報が表示されます。新しい解析タイプを作成し、設定することもできます。すべての解析タイプの詳細は、インテル® Inspector XE のヘルプに記述されています。

startAnalysis

インテル® Inspector XE は、アプリケーションを起動し、監視して、メモリー問題を検出します。アプリケーションが終了すると、[Summary (サマリー)] に検出された内容が表示されます。

memory+results.png

この例では、インテル® Inspector XE により、アプリケーションで [Uninitialized memory access (初期化されていないメモリーへのアクセス)] と [Memory leak (メモリーリーク)] が 1 件ずつ検出されています。[Code Locations (コードの場所)] ペインに、選択した問題に関連したソースコードの場所が表示されます。上記のスクリーンショットでは、メモリーリークの割り当て位置がハイライトされています。問題をダブルクリックすると、[Sources (ソース)] ビューが開き、完全なソースコード情報とコールスタックのデータが表示されます (以下のスクリーンショットを参照)。

sources+view.png

このビューでソース行をダブルクリックすると、コードエディターが開き、ソースファイルを変更することができます。この特定の問題を修正するには、このメモリーの割り当てを解放するコードを追加する必要があります。

deallocate.png

解析サマリーで報告された 2 つ目の件は、初期化されていないメモリーへのアクセスです。つまり、変数へ書き込みが行われる前に読み取りが行われています。この問題の [Sources (ソース)] ビューでは、”queens” 変数の割り当てと最初の読み取りが確認できます。

Uninit+Sources+View.png

この問題を修正するには、読み取りを行う前にこの変数を初期化する必要があります。初期化コードを追加します。

initialize.png

これらの問題を修正したら、アプリケーションをリビルドし、再度解析を実行してみてください。すべての問題が解決されると、以下のような解析結果が表示されます。

noProb

インテル® Inspector XE を使用することで、Fortran アプリケーションを容易に解析し、アプリケーションの正当性とセキュリティーを向上させることができます。

コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

編集部追加

本記事では、Fortran プログラムのメモリー管理における問題を検出する方法について紹介しています。Fortran 90 より追加された allocate 文は必要に応じたメモリー確保を可能にしますが、場合によっては確保されたメモリーが開放されないことがあります。また C/C++ 言語において、メモリー確保と開放の問題はより複雑になります。インテル® Inspector XE は、このようなメモリー問題を検出し、アプリケーションの信頼性を向上させることに貢献します。評価版のダウンロード、お問い合わせはエクセルソフト株式会社まで。

関連記事