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/
作者
阿东阿言
发布于
2026-07-14
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
阿东阿言
I share my notes | projects | experience here...
公告
欢迎来到阿东阿言的博客
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
分类
标签
站点统计
文章
25
分类
3
标签
5
总字数
11,186
运行时长
0
最后活动
0 天前
站点信息
构建平台
Local
博客版本
v1.0.0
文章许可
CC BY-NC-SA 4.0