2014年6月19日木曜日

OpenCLによるGPGPU入門③_二次元配列による計算。

DirectShowで取得した画像をOpenCLで画像処理するプログラムを書いた。
(……といっても、まだ、カラーを白黒に変換するだけのテストプログラム。
GPGPU入門といっても、DirectShowを使っている部分は全く別の話(記事)になるのだが、
global_work_sizeに限度がある事に気が付かずに手間取ったついでに、
OpenCLでの二次元配列の扱いについてメモしておく。)

始めは画像を一次元配列として扱い「global_work_size」を「0~1980*1080-1」で回そうとしたのだが、
global_work_sizeが大きすぎるとエラーを吐くので、結局二次元配列として扱い処理した。
(基本的にはglobal_work_sizeに制限は無いのだが、程度問題、という事で。。。)


以下OpenCLでの二次元配列の扱い方&ソースファイル。



二次元で計算させるには、「clEnqueueNDRangeKernel()」関数において、


要するに、
work_dim=2;
で次元を二次元にして、
global_work_offset  と
global_work_size     と
local_work_size      を、
それぞれ要素数2の配列として渡してやればいい。


kernelの方のプログラムは、結局一次元配列として扱う事にしたので、


get_global_id(0) + 1920*get_global_id(1)
として回せばいい。
三倍しているのはRGBが三色で、一回の操作で三色ずつデータ処理しているため。

一応ソースでも上げておくか……。
MD5 | 4e98311256c1255f05aeddfb1374c078 | 12.7 MB | OpenCLによるUBSカメラのリアルタイム画像処理。
http://ux.getuploader.com/ADMIS/download/48/Image_Processing_Ver03.01_00_OpenCL.zip

0 件のコメント:

コメントを投稿