LabVIEW FPGAコンパイルオプション

概要

この10年ほどで、LabVIEW FPGAモジュールは業界標準のNI再構成可能I/O(RIO)ハードウェアとともに、FPGA(Field-Programmable Gate Array)のプログラミングを身近なものにしました。ただしFPGA技術には、FPGA設計の統合、配置、ルーティングなど処理負荷の高いタスクへの対処という、全てのFPGAプログラマが認知する課題があります。このタスクにより、コンパイル時間は数分単位から数時間単位に及ぶ長さになります。さらに、ムーアの法則のとおりこの10年ほどで設計は大規模化、複雑化し、問題はより複合的になっています。対策を施さなければ、FPGA設計プロセスの中で、コンパイルにかかる時間の割合が増え続ける可能性があります。この技術資料では、Linuxのコンパイルシステムを使用して処理負荷の高いプロセスをオフロードし、コンパイル時間の短縮もできる、LabVIEW FPGAモジュールによる3つのFPGAコンパイルオプションについて紹介します。

内容

複雑するFPGAコンパイル

FPGAコンパイラは1つのモノシリックなアルゴリズムではなく、複雑かつ大規模なアルゴリズムの集合体です。計算上の課題により、設計ではユーザが自由に構成できる無数の処理要素を使用して最適なレイアウトをチップ上に生成するフローを実現する必要があります。コンパイラは、シンセシスを利用して、処理要素同士が論理接続されたシステムを作成します。そして反復プロセスでマッピング、配置、ルーティングを行って最適なソリューションを見つけ出し、ユーザの制約を守りつつ物理チップ上で全ての配線を行います。問題への最適なソリューションは無限の可能性があるため、その背景にある数学的演算は自明ではありません。そのため、FPGAコンパイルは数時間を要し、高密度シリコンならさらに長くかかることがあります。

コンパイル時間を短縮するには、大容量RAMと高性能プロセッサを搭載した専用のハイエンドWindowsマシンを別に用意して、そのマシンにコンパイルを任せて負荷を軽減します。LinuxシステムにXilinxコンパイルツールをインストールしてその最適化性能を活用すると、さらに時間を短縮することができます。ナショナルインスツルメンツでは、社内でそのようなオプションを設定でき、さらに保守不要のハイエンドコンピュータにクラウドで実装できるようにするため、LabVIEW FPGAコンパイルシステムを開発しました。

LabVIEW FPGAコンパイルシステム概要

NIのLabVIEW FPGAコンパイルシステムは、3つの基本ソフトウェアコンポーネントを搭載することで、モジュール式のスケーラブルなコンパイルソリューションを実現します。コンパイルシステムは3つの要素に分かれています。すなわち、開発用コンピュータ、コンパイルサーバ、任意の数のコンパイルワーカです。

LabVIEW FPGAモジュール開発環境 — 使い慣れたLabVIEW開発環境でアプリケーションを作成できます。FPGA VIの実行をクリックすると、中間ファイル生成ステップが完了します(詳細については、「LabVIEW FPGA Compilation Process」を参照してください)。生成が終わると、開発用コンピュータは中間ファイルをWebサービス通信経由でコンパイルサーバに送ります。

コンパイルサーバ―コンパイルサーバは1つまたは複数のLabVIEW FPGA開発システムからコンパイルジョブを受け取り、そのコンパイルタスクを実行できるコンパイルワーカを検索します。使用できるコンパイルワーカがない場合、コンパイルサーバはコンパイルタスクをキューに入れてコンパイルワーカが使用可能になるのを待ちます。

コンパイルワーカ―コンパイルワーカにはXilinxコンパイルツールがインストールされており、FPGA設計の合成、マッピング、配置、ルーティングが行えます。このようなツールを使用して、コンパイルワーカは設計を実装し、ビットファイルを生成します。コンパイルワーカはビットファイルをコンパイルサーバに送り返し、その後、コンパイルサーバはビットファイルを開発用コンピュータに送り返します。

図1. LabVIEW FPGAコンパイルシステムアーキテクチャに含まれる3つのコンポーネント: 開発用コンピュータ、コンパイルサーバ、コンパイルワーカ

このコンパイルシステムアーキテクチャには、複数のコンパイルワーカとコンパイルジョブの自動割り当てをサポートするというメリットがあります。コンパイルサーバはキューとファームを処理し、コンパイルワーカのドロップイン/アウトに対し耐性を備えています。実際、コンパイルジョブ中にコンパイルワーカがドロップアウトすると、コンパイルサーバはこれを検出して他の使用可能なコンパイルワーカにコンパイルを渡します。コンパイルジョブをやり直す必要がある場合でも、ユーザ側がアクションを起こすことなく終了します。開発環境とコンパイルサーバ間の通信ラインは全て堅牢なWebサービスなので、コンパイルシステムは開発用コンピュータの再起動といった、数多くの開発側の問題に対しても耐性を備えています。

