TinyMT OpenCL Sample
READ ME FIRST
TinyMT のOpenCL のサンプルです。Jump機能を含んでいます。
これはデータ並列カーネルのサンプルです。(NDRangeKernel呼び出しのサンプルです)
cl.hpp を使用していますので、あなたのOpenCL環境にcl.hppが含まれていない
場合は、
Khronos OpenCL API Registryからcl.hppをダウンロードして
インクルードパスの通った適切なディレクトリに置いておく必要があります。
また、c99 の stdint.h と inttypes.h も使用しています。
使用方法
テストプログラムのコンパイル
OpenCL Sample プログラムは単独ではコンパイルできません。TinyMT のソースファイルが
必要です。また、TinyMT-jumpのソースファイルが必要です。
- アーカイブファイルを解凍します。
- 出来たディレクトリ(TinyMTOpenCL-src-xxx)の中のopencl-sampleディレクトリを
TinyMTのディクレクトリにコピーします。
TinyMT-src-xxx
+---dc
+---tinymt
+---jump
+---opencl
- コピーしたopencl-sampleディレクトリにcd します。
- Makefile をエディタで開いて、linux の場合は、OPENCL = -lOpenCL の行の
コメントを外してください。OS X の場合は OPENCL = -framework opencl の行の
コメントを外してください。 先頭の # を消すことでコメントを外すことができます。
- make all でサンプルプログラムとテストプログラムがコンパイルされます。
- make check でテストが実行されます。
- チェックがエラーになった場合、エラーになったテストプログラムを実行してみてください。
カーネルプログラム内のインクルードでエラーになっている場合は、Makefile 内の
CL_OPT = -DINCLUDE_IMPOSSIBLE の行のコメントを外してください。この場合、
GPU にdouble 演算機能があるなら、さらに KERNEL_OPT の行の -DHAVE_DOUBLE
を有効にしてください。それから、make clean して、やり直してください。
- test で始まるテストプログラムを使い、work group の数、local work item の
数、生成する乱数の数を変えて実行することによって、
ユーザー環境での疑似乱数生成速度を計測することができます。
jumpを使ったサンプルカーネルプログラム
jump機能を使うとカーネルプログラムは単純になります。
サンプルプログラムsample32-jump.clでは
モンテカルロ法による円周率の計算を行っています。1/4円の中に落ちた点の数から
円周率を計算していますが、OpenCLの基本的な技法を使って、まずワークグループ
内の点を集計して、それから全体の集計をするようになっています。
work groupを超えた同期ができないので、すべてのワークグループに渡る合計の計算と
最終的な円周率の計算はホスト側で行っています。
License
このサンプルは商用利用を含むどんな目的にも自由に使用することができます。
詳細については、LICENSE.txt を見てください。
これは三項 BSDライセンスです。