複数のスレッドを利用するC++で作成したコードがいくつかあります。
私は配列を廃止し、プログラムをそのように合計することができます(複数の実行にわたって複数のスレッドで実行)、つまり-1 /+1乱数の合計
runningTotal += ((rng_1.rand_cmwc()%range + 1) <= halfRange ? 1: -1);
rng_1.rand_cmwc()はcmwcクラスの関数を参照し、rng_1はオブジェクトです。
OpenCl(http://opencl.codeplex.com/wikipage?title=OpenCL%20Tutorials%20-%201)でいくつか読んだことがあります。ライブラリをセットアップし、自分のホストをコンパイルしました。
それは私を質問#1に導きます
このクラスはOpenCLに存在しないので、このクラスを保持するためだけにカーネルを作成する必要があると思います。
変数:
runningTotalは長いです
範囲は一定の長さです
halfRangeはconstlong(つまり、range / 2)です
私の2番目の質問はです。
これは配列ではないため(ほとんどのOpenCLチュートリアルでは、OpenCLに配列内の複数の要素を同時に割り当てる方法について説明しています)。
セットアップ方法
runningTotal += ((rng_1.rand_cmwc()%range + 1) <= halfRange ? 1: -1);
複数のコアで実行するには?ワークグループを行いますか?
複数のカーネルを参照するcl_programclCreateProgramWithSourceコマンドを実行する方法の例を誰かに教えてもらえますか?
もっと質問があると思いますが、2つのカーネルが必要になると思います。それぞれが独自のワークグループを実行していますか?1つはcmwcクラス用で、もう1つはrunningTotalの合計用です。
次に、どういうわけか、すべての作業項目を頻繁に同期して、より大きな合計にします。