【发布时间】:2011-09-14 18:12:33
【问题描述】:
“SIMT”架构的一些概念和设计我还不清楚。
据我所见和阅读,完全不同的代码路径和 if() 是一个相当糟糕的主意,因为许多线程可能会以同步方式执行。现在这到底是什么意思?像这样的东西呢:
kernel void foo(..., int flag)
{
if (flag)
DO_STUFF
else
DO_SOMETHING_ELSE
}
参数“flag”对于所有工作单元都是相同的,并且所有工作单元都采用相同的分支。现在,GPU 是否会执行所有代码,仍然序列化所有内容,并且基本上仍然采用未采用的分支?还是更聪明一点,只要所有线程都同意所采用的分支,就只会执行所采用的分支?这将永远是这种情况。
即序列化总是发生还是仅在需要时发生?对不起这个愚蠢的问题。 ;)
【问题讨论】:
标签: opencl parallel-processing gpu gpgpu