Main Content

ワークフロー

  1. GPU Coder™ は、MATLAB® Coder™ により提供される機能に依存します。そのため、トラブルシューティング プロセスの最初の手順は、MATLAB Coder と互換性を持つコードがあることを確認します。MATLAB Coder のプログラミング要件とベスト プラクティスを確認するには、コード生成のための MATLAB プログラミングを参照してください。

  2. GPU Coder には、MATLAB Coder および Image Processing Toolbox™ と互換性を持つ関数のさまざまなサポートがあります。GPU Coder でテスト済みの関数の一覧がGPU 用の MATLAB アルゴリズム設計で提供されています。これらの関数は、完全にサポートされる関数、サポートされない関数、および特定の条件下でサポートされる関数に分類されます。たとえば、特定の関数は、ベクトル ベースの演算では機能するものの、ループ本体内で使用すると機能しません。ただし、可能であれば、純粋な MATLAB を使ってツールボックス関数を書き換えることが推奨されます。

  3. GPU Coder は、プログラム並列化解析を使用して並列 for ループを検出します。従来の逐次アルゴリズムは並列化可能な度合いが大きく異なることがあります。一部の問題は極めて並列化され、詳細な分割も容易です。一方、固有の並列性を提示するために、ある程度のリファクタリングが必要になるアルゴリズムもあります。GPU Coder で実行される並列解析は保守的です。そのため、ループが実際には並列でも、依存性解析でその並列性を検出できない場合があります。

  4. ループはカーネルの次元を静的に決定しなければなりません。たとえば、while ループ、break ステートメントを含むループ、および反復の範囲を静的に決定できないループは、CUDA® カーネルに簡単にマッピングすることができず、書き直す必要があります。詳細は、カーネル解析の節を参照してください。

  5. これらの問題を検討および修正したら、CUDA コードを生成する準備が整いました。コード生成を実現する最も簡単な方法は、プラグマ coder.gpu.kernelfun をエントリポイント関数に配置することです。次に、GPU Coder 入門で説明されている手順に従い、コマンド ラインまたは GPU Coder アプリを使用して CUDA コードを生成することができます。

  6. 生成された CUDA コードのパフォーマンスを評価するには、MATLAB 関数 tic および toc を使用して、実行時間を求めることができます。結果の GPU 高速化が十分でない場合、以下のような高度な診断を実行できます。

    • カーネル解析

    • メモリ ボトルネック解析

    • NVIDIA Visual Profiler (nvvp) ツールによる解析

関連するトピック