SDAccel のエミュレーション フロー

SDAccel 開発フローは、2 つの段階に分けることができます。1 つ目の段階では、ホスト コードおよびカーネル コードをコンパイルして、実行ファイルを生成します。2 つ目の段階では、ホスト CPU と SDAccel アクセラレータ プラットフォームで構成されるヘテロジニアス システムで実行ファイルを実行します。ただし、カーネルのコンパイルは時間のかかるプロセスであり、カーネルのサイズとターゲットの FPGA のアーキテクチャによっては数時間かかることがあります。そのため、カーネルのコンパイル プロセスの前のデバッグ サイクル時間を短縮するために、SDAccel 環境にはテスト用にその他 2 つのビルド ターゲット (ソフトウェア エミュレーションおよびハードウェア エミュレーション) があります。これらのエミュレーション ターゲットのコンパイルと実行は非常に高速で、実際の FPGA ボードは必要はありません。これらのエミュレーション フローは、FPGA ボードとそのホスト マシンおよびソフトウェア モデルへの接続を抽象化して、ホストとカーネル コードを組み合わせたときの機能を確認し、設計プロセスの早期のパフォーマンス見積もりを取得します。このパフォーマンス見積もりはあくまでも見積もりですが、パフォーマンスのボトルネックを特定してデバッグするのに役立ちます。ソフトウェアおよびハードウェア エミュレーション フローを使用したデバッグの詳細は、『SDAccel 環境デバッグ ガイド』 を参照してください。

ソフトウェア エミュレーション フロー

ソフトウェア エミュレーション ターゲットのコンパイルは、最も高速です。ホスト コードとカーネル コードを一緒に実行したときに機能が正しいかどうかを確認するために主に使用されます。カーネル コードをホスト コードと共に実行するために最低限必要な変換が XOCC コンパイラにより実行されるので、最終的なバイナリの作成の初期段階で機能が正しいかどうかを確認するのに役立ちます。ソフトウェア エミュレーション フローはアルゴリズムの調整おおび機能的な問題のデバッグに使用して、コードを向上するために反復作業をすばやく実行できます。

ハードウェア エミュレーション フロー

ハードウェア エミュレーション フローでは、XOCC コンパイラによりカーネル モデルがハードウェア記述言語 (RTL Verilog) で生成されます。ハードウェア エミュレーション フローは、C、C++、または OpenCL カーネル コードから RTL の合成後に、最終的に作成されたバイナリが論理的に正しいかどうかをチェックするのに役立ちます。ハードウェア エミュレーション フローでは、システムが意図したとおりに機能していない場合に、波形ビューアーを使用してデバッグを実行できます。

表 1. ハードウェア実行を使用したエミュレーション フローの比較
ソフトウェア エミュレーション ハードウェア エミュレーション ハードウェア実行
ホスト アプリケーションをカーネルの C/C++ または OpenCL モデルを使用して実行。 ホスト アプリケーションをカーネルのシミュレーション済み RTL モデルを使用して実行。 ホスト アプリケーションをカーネルの実際のハードウェア インプリメンテーションを使用して実行。
システムの機能が論理的に正しいことを確認。 ホストとカーネルの統合をテスト、パフォーマンス見積もりを取得。 システムが正しく必要なパフォーマンスで実行されることを確認。
実行時間が最短。 最高のデバッグ機能、コンパイル時間は中程度。 最終的な FPGA インプリメンテーションおよび run で正確なパフォーマンス結果を提供、ビルド時間が長い。