まず、アルゴリズムへのリンクは次のとおりです。
GPU Gems 3、第39章:CUDAを使用した並列プレフィックス合計(スキャン)。
バンクの競合を回避するために、NUM_BANKS(つまり、計算可能性2.xのデバイスの場合は32)要素ごとに共有メモリ配列にパディングが追加されます。これは(図39-5のように)によって行われます。
int ai = offset*(2*thid+1)-1
int bi = offset*(2*thid+2)-1
ai += ai/NUM_BANKS
bi += ai/NUM_BANKS
temp[bi] += temp[ai]
ai/NUM_BANKSがマクロとどのように同等であるかわかりません。
#define NUM_BANKS 16
#define LOG_NUM_BANKS 4
#define CONFLICT_FREE_OFFSET(n) \
((n) >> NUM_BANKS + (n) >> (2 * LOG_NUM_BANKS))
等しいではありませんか
n >> LOG_NUM_BANKS
どんな助けでも大歓迎です。ありがとう