我们正在尝试使用CUDA CFD代码,其中3D字段被分解为1D或2D线程块(来自3D字段的水平切片)。在许多情况下,一个块内的所有线程共享重复计算,该计算仅取决于高度,即它对于线程块内的所有线程是类似的。什么是优化这种情况的最佳方法(特别是如果重复计算是整个内核中最昂贵的计算)?是否有可能让一个线程进行计算,并与其余线程共享结果?
由于我有限的CUDA知识,我能想到的最好的是:if(threadIdx x和y为0)计算重复值,放入共享内存(?),所有线程都使用共享内存中的这个值他们的计算。这会有效吗,还是有更好的方法?
答案 0 :(得分:1)
有很多方法可以做你想做的事情,但是如果没有更多的信息,就不可能说哪个是最好的。
一些选项,大致从“昂贵的计算并不是非常复杂”到“昂贵的计算非常复杂”:
这一切都取决于您实际的昂贵计算。理想情况下,您已在问题中提供了更多信息!