LabVIEW FPGAコンパイルシステム標準オプション

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技術を用いるにつれて、FPGAコンパイルは演算的に複雑化し、その結果、より時間がかかるようになります。開発用コンピュータのリソースを節約するために、LabVIEW FPGAコンパイルシステムアーキテクチャにはコンパイルを専用のコンピュータに任せて負荷を軽減するオプションがあります。専用コンピュータは、高性能プロセッサと高レベルのRAMを装えたハイエンドコンピュータにする必要があります。表1は、様々なXilinx Virtex-5 FPGAに必要な最小RAMを示しています。

表1. Xilinx Virtex-5およびZynq-700 FPGAの推奨RAMに従う(出典:Xilinx Memory Recommendations Using the ISE Design Suite(ISE Design Suiteを使用する場合のXilinxでの推奨メモリ)

コンパイルジョブのパフォーマンスは、プロセスが大量のシステムメモリを必要としていて、ハードドライブを呼び出す必要があったり、時には終了を必要とする場合に、最も悪影響を受けます。最良の結果を得るには、表1の推奨事項に従ってください。32ビットサーバの場合、4 GBのRAMが必要で、Xilinxコンパイルツールのみをインストールする必要があります。3 GBのWindowsスイッチを使用して、OSがコンパイルに最大限のRAMを割り当てられるようにすることができます。表に示すように、64ビットシステムには、より多くのRAMを搭載する必要があります。当然、こうしたシステムは4 GBのRAMより多くのことに対処できるので、この場合RAM容量は多いほどよく、最大16 GBまで搭載できます。

 

1コンピュータオフロードする場合

LabVIEW FPGAモジュールを使用して、コンパイルサーバとコンパイルワーカを別々のコンピュータにインストールして、コンパイルを実行することができます。このためには、「リモートコンピュータにLabVIEW FPGAコンパイルサーバをインストールし、アクティブ化する」という記事に記述された手順に従ってください。

図5. LabVIEW FPGAモジュールでは、アドオンなしでオフロードされたシンプルなシングルマシンコンパイルサーバをサポート

 

コンパイルファームオフロードする場合

FPGA Compile Farm Serverを使用すると、複数の開発者がターゲットとする可能性のある複数のコンパイルワーカを含む、オンサイトのコンパイルファームを作成できます。注意:LabVIEW 2013 FPGAモジュール以前のバージョンの場合は、LabVIEW FPGA Compile Farm Toolkitを使用してください。

コンパイルサーバには、コンパイルジョブを利用可能な全てのワーカに割り振る役割があります。複数のコンパイルワーカがあるため、コンパイルは並列実行されます。利用可能なコンパイルワーカがない場合、コンパイルサーバはFIFOを使用して要求をキューに入れ、コンパイルワーカが利用可能になった時に要求を割り振ります。

 

図6. 1つのコンパイルサーバと複数のコンパイルワーカを使用したオンサイトコンパイルファームアーキテクチャ

 

オンラインコンパイルクラウドサーバオフロードする場合

FPGAコンパイルオプションでは、ナショナルインスツルメンツがクラウドとしてオンラインで提供しているコンパイルサーバおよびコンパイルワーカを使用します。使いやすくするため、LabVIEW FPGAから直接接続できる機能を追加し、ログインを入力するだけで、追加のインストールをしなくてもコンパイルがクラウドで処理できるようになっています。標準のWindowsデスクトップと比べて、FPGA VIではコンパイル時間が大幅に短縮されます。これはLabVIEW FPGA Compile Cloud Serviceが、最新の大容量RAMを搭載した専用のハイエンドコンピュータを使用してLinux上でXilinxコンパイルツールを実行するからです。クラウドでコンパイルする場合も、多数のVIを並列にコンパイルできます。

クラウドサービスをコンパイル先に指定するには、LabVIEW FPGAコンパイルサーバのダイアログボックスを使用して、オンラインクラウドサービスを選択し、ユーザ名とパスワードを入力します。

図7. LabVIEWを介してクラウドに接続し、コンパイル時間を短縮してコンパイルの負荷を軽減

コンパイルクラウドの設定が完了すると、サービスはローカルコンピュータやローカルコンパイルファームではなくクラウドにコンパイルを行います。接続には、ネットバンキングなどのインターネットサービスで使われているものと同様の最新セキュリティ対策が採用されています。

>> 詳細については、LabVIEW FPGA Compile Cloud Serviceを参照してください。

 

図8. コンパイルをオフロードするクラウドアーキテクチャ

 

Linuxコンパイル時間短縮

ナショナルインスツルメンツは、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コンパイルオプションを選択した後は、以下のリンクを使用して、設定方法の詳細についてご確認ください。

LabVIEW FPGA Compile Cloud Serviceに購入してコンパイルの時間を短縮

1つのリモートコンパイルコンピュータを構成

社内用LabVIEW FPGAコンパイルファームを作成

Linuxでコンパイルワーカを設定