1

ブロック1で16のスレッドが実行され、ブロック2で別の16のスレッドが実行されているとします。

各スレッドはメモリから1doubleを読み取ります。ブロック1の16スレッドはメモリアドレス0〜127から16 doubleを読み取る必要があり、ブロック2の16スレッドはアドレス128〜255から読み取る必要があります。

アクセスが合体しているため、ブロック1の16スレッドのメモリ読み取りを1回のメモリトランザクションで実行できることを知っています。

私の質問は、これら2つのブロックを検討する場合、1つまたは2つのメモリトランザクションが必要ですか?言い換えれば、異なるブロックによるメモリアクセスが同時に発生する可能性がありますか?

4

2 に答える 2

2

ブロックは完全に独立しています。ハードウェアは、異なるマルチプロセッサでブロックを起動することを選択できます(おそらくそうします)。

異なるブロックからのスレッドは、異なるワープで実行されます。したがって、それらの間でメモリアクセスを合体させることは不可能です。

于 2013-02-27T21:34:57.560 に答える
1

少なくとも2つのメモリトランザクションが必要です。確かに、各ブロックのスレッドは異なるワープで処理されます。

さらに、スレッドが1つのワープを形成した場合、または同じマルチプロセッサと共有L1キャッシュを占有した場合でも、ワープからのアドレスは128Bまたは32Bの行に変換されます(キャッシング/非キャッシングモードによって異なります)。したがって、キャッシングモードの場合は次のようになります。少なくとも2つのトランザクションが必要であり、非キャッシュモードの場合は8つのトランザクションが必要です。グローバルメモリアクセスをよりよく理解するために、この非常に役立つプレゼンテーションをご覧ください

于 2013-02-27T23:26:47.297 に答える