3

それで、何かをシミュレートするためにラティスでキネティック モンテカルロを使用するコードがあります。GPU でこのコードを実行するために CUDA を使用しています (同じ質問が OpenCl にも当てはまると思いますが)。

これは、ラティスを小さなサブラティスに分割し、各スレッドがそれらの 1 つで動作することを意味します。私はKMCをやっているので、各スレッドには次のコードがあります:

   While(condition == true){
     *Grab a sample u from U[0,1]*
      for(i = 0; i < 100;i++){
         *Do some stuff here to generate A*
          if(A > u){
              *Do more stuff here, which could include updates to global memory*
               break();
           }
      }
   }

A はスレッドごとに異なり、u も異なり、100 は単なる乱数です。コードでは、これは 1000 または 10000 になる可能性があります。

では、スレッドがその if を通過するときが来たら、分岐分岐が発生するのではないでしょうか? これはパフォーマンスにどの程度影響しますか? 答えは if 句内のコードに依存することはわかっていますが、スレッドを追加すると、これはどのようにスケーリングされるのでしょうか?

パフォーマンスの損失/利益を見積もる方法についての参考文献も大歓迎です。

ありがとう!

4

1 に答える 1