1D Convolution
239 字
1 分钟
1D Convolution
解析

该题要实现一个执行一维卷积运算的程序。
给定一个输入数组和一个卷积核(滤波器),计算卷积后的输出。卷积运算应满足“有效”边界条件,即卷积核仅应用于与输入完全重叠的区域。

卷积操作其实很简单,就是将卷积核和数组内元素先求积再求和而已。
答案
#include <cuda_runtime.h>
__global__ void convolution_1d_kernel(const float* input, const float* kernel, float* output, int input_size, int kernel_size) { int idx = blockIdx.x * blockDim.x + threadIdx.x; int output_size = input_size - kernel_size + 1; if (idx < output_size) { float sum = 0.0f; for (int i = 0; i < kernel_size; i++) { sum += input[idx + i] * kernel[i]; } output[idx] = sum; } }
// input, kernel, output are device pointers (i.e. pointers to memory on the GPU)extern "C" void solve(const float* input, const float* kernel, float* output, int input_size, int kernel_size) { int output_size = input_size - kernel_size + 1; int threadsPerBlock = 256; int blocksPerGrid = (output_size + threadsPerBlock - 1) / threadsPerBlock;
convolution_1d_kernel<<<blocksPerGrid, threadsPerBlock>>>(input, kernel, output, input_size, kernel_size); cudaDeviceSynchronize();}1D Convolution
https://dongyanzhang.com/posts/leetgpu/1d-convolution/


