所以,我有一个代码,它在格子上使用 Kinetic Monte Carlo 来模拟某些东西。我正在使用 CUDA 在我的 GPU 上运行此代码(尽管我相信同样的问题也适用于 OpenCl)。
这意味着我将我的格子分成小的子格子,每个线程都在其中一个上运行。由于我在做 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 子句中的代码,但是随着我添加越来越多的线程,这将如何扩展?
任何关于我如何估计性能损失/收益的参考也将受到欢迎。
谢谢!