Halide to FPGA とは?

サービス概要図
Halide” は、 Computer Vision と呼ばれる分野でのアプリケーションに特化したドメイン特化型言語 (Domain Specific Language: DSL) です。C/C++ による記述や OpenCV などの外部ライブラリを利用した場合に比べて、短い期間でより高速に動作するコードを記述することが可能です。オリジナルの Halide では、ターゲットデバイスとして x86、ARM、POWER 等のマルチコア CPU に加え、GPU や Xeon Phi といったアクセラレータにも対応しています。

一方、FPGA は、画像処理・信号処理全般で広く使われており、近年では機械学習・深層学習などにも適用シーンが広がってきました。また、高速処理と低消費電力を両立できることから、電力やスペースに制約が多い組み込み機器にも適したデバイスです。しかしながら、FPGA 上で動作するアプリケーション、FPGA IPの開発には、ソフトウェアを開発するためのプログラミング言語とは思想の異なる、ハードウェア記述言語 (Hardware Description Language: HDL) を使う必要があり、その習得の難しさや開発工数の長さは、製品開発での大きな課題となっていました。

 

“Halide to FPGA” では、Halide で書かれた様々なアプリケーション(Project) を無償で公開するとともに、独自の Halide DSL コンパイラ “Genesis” を使用して自動生成した FPGA IP を提供します。全ての FPGA IP のロジックは Halide で記述されているため、アルゴリズムの細部の変更、各種パラメータの調整、画像処理パイプラインの処理の入れ替え・追加、性能とリソースの調整などの要求に対しても、短期間でカスタム IP を提供可能です。また独自の Halide ソースコードを提供いただければ、オリジナルの FPGA IP をすぐにでも得ることができます(*)。

* カスタマイズや、新規Halide ソースコードからのFPGA IP 変換のご要望は問い合わせフォームフォーラムで受け付けますが、ベータ期間中は全てのご要望に対応することはできません。

 

 

 Technology Background

Build FlowHalide コードを FPGA 上で動作するシステムレベルのアプリケーションに変換するのは、独自に開発した ”Genesis™” コンパイラです。Genesis はいわゆるソースtoソースコンパイラとして動作し、Halide DSL を FPGA 向けに拡張された高位合成可能な C/C++ に変換します。変換された中間コードからは、ベンダ独自の高位合成ツールを使用して RTL や FPGA IP を生成できます。

Genesis には、フィックスターズが長年培ってきた並列化技術やハードウェア最適化技術が投入されています。Genesis が生成するハードウェアデザインは、HDL で開発した場合に比べても遜色ない処理速度とゲート占有率を誇ります。

 

 

 さあ始めましょう!

本ウェブサイトで公開している FPGA IP は、ARM CPU 混載 SoC FPGA である Xilinx Zynq 、具体的には Avnet ZedBoard (Xilinx Zynq XC7Z020-1CLG484) 上で動作を確認することができます。また、Halide CPUバックエンドを使用して、x86 CPU上で Halide DSL の開発を行うこともできます。詳しいセットアップ方法や、必要な環境についてはこちらを参照して下さい。また、Halide DSL で記述された FPGA IP のソースコードは、GitHub でも公開しています。

プロジェクト以下では、一つの完結した処理を行う“アプリケーション”と、画層処理・信号処理の開発場面でよく使われる処理を部品として切り出した“ライブラリ”に分けて Halide ソースコードと FPGA IP を公開しています。プロジェクトの種類は随時追加を予定しています。

それでは、Happy Coding!

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn