“SIMT”架构的一些概念和设计我仍然不清楚。
从我所看到和阅读的内容来看,完全不同的代码路径和 if() 是一个相当糟糕的主意,因为许多线程可能会步调一致地执行。现在这到底是什么意思?怎么样的东西:
kernel void foo(..., int flag)
{
if (flag)
DO_STUFF
else
DO_SOMETHING_ELSE
}
参数“flag”对于所有工作单元都是相同的,并且所有工作单元都采用相同的分支。现在,GPU 是否会执行所有代码,仍然序列化所有内容,并且基本上仍然采用未采用的分支?还是更聪明一点,只要所有线程都同意所采用的分支,只会执行所采用的分支?这里总是如此。
即序列化总是发生还是仅在需要时发生?对不起这个愚蠢的问题。;)