From 0086a4c7f74a8909700dd856360838f16fe1aef2 Mon Sep 17 00:00:00 2001 From: BoneInscri <941388383@qq.com> Date: Mon, 30 Sep 2024 20:03:40 +0800 Subject: [PATCH] amend statements --- 01Introduction/05Sample.md | 4 ++-- 02Hardware/01Foundation/03MobileParallel.md | 2 +- 02Hardware/02ChipBase/02CPUISA.md | 2 +- 02Hardware/03GPUBase/01Works.md | 2 +- 02Hardware/03GPUBase/04History.md | 2 ++ 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/01Introduction/05Sample.md b/01Introduction/05Sample.md index 686d9412..e35d759f 100644 --- a/01Introduction/05Sample.md +++ b/01Introduction/05Sample.md @@ -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 系统遇到的问题 @@ -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++ diff --git a/02Hardware/01Foundation/03MobileParallel.md b/02Hardware/01Foundation/03MobileParallel.md index c452c0e4..1225fae1 100644 --- a/02Hardware/01Foundation/03MobileParallel.md +++ b/02Hardware/01Foundation/03MobileParallel.md @@ -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) diff --git a/02Hardware/02ChipBase/02CPUISA.md b/02Hardware/02ChipBase/02CPUISA.md index a6ecfc5b..42230daa 100644 --- a/02Hardware/02ChipBase/02CPUISA.md +++ b/02Hardware/02ChipBase/02CPUISA.md @@ -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 架构使用有符号数,因此溢出会导致符号位的扩展。 diff --git a/02Hardware/03GPUBase/01Works.md b/02Hardware/03GPUBase/01Works.md index 733101c8..c0f703ef 100644 --- a/02Hardware/03GPUBase/01Works.md +++ b/02Hardware/03GPUBase/01Works.md @@ -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) diff --git a/02Hardware/03GPUBase/04History.md b/02Hardware/03GPUBase/04History.md index 03e747f9..880d8a50 100644 --- a/02Hardware/03GPUBase/04History.md +++ b/02Hardware/03GPUBase/04History.md @@ -317,6 +317,8 @@ H100 一共有 8 组 GPC、66 组 TPC、132 组 SM,总计有 16896 个 CUDA ![Hopper 赫柏架构](images/04History29.png) +**(注意:上面的图是GH100的图,而不是H100的图)** + > 格蕾丝·赫希贝尔·赫柏(Grace Hopper)是 20 世纪美国计算机科学家和海军军官,被誉为计算机编程先驱和软件工程的奠基人之一。在 1934 年获得了耶鲁大学数学博士学位,成为该校历史上第一位女性获得博士学位的人。在计算机领域做出了重要贡献,尤其在编程语言和软件开发方面有突出成就,被尊称为“软件工程之母”和“编程女王”。主要成就包括: > > 1. 开发了第一个编译器,将高级语言翻译成机器码,这项创新大大简化了编程过程,为软件开发奠定了基础。