画像データをダイレクト入力! OpenCLによるカメラ制御&画像処理

特集
OpenCLで直接I/O
第8章
Altera SDK for OpenCLのI/Oチャネル機能で
デバイス直接アクセスに挑戦
画像データをダイレクト入力!
OpenCL によるカメラ制御&画像処理
三好 健文
Takefumi Miyoshi
FPGA ならではの OpenCL の活用方法として I/O チャネルの使用事例を紹介します.I/O チャネルを使えば
OpenCL カーネルから外部デバイスを直接制御することができます.ここでは DE0-Nano-SoC を使用して,L チカ
を例題に開発フローを説明し,カメラを使ったアプリケーション事例を紹介します.OpenCL による開発の手軽
さと FPGA ならではのハードウェア制御を味わってみましょう.
メイン・メモリ
ホスト・
プロセッサ
アクセラレータ
(GPUなど)
OpenCL
カーネル
一般には,一度
メイン・メモリ
を介してデータ
をやりとりする
必要がある
I/Oデバイス
(ネットワーク・
アダプタなど)
外部へ
(a)一般のアクセラレータ上のOpenCLカーネルで
外部デバイスにアクセスする際のデータの流れ
メイン・メモリ
FPGAに同居させた制御回路を
介してOpenCLカーネルは直接
外部とデータをやりとりできる
FPGA
ホスト・
プロセッサ
OpenCLカーネル
から生成した回路
OpenCL
カーネル
外部デバイス
制御回路
外部へ
(b)Altera社のI/Oチャネル拡張を使う際のデータの流れ
図 1 一般の OpenCL 環境と I/O チャネルが使える FPGA 上の OpenCL 環境での外部とのやりとりの違い.I/O チャネルを使うと外部に直
接アクセスできる
1.FPGA ならではの OpenCL 拡張
〜 I/O チャネル〜
● OpenCL はメイン・メモリを介してデータ転送を
行う
GPGPU など一般に,CPU 以外のアクセラレータな
どのデバイスとデータをやりとりする場合には,ホス
ト・コンピュータはメイン・メモリを介してデータを
操作する必要があり,どうしてもデータ転送に時間が
かかってしまいます[図 1(a)].
それならアクセラレータ部分に直接データを流し込
めるようにしようというのが,今回紹介する I/O チャ
ネルという仕組みです.
I/O チャネルを使うことで,OpenCL カーネルから
外部デバイスにアクセスするポートを増設することが
でき,低レイテンシでアクセスできます[図 1(b)].
これは,あらかじめハードウェア構成が固まっている
GPU にはできない,プログラマブルなハードウェア
である FPGA ならではの芸当と言えます.
96
Altera 社の Web サイトには,HFT(高頻度取引)の
た め に ネ ッ ト ワ ー ク・ ア ク セ ス 用 の UDP コ ア を
OpenCL で制御するサンプルが用意されています.
● 外部と直接データ入出力を行える I/O チャネル
Altera SDK for OpenCL で は,OpenCL を 使 っ て
FPGA のハードウェア設計ができます.OpenCL は
GPU やアクセラレータ向けのプログラムを書くため
の共通言語として規格化されたものですが,共通の規
格以外にベンダごとの拡張機能があります.I/O チャ
ネルは,Altera 社による拡張機能の一つで,外部デー
タとのデータ入出力を直接 OpenCL で使えるようにす
る機能です.
I/O チャネルを自在に利用できるようになれば,あ
らかじめ用意された OpenCL 環境を拡張して,自分な
らではの計算プラットフォームを簡単に構築できます
(図 2)
.本稿では,I/O チャネルの利用事例として
FPGA に接続したカメラ(写真 1)を OpenCL で記述し
たハードウェアで制御,撮像する事例を紹介します.
第 8 章 画像データをダイレクト入力! OpenCL によるカメラ制御&画像処理