# 2025-cyf-hw1 **Repository Path**: gpuap/2025-cyf-hw1 ## Basic Information - **Project Name**: 2025-cyf-hw1 - **Description**: 2025年秋季国科大《GPU架构与编程》大作业一代码 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-01-25 - **Last Updated**: 2026-01-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SNN ## 介绍 2025年秋季国科大《GPU架构与编程》大作业一代码 ## 大作业一要求 基础题:基于CUDA架构语言实现脉冲卷积神经网络(Spiking Convolutional Neural Network, SCNN)的推理部分 加分题:使用PTX优化基础题实现的SCNN推理部分 ## 评分指标 在准确率大于0.8978的前提下,实现更快的运行时间。本人最终实现最快推理时间为0.0667s。 ## 代码说明 本实验主要修改了四个地方: **1.Conv2d_if_pool2×2_batched_kernel核函数** 基础实现思路: 该内核实现了卷积层、脉冲神经元(IF模型)和最大池化层的融合计算,一次性完成三个操作,减少内存访问和核函数调用开销;支持批量处理,支持同时处理多个输入样本;卷积权重与偏置用纹理内存,输入数据缓存复用;每个线程处理一个池化输出位置,计算四个卷积结果。 IF神经元模型: v_new = v_old + conv_output; spike = (v_new >= v_threshold) ? 1.0 : 0.0; v_mem = (1.0 - spike) * v_new; PTX指令优化: 使用mad.rn.32进行乘加运算;使用add.rn.f32进行偏置计算。 **2.Linear_if_batched_kernel核函数** 实现全连接层与脉冲神经元的融合计算,8倍展开处理主要部分,同时使用纹理内存缓存权重与偏置。IF神经元实现与卷积层实现相同;加分题部分也是用mad和add.rn.32实现乘加与加法。 **3.Linear_accum_batched_kernel核函数** 为输出层设计,实现全连接层与累加操作的融合,用于时间步上的脉冲累计;使用原子累加,保证多时间累加的正确性;PTX优化与前面类似。 **4.Scnn_inference函数** 该函数是SNN推理的主函数。参数配置上,时间步设为8,阈值电压为1.0,每个线程块512个线程。网络结构为: const int in_c = 1, in_h = 28, in_w = 28; const int k1 = 5, c1 = 6, c1_h = in_h - k1 + 1, c1_w = in_w - k1 + 1; // 24x24 const int p1_h = c1_h / 2, p1_w = c1_w / 2; // 12x12 const int k2 = 5, c2 = 16, c2_h = p1_h - k2 + 1, c2_w = p1_w - k2 + 1; // 8x8 const int p2_h = c2_h / 2, p2_w = c2_w / 2; // 4x4 const int flat_dim = c2 * p2_h * p2_w; // 256 const int fc1_out = 120; const int fc2_out = 84; const int fc3_out = 10; 推理时采用批量处理,一次处理2048个样本。