6

分岐の分岐は、「if」、「else」、「for」、「switch」などの分岐コードによってのみ引き起こされると常に思っていました。しかし、最近、次のような論文を読みました。

最初の各探索ベースのアルゴリズムでスレッドが取る発散分岐の数は、完全な探索戦略よりも少なくとも 2 倍重要であることが明確に観察できます。これは通常、グローバル メモリへの追加の非合体アクセスの結果です。したがって、 、このようなスレッドの分岐は、シリアル化する必要がある多くのメモリ アクセスにつながり、実行される命令の総数が増加します。

合体していないアクセスを使用するバージョンのワープシリアライゼーションの数は、対応するものよりも 7 倍から 16 倍重要であることがわかります。実際、結合されていないアクセスによってスレッドの分岐が発生すると、シリアル化する必要のある多くのメモリ アクセスが発生し、実行する命令が増加します。 "

著者によると、合体していないアクセスは分岐分岐を引き起こす可能性があるようです。本当?私の質問は、ブランチの分岐には正確にいくつの理由がありますか? 前もって感謝します。

4

1 に答える 1

3

著者は概念や用語について不明確だと思います。

発散とシリアル化の 2 つの概念は密接に関連しています。ワープ内のスレッドの分岐グループはシリアルに実行する必要があるため、分岐によってシリアル化が発生します。ただし、シリアライゼーションは分岐を引き起こしません。分岐とは、異なるコード パスを実行するワープ内のスレッドを具体的に指すためです。

シリアライゼーションの原因となるその他の要因として、バンクの競合とアトミック操作があります。

于 2013-09-30T14:59:37.120 に答える