CUDA 5.0で新たに追加された動的並列処理がプログラミング パターンの再帰と不規則なループ構造をサポートすることを Kepler アーキテクチャの技術概要から読みました。
しかし、不規則なループ構造とは何か誰か教えてもらえますか?
CUDA 5.0で新たに追加された動的並列処理がプログラミング パターンの再帰と不規則なループ構造をサポートすることを Kepler アーキテクチャの技術概要から読みました。
しかし、不規則なループ構造とは何か誰か教えてもらえますか?
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 コードを記述できるようになったことを示唆しています。この機能を正しく使用すると、子カーネルを起動することでワープ発散を回避するソリューションを実装できる可能性があります。