ここで紹介するのは、TinyMTをNVIDIA の GPGPU 環境であるCUDA で実行できるようにしたものです。
このプログラム、TinyMTのCUDA版は、MTGPおよびCURANDに比較して低速です。 それでも、このプログラムはCUDAユーザの役に立つと信じています。
このプログラムをコンパイルおよび実行するには、以下の環境が必要です。
以下のものは必要ありません。
オリジナルのC版のTinyMTを使わない場合、tinymtdcの出力結果は TinyMT DATAのページにあります。
以下のファイルはユーザの書いたカーネルプログラムに#includeして使うことを 念頭に作られています。また、CUDAの1スレッドにつき、1つのパラメータを使用し、1つの 疑似乱数系列を生成します。
以下のファイルはユーザの書いたホストプログラムとリンクして使うことを念頭に 作られています。
以下のファイルは、tinymt32_kernel.cuh や tinymt64_kernel.cuh の 関数を呼び出すサンプルカーネルプログラムです。 サンプルプログラムは、サポート対象外であり、また、ユーザはサンプルプログラムが、 私たちの著作権のもとにないと見なして構いません。
以下のファイルは、sample32_kernel.cuやsample64_kernel.cuにある カーネルプログラムを呼び出すサンプルホストプログラムです。
以下のファイルにはcuda 関数を呼び出すホストプログラムのためのユーティリティ 関数が入っています。このファイルはテスト専用です。このファイルの中の エラーハンドリング処理は注意深く設計されていません。
make allとタイプすると以下の4つの実行ファイルが作られます。
./sample32 tinymt32dc.0.65536.txt 12 256 100000000は、tinymt32dc.0.65536.txtファイルに記述されたパラメータを使って、 12 ブロック、256スレッドを指定してカーネルプログラムを呼び出し、 全部で100000000個(以上でブロック数×スレッド数の倍数となる最小の数) の疑似乱数を生成し、結果をスレッド単位で合計し、処理時間を出力します。
doxygenがあれば, make doc とタイプすることによってドキュメントが作れます。
以下のグラフはsample32-testとsample64-testを使って、gnuplotで 作成したグラフです。1億個のfloatおよびdoubleを生成するのに かかった時間をミリ秒で表しています。縦軸はミリ秒、横軸はブロック数です。