32バイトの2倍のサイズの64要素の共有メモリを使用する必要があります。従って、メモリアクセスの数は、ワープ内のスレッドの数の2倍である。銀行とのコンフリクトのないアクセスを得るためにはどうすればよいですか?共有メモリでのバンクコンフリクトフリーアクセス
答えて
32ビットメモリアクセスの場合、デフォルトのメモリアクセスパターンを使用できます。
__shared__ int shared[32];
int data = shared[base + stride * tid];
ここにstride
が奇数である。
あなたは64ビットアクセスを持っている場合は、このようないくつかのトリックを使用することができます。
struct type
{
int x, y, z;
};
__shared__ struct type shared[32];
struct type data = shared[base + tid];
ありがとうございました。例として、私は16のスレッドと共有される32要素の配列を持っているので、各スレッドはこの配列の2つの要素にアクセスしなければなりません。次に、上記の問題に応じてどのように適切なアドレッシングを行う必要がありますか? – BehzadX
最初のパターンはあなたのケースでうまくいきます。私は小さな質問をすることができます:なぜ16?スレッドブロック内のすべてのスレッドで共有される修飾子 '__shared__'を持つ配列。 – geek
これは単なる例です。実際には、スレッドによって実行される計算の中で質量行列のようないくつかの配列を共有するFEMシミュレーションを扱っています。 – BehzadX
のは、ので、あなたの共有メモリが16のバンクがあり、各スレッドが持っている、あなたは計算能力1.xのを使用していると仮定しましょう共有メモリ内の2つの要素にアクセスします。
スレッドは、両方の要素の同じメモリバンクにアクセスする必要があります。そのため、必要な要素が互いに16離れているように整理すると、バンクの競合は避けてください。
__shared__ int shared[32];
int data = shared[base + stride * tid];
int data = shared[base + stride * tid + 16];
私は複雑な山車を格納するために、このパターンを使用しますが、1は、転置アクセスパターンにシリアル化を避けるためである場合は、それは
#define TILE_WIDTH 16
__shared__ float shared[TILE_WIDTH][2*TILE_WIDTH + 1];
float real = shared[base + stride * tid];
float imag = shared[base + stride * tid + TILE_WIDTH];
のように見えたので、私は、複雑なfloatの配列を持っていました。
- 1. RDMAメモリ共有
- 2. cython共有メモリ - ブロック
- 3. セマフォと共有メモリ
- 4. ビジュアルスタジオと共有メモリ
- 5. Symbianの共有メモリの例
- 6. Cメモリ共有の問題
- 7. JavaとC++の共有メモリ
- 8. postgresql共有メモリの設定
- 9. Pythonプロセス間の共有メモリ
- 10. C++クラッシュの共有メモリ
- 11. uda共有メモリ上書き?
- 12. データ配信と共有メモリ
- 13. CUDAプログラミング - 共有メモリ構成
- 14. 共有メモリを持つクラウド
- 15. activerecordメモリ内共有キャッシュ
- 16. 共有メモリおよびグローバルメモリアクセス
- 17. 共有メモリのオーバーレイは何ですか?
- 18. アプリケーション間のデータ共有 - 共有メモリとD-Busとファイル操作
- 19. C++共有メモリリーク、共有メモリのクリア方法?
- 20. fork()で共有メモリを使用
- 21. 共有メモリ時々nullではないが
- 22. マルチスレッド環境で共有メモリを同期
- 23. モジュール間でメモリを共有する
- 24. 親プロセスと子プロセスがIPC共有メモリを共有する
- 25. 共有メモリへのアクセスの同期
- 26. ブーストの共有メモリの使用
- 27. Javaの共有メモリの概念
- 28. ユーザモードとカーネルモードの間の共有メモリ
- 29. GTK、子供の親、共有メモリ、
- 30. ユーザー空間とカーネルスレッド間の共有メモリ
Uは共有メモリにどのようにアクセスしますか?スレッドごとに64ビットアクセスが必要か、2つの32ビットアクセスが必要ですか? – geek