Closed AptX395 closed 3 years ago
- 04版本中使用cuda代码实现,而06版本使用cupy实现。直接用cuda代码实现,调用开销会稍微小一些;cupy版本要做一些pytorch和cupy的api的转换,但耗时也很少,因此调用速度上的差异可以忽略。
- 04版本的多步神经元,输入x[0,1,...,T-1]和v[0],输出s[0,1,...,T-1]和v[T-1];而06版本考虑到中间时刻的电压或许要用到,因而输入x[0,1,...,T-1]和v[0],输出s[0,1,...,T-1]和v[0,1,...,T-1]。06版本会用到grad_v[0,1,...,T-1]计算,而04版本只用grad_v[T-1],因而06版本会略微慢一些。
- 再就是04版本的cuda内核包括带梯度和不带梯度,而06版本我偷懒了一下,考虑到不带梯度的推理本身相对于训练耗时很小,就没有单独的写不带梯度的内核。
了解了,非常感谢您的解答!
最近我注意到 SpikingJelly 稳定版更新到了 0.00006 ,其中使用 CUDA 增强的神经元发生了较大的变化,从 cext 模块转移到了 clock_driven 模块。SpikingJelly 的文档中提供的示例所展示的性能也有一定的区别。
0.0.0.0.6 版本中的性能图示如下:
而 0.0.0.0.4 版本中的性能图示如下:
从运行时间的数值来看,0.0.0.0.6 版本的神经元运行时间比 0.0.0.0.4 版本的略长一点,而两个版本的测试代码似乎是相同的。
请问两个版本的实现有什么区别呢?新版本的运行时间长于旧版本的原因是什么呢?
十分感谢您的解答!