几乎在任何地方,我读过关于使用CUDA编程的内容,都提到重要性,即变形中的所有线程都执行相同的操作。
在我的代码中,我有一种情况,我无法避免某种情况。它看起来像这样:CUDA:同步线程
// some math code, calculating d1, d2
if (d1 < 0.5)
{
buffer[x1] += 1; // buffer is in the global memory
}
if (d2 < 0.5)
{
buffer[x2] += 1;
}
// some more math code.
一些线程可能会进入一个规定的条件,有些人可能会进入到这两个和其他可能无法进入任一。
现在为了让所有线程在条件结束后再次回到“做同样的事情”,我应该在使用__syncthreads()
之后同步它们吗?或者这是以某种方式自动发生的?
可以两个线程是而不是做同样的事情,由于其中一个是后面的一个操作,从而毁灭了每个人?还是有一些幕后的努力让他们在分支之后再次做同样的事情?
让我看看我是否明白。所以如果条件分支做相同数量的工作,这应该不会影响性能,因为每个线程都不会空闲太久。我对吗? – 2011-03-31 22:51:03
@omegatai我认识到你的评论是旧的,但其他人可能想知道,所以在这里:一个warp一次只能处理一条指令,所以如果warp中的某些线程做了一件事,其余的线程做其他事情,总时间是这两组线程的总时间量。在经纱内没有时间重叠。性能受到影响。 – 2013-10-15 21:11:31