"convolution")解説Convolutionは、注目画素とその近傍の画素に対して同じサイズのカーネルと呼ばれる重み行列を掛けあわせ、それらの和をとって新しい値とする処理です。カーネルは、処理の目的によって様々な種類があります。平滑化フィルタ先鋭化フィルタエッジ強調フィルタなどがあり、同じアルゴリズムの畳込み処理であっても、異なる値のカーネルを使用するだけで、多様な処理結果を得ることができます。このコードの大きな特徴として、DSLコンパイル時に性能と消費リソースの調整が任意に可能な点が挙げられます。コンパイル時パラメータunroll_factorには、画像X方向に連続したピクセルをいくつ同時に処理するかを指定することができます。デフォルトでは2が設定されており、これは2ピクセルを同時に処理するようなデザインへと変換されます。2};入力画像は8ビット符号なし整数、カーネルは16ビットの固定少数点数を指定しています。"kernel"};カーネルサイズは3×3、5×5の選択式で、実行時パラメータkernel_sizeとして与えます。5};畳み込み処理は以下のように、sum_unroll関数を用いて記述されています。これは、与えられた式を指定した範囲内で畳み込むという組み込み関数です。kv));FPGA上に浮動小数点数演算を実装すると、多くのリソースを消費するため、畳み込み処理には固定少数点数演算を使用しています。以下のようにFixed16として定義されています。10>の型エイリアスになっており、Fixedクラスには任意精度の固定小数点数演算が演算子オーバーロードを使用して定義されています。HalideはC++のEDSLなので、テンプレートを使用して使用したい型を切り替えるだけで、精度や演算方法を自由に切り替え、素早くFPGAへと実装することが可能になります。全てのソースコードにアクセスするためには、Githubを、テスト用Linuxイメージの使用法はこちらを参照して下さい。IPコア形式での提供は近日中の対応を予定しています。レビューレビューはまだありません。コメントをキャンセルメールアドレスが公開されることはありません。Downloads:サンプルの形式を選択してください。ユーザ登録ログインするとダウンロードとカスタマイズなどのお問合せができます。