KUMICO

COLUMN

組み込みとC言語とOpenCL

昨今、組み込み開発でもOpenCLを使用したケースが増えてきています。
OpenCLと聞いてまず思い浮かぶのはGPGPU。CPUとGPUを搭載したPC上で膨大な演算処理を行う際に、GPU上で演算処理を並列化するときに使われる手法の一つがOpenCLです。そのOpenCLを使った組み込み開発とは一体どうゆうことなのか?CPUとGPUを組み込みシステムに取り入れて行こうということか?GPUを組み込みシステムに使ったら発熱や電力消費はどうなるの?それとも全く別のなにか?ということで、まずはOpenCLとは何かをご紹介していきます。

OpenCLとは?

OpenCL(Open Computing Language)は、CPU(Central Processing Unit)、GPU(Graphics Processing Unit)、DSP(Digital Signal Processor)、FPGA(Field Programmable Gate Array)などで構成される異種混在環境(ヘテロジニアス・システム)で並列処理を使用するプログラムを作成するためのフレームワークで、オープンかつロイヤルティー・フリーの標準規格です。標準 ANSI C (C99) をベースとしたプログラミング言語で、ソフトウェア開発者が様々なプラットフォームに対しパフォーマンス向上をもたらすことのできるプログラミング・モデルです。2008年6月に米アップルが発表したのち、現在は米クロノス・グループがAPIの策定を行っています。

OpenCLと組み込み開発の接点

OpenCLはGPUのみならず、DSPやFPGAでの利用も考慮された規格となっています。そのため、いままで組み込みシステムに携わってきたソフトウェア開発者がなかなか手を出しづらかったFPGAも容易にプログラミングできる環境が提供されたということです。また、ここで一つ確認しておきたいのがOpenCLはFPGAで利用できる規格ですが、OpenCLのコンパイラや開発環境はサードパーティーによって提供することになっているため、各デバイスベンダーなどから入手する必要があります。FPGAベンダー大手のIntel(旧Altera)やXilinxはOpenCL Ecosystemに参加しており、既に開発環境が一般に公開されているため、OpenCLのコードを書けば今すぐ試すことができます。

OpenCLとC言語は同じ?

例えば、現在CPU向けのプログラムがあり、そのプログラムで行っている一部の演算処理をFPGAで処理させたい場合を考えてみます。その場合、プログラムを単純にOpenCLのコンパイラにかければ良いかと言うと、答えはNOです。CPUとFPGAのシステムでOpenCLを動作させる場合、CPU部分をホストコード、FPGA部分をカーネルコードと呼び、それぞれCPUとFPGAで処理させる内容を別に記述する必要があります。ホストコードは、並列で演算処理などを行うカーネルコードを呼び出す、言うなれば演算処理の関数を呼び出すだけなので、既存のプログラムから大きな変更点はなく、通常のC言語のままです。とは言っても、カーネルコードを呼び出す際の手順などが決まっているため、そのルールを覚え、処理を追加する必要があります。次に、カーネルコードはどうかと言うと、OpenCLはANSI Cをベースとしているので、既存プログラムから切り出した演算処理などC言語のままでもコンパイルは可能です。ですが、既存プログラムのままでは最適な並列処理は行われないことがほとんどで、OpenCLでの並列化などの記述方法を学びプログラムを変更する必要があります。また、FPGA向けOpenCLの場合、FPGA特有の最適な記述方法が別にある場合もあり、各FPGAベンダーが公開している資料などを参考に開発を進めるのが良いでしょう。最適なカーネルコードの記述は、並列処理の効率だけではなく、FPGAの使用リソースにも大きく影響します。一度コンパイルしてFPGAのリソース不足だからといって投げ出すのではなく、様々な資料と共にもう一度カーネルコードを見直すと、大きく結果が変わることもよくあることです。

OpenCLでFPGAの利点

FPGAでOpenCLを使用する場合、多くは次の2つの構成で使用されます。
1つ目はCPUとFPGAです。代表的な例として、サーバーマシンのメインCPUにPCIeで接続するタイプのFPGAを組み合わせ、サーバーで行う処理をアクセラレートするようなタイプのもの。様々なサービスがクラウドで行われる現在、サーバー向けのCPUとFPGAを組み合わせたプログラムを開発する環境などもFPGAベンダーから提供され、ちょっと組み込みとは離れた分野のようにも感じますが、FPGAの活躍する新たな領域として、これからどんどん盛り上がる分野だと思われます。
2つ目はSoC FPGA(ARMコアとFPGA)です。SoC FPGAは1チップでCPUとFPGAが使えるということで、既に様々な組み込みシステムに使用されています。そこにOpenCLの環境が整い、目をつける組み込みソフトウェア技術者が増えてきたと言うわけです。また、現在盛り上がりを見せているAI技術ですが、これがFPGAの並列演算処理と相性が良く、組み込み機器に頼るしかないような即座に応答する必要がある現場、例えば自動車向けのADASシステム、工場内でのロボット向けマシンビジョンなど、都度クラウドに接続せず、現場で判断させるエッジAIにはOpenCLで SoC FPGAを動作させるのに最適な組み合わせになっています。

FPGAを使いこなせ

組み込みソフトウェア開発者はOpenCLの登場で大きく自身の対応範囲を広げられる可能性がでてきます。組み込み特有のCPUの使い方、さらにFPGAによる並列処理をマスターすれば、これからもますます高度化する組み込みシステムにも幅広く対応していける力が身につくのではないでしょうか。

個別相談も承っております。下記よりお申し込みください。

個別相談会申し込み

OTHER COLUMN

MORE  

まこちゃんブログ

NEWS

MORE  

PARTNER

  • Intel
  • Xilinx

お探しの組み込み製品はキーワードで検索!