我对 CUDA 编程相当陌生,我正在尝试编写一个 CUDA 内核,用于仅对 3 维张量的 1 维进行并行缩减,该张量是float馈入内核的行主展平数组。
换句话说,我试图用,和numpy.sum的有限轴组合重写。axis=0axis=1axis=2
我已经成功实现了“reduce over axis 0”和“reduce over axis 1”,但是“reduce over axis2”的性能问题让我在这里发布了一个问题来寻求建议。
内核以一维网格和一维块配置启动,并将每个线程映射到缩减输出张量的每个元素。所以,它应该是这样的:

这是我的内核:
__global__ void kernel_reduce_sum_3d_try02(
float* g_idata,
float* g_odata,
int dim0,
int dim1,
int dim2,
int overaxis0,
int overaxis1,
int overaxis2)
{
if (overaxis0 == 0 && overaxis1 == 0 && overaxis2 == 1) {
// static shared memory
__shared__ float smem_store[BLOCK_SIZE];
// set thread ID
//unsigned int tid = threadIdx.x;
unsigned int tid …Run Code Online (Sandbox Code Playgroud)