我从 Kepler 架构技术简报中了解到, CUDA 5.0中新添加的动态并行性支持编程模式中的递归和不规则循环结构。
但是谁能告诉我什么是不规则循环结构?
根据这本书第 146 页(专门解决实现内核的问题),
常规循环具有确定的迭代次数,而不规则循环的迭代次数取决于某些条件。
他们还在这里提供了一些示例:
常规循环
for (int i=0; i < 10; i++)
{
//...;
}
不规则循环
while (i < 0)
{
if (con)
{i--;}
else
//...;
i++;
}
另一个不规则循环
while (true)
{
if (cond1)
{break;}
else
{
//...;
if (cond2)
{break;}
}
}
需要明确的是,内核中对不规则循环的支持一直存在。相反,他们建议在 CUDA 5.0 中,您现在可以编写 GPU 代码,通过使用动态并行功能更接近地模仿递归或不规则循环算法。如果使用得当,此功能可以让您实施通过启动子内核来避免扭曲分歧的解决方案。