FPGAコンパイラは1つのモノリシックなアルゴリズムではなく、複雑かつ大規模なアルゴリズムの集合体です。計算上の課題は、設計を進めるにあたり、数百万の処理要素が存在するチップ上に最適化されたレイアウトを生成するフローを経る必要があることです。これらの処理要素は、ユーザが自由に構成できます。コンパイラは、シンセシスを利用して、処理要素同士が論理的に接続されたシステムを作成します。そして、反復プロセスでマッピング、配置、ルーティングを行って最適なソリューションを見つけ出し、ユーザの制約を守りつつ、物理的なチップ上ですべての配線を行います。問題を解決するために、無限の可能性を持つソリューションの中から全体的に最適化されたものを見つけ出すための数学的手法は、想像できるように、自明ではありません。そのため、FPGAコンパイルは数時間を要し、高密度シリコンの場合、さらに長くかかることもあります。
コンパイル時間を短縮するには、大容量のRAMと高度なプロセッサを搭載した専用のハイエンドWindowsコンピュータを別に用意し、そのコンピュータにコンパイルをオフロードして負荷を軽減します。LinuxシステムにXilinxコンパイルツールをインストールしてその最適化性能を活用すると、さらにコンパイル時間を短縮することができます。NIでは、社内でそのようなオプションを簡単に設定したり、さらには保守不要のハイエンドコンピュータを使用してクラウドでコンパイルしたりできるようにするために、LabVIEW FPGAコンパイルシステムを開発しています。
NIのLabVIEW FPGAコンパイルシステムは、3つの基本ソフトウェアコンポーネントを搭載することで、モジュール式で拡張性の高いコンパイルソリューションを実現しています。このコンパイルシステムは、開発用コンピュータ、コンパイルサーバ、任意の数のコンパイルワーカという3つの要素に分かれています。
LabVIEW FPGAモジュール開発環境 ― 使い慣れたLabVIEW開発環境でアプリケーションを作成します。FPGA VIの実行をクリックすると、「中間ファイルを生成中」ステップが完了します (詳細については、「LabVIEW FPGAコンパイルプロセス」を参照してください)。生成後、開発用コンピュータは中間ファイルをWebサービス通信経由でコンパイルサーバに送ります。
コンパイルサーバ ― コンパイルサーバは1つまたは複数のLabVIEW FPGA開発システムからコンパイルジョブを受け取り、そのコンパイルジョブの割り振り先となるワーカを検索します。利用可能なコンパイルワーカが存在しない場合、コンパイルサーバは、ワーカが利用可能になるまでコンパイルジョブをキューに入れて待機します。
コンパイルワーカ ― コンパイルワーカにはXilinxコンパイルツールがインストールされており、FPGA設計の合成、マッピング、配置、ルーティングが行えます。これらのツールを使用して、コンパイルワーカは設計を実装し、ビットファイルを生成します。コンパイルワーカはビットファイルをコンパイルサーバに送り返し、その後、コンパイルサーバはそのビットファイルを開発用コンピュータに送り返します。
図1: LabVIEW FPGAコンパイルシステムのアーキテクチャに含まれる3つのコンポーネント: 開発用コンピュータ、コンパイルサーバ、コンパイルワーカ
このコンパイルシステムのアーキテクチャのメリットは、複数のコンパイルワーカがサポートされ、コンパイルジョブの自動割り振りが行われることです。キューイングと割り振りを処理するコンパイルサーバは、コンパイルワーカのドロップイン/アウトに対する耐性を備えています。実際に、コンパイルジョブの途中でコンパイルワーカがドロップアウトすると、コンパイルサーバはそれを検出し、別の利用可能なコンパイルワーカにコンパイルを割り振ります。コンパイルジョブをやり直す必要がある場合でも、ユーザ側にアクションを一切要求することなく終了します。開発環境とコンパイルサーバの間の通信ラインはすべて堅牢なWebサービスを基盤としているため、コンパイルシステムは、開発用コンピュータの再起動といった開発側の数多くの問題に対しても耐性を備えています。
LabVIEW FPGAモジュールには、標準機能として2つのコンパイルシステムオプションがあります。開発用コンピュータで直接コンパイルする方法と、専用のリモートコンパイルコンピュータにコンパイルを転送する方法です。
LabVIEWのデフォルトでは、開発用コンピュータに対して、1つのコンパイルサーバと1つのコンパイルワーカがLabVIEW FPGAモジュールとともにインストールされます。LabVIEW 2009 FPGAモジュール以前のバージョンを使用している場合、このセットアップ動作はまったく同じで、コンパイルは開発用コンピュータ上で実行されます。ただし、このシステムは元々分散型コンパイルをサポートするよう開発されているため、コンパイルサーバ側では、コンパイルは「ローカルホスト」と呼ばれる別のコンピュータ上で行われているように認識されます。
図2: LabVIEW FPGAモジュールは、デフォルトでコンパイルサーバとコンパイルワーカの両方を開発用コンピュータにインストールし、開発用コンピュータのリソースを使用してコンパイルジョブを実行
より高度なコンパイルシステム構造を設定するには、コンパイルサーバとコンパイルワーカを別のコンピュータにインストールします。リモートコンパイルサーバを設定するには、Xilinxコンパイルツールのみをインストールします。このプロセスの段階的な手順については、「リモートコンピュータでLabVIEW FPGAコンパイルサーバをインストールしてアクティブ化する」の記事を参照してください。
図3: LabVIEW FPGAは、アドオンなしでシンプルなシングルコンピュータ用コンパイルサーバにコンパイルをオフロードする機能をサポート
リモートコンピュータにXilinxコンパイルツールをインストールした後、実行ボタンをクリックするときにネットワークコンパイルサーバに接続を選択することで、開発用コンピュータをこの新しいコンパイルサーバに接続することができます。また、このコンパイルオプションは、ツール→オプション→FPGAモジュールページで設定することもできます。
図4: リモートFPGAコンパイルコンピュータをコンパイル先に指定するには、コンパイルシステムオプションを選択してサーバの場所を指定
開発者がより高度なFPGA技術を用いるようになるにつれ、FPGAコンパイルは演算的に複雑化し、その結果、より時間がかかるようになっています。開発用コンピュータのリソースを節約するために、LabVIEW FPGAコンパイルシステムのアーキテクチャには、コンパイルを専用のコンピュータにオフロードして負荷を軽減するオプションがあります。専用コンピュータは、高性能プロセッサと高レベルのRAMを搭載したハイエンドコンピュータでなければなりません。表1は、さまざまなXilinx Virtex-5 FPGAに必要な最小RAMを示しています。
表1: Xilinx Virtex-5およびZynq-700 FPGAの推奨RAMガイドラインに従う (出典: ISE Design Suiteを使用する際のXilinxのメモリに関する推奨事項)
コンパイルジョブのパフォーマンスは、そのプロセスに大量のシステムメモリが必要で、ハードドライブを呼び出す必要があったり、場合によっては終了したりする場合に、最も悪影響を受けます。最良の結果を得るには、表1の推奨事項に従ってください。32ビットサーバの場合、4 GBのRAMを使用し、Xilinxコンパイルツールのみをインストールする必要があります。3 GBのWindowsスイッチを使用すると、OSでコンパイルに最大限のRAMを割り当てることが可能になります。表に示されているように、64ビットシステムには、より多くのRAMを搭載する必要があります。当然、これらのシステムは4 GBのRAMをはるかに超える容量に対応できるため、この場合、RAMは多いほどよく、最大16 GBまで搭載できます。
LabVIEW FPGAモジュールを使用して、コンパイルサーバとコンパイルワーカを別のコンピュータにインストールし、コンパイル先を指定することができます。これを行うには、「リモートコンピュータでLabVIEW FPGAコンパイルサーバをインストールしてアクティブ化する」の記事に示された手順に従ってください。
図5: LabVIEW FPGAモジュールは、アドオンなしでシンプルなシングルコンピュータ用コンパイルサーバにコンパイルをオフロードする機能をサポート
FPGA Compile Farm Serverを使用すると、オンサイトのコンパイルファームを構築し、複数の開発者がコンパイル先として指定できる複数のコンパイルワーカを含めることができます。メモ:LabVIEW 2013 FPGAモジュール以前のバージョンでは、NI LabVIEW FPGA Compile Farm (FPGAコンパイルファーム) ツールキットを使用してください。
コンパイルサーバには、利用可能なすべてのコンパイルワーカにコンパイルジョブを割り振る役割があります。複数のコンパイルワーカがあるため、コンパイルは並列実行されます。利用可能なコンパイルワーカが存在しない場合、コンパイルサーバはFIFOを使用して要求をキューに入れ、コンパイルワーカが利用可能になったときに要求を割り振ります。
図6: 1つのコンパイルサーバと複数のコンパイルワーカを使用したオンサイトのコンパイルファームのアーキテクチャ
最後のFPGAコンパイルオプションでは、NIがオンラインでクラウド上に提供しているコンパイルサーバとコンパイルワーカを使用します。使いやすくするため、LabVIEW FPGAから直接接続してログインするだけで、追加のインストールをすることなく、コンパイルをクラウドにオフロードできるようになっています。LabVIEW FPGA Compile Cloud Serviceは、大容量のRAMを搭載した最新の専用ハイエンドコンピュータを使用してLinux上でXilinxコンパイルツールを実行します。そのため、標準のWindowsデスクトップと比較すると、FPGA VIでは、コンパイル時間が大幅に短縮されます。クラウドでコンパイルする場合も、多数のVIを並列にコンパイルできます。
クラウドサービスをコンパイル先に指定するには、LabVIEW FPGAコンパイルサーバのダイアログボックスを使用して、オンラインのクラウドサービスを選択し、ユーザ名とパスワードを入力します。
図7: LabVIEWを介してクラウドに接続し、コンパイル時間を短縮してコンパイルの負荷を軽減
コンパイルクラウドの設定が完了すると、コンパイルは、ローカルコンピュータやローカルコンパイルファームではなく、このクラウドサービス上で行われます。接続には、ネットバンキングなどのインターネットサービスで使われているものと同様の最新セキュリティ対策が採用されています。
図8: コンパイルをオフロードするクラウドアーキテクチャ
NIは、Linux OSでのFPGAコンパイルワーカのサポートに投資しています。FPGA VIの複雑さやロジック次第では、Linuxコンパイルワーカでのコンパイル時間がWindowsコンパイルワーカに比べて20~50%短縮される可能性があります。このようにコンパイル時間を大幅に短縮できる背景には、Xilinxが当初、Linux OS用にコンパイルツールを設計し、最適化していたことがあります。
図9: LabVIEW 2012 FPGA以降のバージョンはLinuxコンピュータへのXilinxコンパイルツールのインストールをサポートしているため、コンパイル時間が短縮
>> クラウドでLinux FPGAコンパイルワーカを使用する利点についてご確認ください。
>> 独自のLinux FPGAコンパイルワーカを構築する方法の詳細はこちらをご覧ください。
LabVIEW FPGAコンパイルシステムでは、柔軟性に優れたコンパイルサーバとコンパイルワーカのアーキテクチャにより、演算負荷の高いFPGAコンパイルプロセスの処理をLabVIEWの開発用コンピュータからオフロードすることができます。また、LabVIEW FPGAコンパイルシステムでは、Linuxベースのコンパイルワーカを使用してコンパイル時間を短縮できます。チームに適したFPGAコンパイルオプションを選択した後、以下のリンクから設定方法の詳細をご確認ください。