【CUDA学习笔记】OneFlow公众号CUDA算子优化文章学习笔记

1 CUDA学习资料合集

【OneFlow】岁末年初,为你打包了一份技术合订本

2 GPU概念介绍

《GPU的硬件结构与执行原理 —— 开源100天,OneFlow送上“百天大礼包”:深度学习框架如何进行性能优化 》

2.1 内存模型

2.1.1 Bank介绍

《GPU硬件结构之bank —— 开源100天,OneFlow送上“百天大礼包”:深度学习框架如何进行性能优化》

3 算子优化

3.1 Conv

3.1.1 Img2col:卷积优化算法

博文《基于OneFlow实现Unfold、Fold算子》(以下简称为“《Fold优化》”)
《基于OneFlow实现Unfold、Fold算子》:理解img2col

3.1.2 Unfold & Fold

《基于OneFlow实现Unfold、Fold算子》:Unfold、Fold算子是卷积优化的基础操作

为什么这里out在索引时设计成6维的方式来进行操作呢?

在阅读《Fold优化》时,我们发现out采用6维的形式来进行操作,
【CUDA学习笔记】OneFlow公众号CUDA算子优化文章学习笔记_第1张图片
这样是为了CUDA编程时,索引可以直接对应上去,这样代码写作起来会更加简单;

3.2 Softmax

《如何实现一个高效的 Softmax CUDA kernel?——OneFlow 性能优化分享》

(1)OneFlow为什么在Softmax实现时会使用ReduceMax操作呢?

这个问题的来源是这样的,博文《如何实现一个高效的 Softmax CUDA kernel?——OneFlow 性能优化分享》(以下简称为“《Softmax优化》”)在描述Softmax的CUDA实现时表示使用了ReduceMax操作,(也就是求某个维度上的最大值),但是根据Softmax的公式,这个操作在数学上其实是没有必要的,那为什么OneFlow会在CUDA实现时使用ReduceMax操作呢?
关于这一点,我们请教了晓雨哥,

【晓雨哥】:
应该是防溢出吧。

于是我们可以知道,先进行ReduceMax操作的目的是为了减去最大值,从而减小每个元素的绝对值,防止指数操作可能产生的数值溢出。

你可能感兴趣的:(学习,oneflow,人工智能)