それで、何かをシミュレートするためにラティスでキネティック モンテカルロを使用するコードがあります。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 句内のコードに依存することはわかっていますが、スレッドを追加すると、これはどのようにスケーリングされるのでしょうか?
パフォーマンスの損失/利益を見積もる方法についての参考文献も大歓迎です。
ありがとう!