Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

amend statements #283

Merged
merged 1 commit into from
Oct 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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