- reduce思路,规约求和
- 将数组划分为n个块block。每个块大小为b,b设置为2的幂次方
- 分配b个大小的共享内存,记为float cache[b];
- 对每个块的数据进行规约求和:
- 定义plus = b / 2
- value = array[position], tx = threadIdx.x
- 将当前块内的每一个线程的value载入到cache中,即cache[tx] = value
- 对与tx < plus的线程,计算value += array[tx + plus]
- 定义plus = plus / 2,循环到3步骤
- 将每一个块的求和结果累加到output上(只需要考虑tx=0的线程就是总和的结果了)
- __syncthreads,同步所有block内的线程,即block内的所有线程都执行到这一行后再并行往下执行
- atomicAdd,原子加法,返回的是旧值
cuda-runtime-api-1.15-bank-conflict
Folders and files
Name | Name | Last commit date | ||
---|---|---|---|---|
parent directory.. | ||||