Skip to content

Commit

Permalink
Merge pull request chenzomi12#283 from BoneInscri/amend-statements
Browse files Browse the repository at this point in the history
amend statements
  • Loading branch information
chenzomi12 authored Oct 9, 2024
2 parents 846da0b + 0086a4c commit 3952d94
Show file tree
Hide file tree
Showing 5 changed files with 7 additions and 5 deletions.
4 changes: 2 additions & 2 deletions 01Introduction/05Sample.md
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ for n in range(batch_size):
for fw in range(filter_width):
# 乘加(Multiply Add)运算
output[h, w, oc] += input[h + fw, w + fh, ic]\
* kernel[fw, fh, c, oc]
* kernel[fw, fh, ic, oc]
```
### AI 系统遇到的问题
Expand Down Expand Up @@ -233,7 +233,7 @@ for n in range(batch_size):
![](images/04Sample05.png)
1. 通过 cuDNN + CUDA API 编程实现 LeNet
[参考实例 cudnn-training](https://github.com/tbennun/cudnn-training/blob/master/lenet.cu),需要~1000 行实现模型结构和内存管理等逻辑。
```C++
Expand Down
2 changes: 1 addition & 1 deletion 02Hardware/01Foundation/03MobileParallel.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ MobileNet 系列的网络设计中,提出了深度可分离卷积的设计策

在 DenseNet 和 GhostNet 的模型设计中,提出了一种通过 Reuse Feature Map 的设计方式来减少模型参数和运算量。

如下图,对于 DenseNetV1 的结构设计来说,第 n 层的参数量由于复用了之前层的 Feature Map, 由 $kxkxCix(C1+C2)$ 变为了 $kxkxCixC2$,即为原来的 $C2/(C1+C2)$,而 C2 远小于 C1,其中 k 表示卷积核尺寸, C1 表示前 n-1 层的 Feature Map 个数,C2 表示第 n 层的输出 Feature Map 个数。
如下图,对于 DenseNetV1 的结构设计来说,第 n 层的参数量由于复用了之前层的 Feature Map, 由 $kxkxC1x(C1+C2)$ 变为了 $kxkxC1xC2$,即为原来的 $C2/(C1+C2)$,而 C2 远小于 C1,其中 k 表示卷积核尺寸, C1 表示前 n-1 层的 Feature Map 个数,C2 表示第 n 层的输出 Feature Map 个数。

![](images/03MobileParallel03.png)

Expand Down
2 changes: 1 addition & 1 deletion 02Hardware/02ChipBase/02CPUISA.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ MIPS32 的指令字长是 32 位的定长格式,也就是由 32 个 0 或者 1

右边三个部分对应着的是操作对象,其中一共有三个参数分别是:目的操作数 Addr1、原操作数 Addr2 以及立即数 imediate Value。其中目的操作数 Addr1、原操作数 Addr2 都是 5 位所代表的是我们寄存器的地址,Addr1 用于存储计算后的结果,Addr2 地址中存储着要进行加法计算的数值。imediate Value 是一个立即数共 16 位,它是一个有符号的常量值,用于与 Addr2 寄存器中的值相加。

图中的立即数转化为十进制就是 350,这条指令会将寄存器 Addr2 中的值与立即数 355 相加,并将结果存储在 Addr1 寄存器中。
图中的立即数转化为十进制就是 350,这条指令会将寄存器 Addr2 中的值与立即数 **350** 相加,并将结果存储在 Addr1 寄存器中。

细心的读者应该是已经发现 addi 是 I 型(Immediate)指令,因为我们可以很明显的看到指令的后 16 位包含一个立即数操作数,立即数的大小通常限制在 16 位,这意味着它可以直接编码在指令中。在 MIPS32 中,立即数的范围通常是-32768 到 32767。addi 指令在执行时可能会发生溢出,但 MIPS 架构使用有符号数,因此溢出会导致符号位的扩展。

Expand Down
2 changes: 1 addition & 1 deletion 02Hardware/03GPUBase/01Works.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ void demo(double alpha, double *x, double *y)
示例代码中包含 2 FLOPS 操作,分别是乘法(Multiply)和加法(Add),对于每一次计算操作都需要在内存中读取两个数据,$x[i]$ 和 $y[i]$,最后执行一个线性操作,存储到 $y[i]$ 中,其中把加法和乘法融合在一起的操作也可以称作 FMA(Fused Multiply and Add)。
在 O(n) 的时间复杂度下,根据 n 的大小迭代计算 n 次,在 CPU 中串行地按指令顺序去执行 $AX+Y$ 程序。以 Intel Exon 8280 这款芯片为例,其内存带宽是 131 GB/s,内存的延时是 89 ns,这意味着 8280 芯片的峰值算力是在 89 ns 的时间内传输 11659 个比特(byte)数据。$AX+Y$ 将在 89 ns 的时间内传输 16 比特(C/C++中 double 数据类型所占的内存空间是 8 bytes)数据,此时内存的利用率只有 0.14%(16/11659),存储总线有 99.86% 的时间处于空闲状态。
在 O(n) 的时间复杂度下,根据 n 的大小迭代计算 n 次,在 CPU 中串行地按指令顺序去执行 $AX+Y$ 程序。以 Intel Exon 8280 这款芯片为例,其内存带宽是 131 GB/s,内存的延时是 89 ns,这意味着 8280 芯片的峰值算力是在 89 ns 的时间内传输 11659 个字节(byte)数据。$AX+Y$ 将在 89 ns 的时间内传输 16 字节(C/C++中 double 数据类型所占的内存空间是 8 bytes)数据,此时内存的利用率只有 0.14%(16/11659),存储总线有 99.86% 的时间处于空闲状态。
![内存总线 99.86%时间处于空闲状态](images/01Works04.png)
Expand Down
2 changes: 2 additions & 0 deletions 02Hardware/03GPUBase/04History.md
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,8 @@ H100 一共有 8 组 GPC、66 组 TPC、132 组 SM,总计有 16896 个 CUDA

![Hopper 赫柏架构](images/04History29.png)

**(注意:上面的图是GH100的图,而不是H100的图)**

> 格蕾丝·赫希贝尔·赫柏(Grace Hopper)是 20 世纪美国计算机科学家和海军军官,被誉为计算机编程先驱和软件工程的奠基人之一。在 1934 年获得了耶鲁大学数学博士学位,成为该校历史上第一位女性获得博士学位的人。在计算机领域做出了重要贡献,尤其在编程语言和软件开发方面有突出成就,被尊称为“软件工程之母”和“编程女王”。主要成就包括:
>
> 1. 开发了第一个编译器,将高级语言翻译成机器码,这项创新大大简化了编程过程,为软件开发奠定了基础。
Expand Down

0 comments on commit 3952d94

Please sign in to comment.