10 行 96 列の 2D ホスト配列があります。この配列を cuda デバイスのグローバル メモリに線形にロードします。つまり、行 1、行 2、行 3 ... 行 10 です。
配列は float 型です。私のカーネルでは、各スレッドがデバイスのグローバル メモリから 1 つの float 値にアクセスします。
The BLOCK_SIZE I use is = 96
The GRID_DIM I use is = 10
合体アクセスの「Cuda Cプログラミングガイド」から理解した今、使用しているパターンは正しく、ワープによってメモリ位置に連続してアクセスします。ただし、メモリ 128 バイトのメモリ アラインメントに関する条項があります。私は理解できません。
Q1) 128 バイトのメモリ アラインメント。ワープ内の各スレッドは、アドレス 0x00 (たとえば) から 0x80 までの 4 バイトにアクセスする必要があるということですか?
Q2) では、シナリオでは非合体アクセスを行うのでしょうか?
私の理解では、0x00 から 0x80 などのアドレス範囲から、1 つのスレッドが 4 バイトで 1 つのメモリ アクセスを行う必要があります。ワープからのスレッドがその外側の場所にアクセスする場合、それは結合されていないアクセスです。