GPU オフロードコードのメモリーとスレッドの正当性解析

インテル® Inspector

この記事は、The Parallel Universe Magazine 43 号に掲載されている「Analyzing Memory and Threading Correctness for GPU-Offloaded Code」の日本語参考訳です。


parallel_v43_03

現代のワークロードは多様であり、アーキテクチャーも同様です。すべてのワークロードに最適なアーキテクチャーはありません。パフォーマンスを最大化するには、CPU、GPU、FPGA、およびその他のアクセラレーターにデプロイされる、スカラー、ベクトル、行列、および空間アーキテクチャーを組み合わせる必要があります。複雑なヘテロジニアス環境では、デバッグが困難になります。この記事では、アクセラレーターにオフロードするコードの解析をサポートする、インテル® Inspector の新機能を紹介します。

インテル® Inspector の概要

適切なツールを使用しないでメモリーエラーや非決定的スレッドエラーを検出することは困難です。インテル® Inspector は、これらのエラーを検出するように設計されています。インテル® Inspector は、Windows* や Linux* で実行する C、C++、DPC++、および Fortran アプリケーション向けの、動的なメモリーとスレッドのエラーのデバッガーです。


図 1. インテル® Inspector

図 1 は、インテル® Inspector で検出できる問題の種類を示しています。

  • リーク、無効なアクセス、その他を含むメモリーリーク
  • 不足しているキャッシュフラッシュや冗長なキャッシュフラッシュなどのパーシステント・メモリー・エラー
  • データ競合やデッドロックなどのスレッドエラー

インテル® Inspector は、使いやすく、信頼性が高く、そして正確です。特別な再コンパイルは必要ありません。通常のデバッグまたはプロダクション・ビルドを使用して、エラーを検出してデバッグできます。インテル® Inspector は、ソースコードが利用できない場合でも、動的に生成またはリンクされたコードを解析して、サードパーティーのライブラリーを調べることができます。問題が発生する直前に、デバッガーにブレークインします。コマンドライン・オプションを使用して、リグレッション解析を自動化できます。

インテル® Inspector を使用してオフロードコードを解析する方法

アクセラレーターにコードをオフロードすると、正当性解析は複雑になります。DPC++ の利用を進めるにつれて、オフロード問題のデバッグを支援するツールの必要性が明らかになりました。インテル® Inspector の最新バージョンでは、「早期インターセプト」と呼ばれる重要な機能が追加されました。この機能は、カーネル実行前の初期段階でオフロードコードのいくつかの問題をインターセプトします。表 1表 2 は、インテル® Inspector を使用して検出できるオフロード問題のリストです。共有データのデータ競合は、レポートされますが次の制限があります。

  • DPC++ バリアと OpenMP* 同期は無視されます。work-item が同期されている場合でも、ツールは誤検出します。
  • カーネルのローカルメモリーで定義された変数のデータ競合は検出されません。
  • 次の手順は CPU でアプリケーションを実行するように設定しますが、一部の GPU 解析は早期インターセプトを使用してサポートされています。

ステップ 1 は、ホスト CPU で実行するようにアプリケーションを設定します。

次に、カーネルを CPU デバイスで実行するように OpenMP* アプリケーションを設定します。

解析を実行する前にアプリケーションが正しく動作することを確認します。JIT コンパイラー/ランタイムでコード解析とトレースを有効にします。

インテル® Inspector 環境を設定します。

ステップ 2 は、GUI (inspxe-gui) またはコマンドライン (inspxe-cl) を使用して、小さなワークロードの解析を実行します。コマンドラインで解析を実行する場合は、次のコマンドを使用します。

次のように結果を表示します。

GUI で結果を表示する場合は、次のコマンドを使用します。

GUI で解析を実行して結果を表示することもできます (図 2 および図 3)。


図 2. GUI で解析を実行するには、プルダウンメニューから実行する解析を選択して [Start (開始)] ボタンをクリックします。このスクリーンショットでは、「Memory Error Analysis (メモリーエラー解析)」を選択しています。


図 3. デッドロックとデータ競合解析の結果をインテル® Inspector GUI で表示

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

タイトルとURLをコピーしました