__global__ void sum(const float * __restrict__ indata, float * __restrict__ outdata) {
unsigned int tid = blockIdx.x * blockDim.x + threadIdx.x;
// --- Specialize BlockReduce for type float.
typedef cub::BlockReduce<float, BLOCKSIZE> BlockReduceT;
// --- Allocate temporary storage in shared memory
__shared__ typename BlockReduceT::TempStorage temp_storage;
float result;
if(tid < N) result = BlockReduceT(temp_storage).Sum(indata[tid]);
// --- Update block reduction value
if(threadIdx.x == 0) outdata[blockIdx.x] = result;
return;
}
我已经成功地用 cuda cub 测试了归约和(如上面的代码片段所示),我想根据这段代码执行两个向量的内积。但我对此有一些困惑:
我们需要两个用于 inner_product 的输入向量,我需要在对得到的新向量进行归约和之前对这两个输入向量进行逐个乘法运算。
在 cuda cub 的代码示例中,输入向量的维度等于 blocknumber*threadnumber。如果我们有一个非常大的向量怎么办。