forked from chenzomi12/AISystem
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path02.srt
1872 lines (1404 loc) · 27.4 KB
/
02.srt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1
00:00:00,000 --> 00:00:04,800
字幕校对:米哈游天下第一
2
00:00:04,800 --> 00:00:08,520
哈喽大家好,我是一周工作猛如虎
3
00:00:08,520 --> 00:00:12,120
拿到手里只有250的ZOMI
4
00:00:12,120 --> 00:00:14,000
一周确实只有 250
5
00:00:14,000 --> 00:00:16,320
低的可怜,职场上卷的不行了
6
00:00:16,320 --> 00:00:19,400
今天还是在 AI 芯片的 AI 芯片
7
00:00:19,400 --> 00:00:21,640
整体的基础看一看 CPU
8
00:00:21,640 --> 00:00:23,880
通用处理器
9
00:00:23,880 --> 00:00:25,480
实际上在通用处理器
10
00:00:25,480 --> 00:00:28,160
上一节已经讲了 CPU 的发展和组成
11
00:00:28,200 --> 00:00:31,520
从而引出了 CPU 的整体的并行的处理架构
12
00:00:31,520 --> 00:00:33,600
今天要主要去聚焦一下
13
00:00:33,600 --> 00:00:35,080
ISA 指令集架构
14
00:00:35,080 --> 00:00:36,800
来去看一看什么是
15
00:00:36,800 --> 00:00:39,920
ISA 所谓的指令集架构
16
00:00:39,920 --> 00:00:43,200
那 ISA 对于整个 CPU GPU
17
00:00:43,200 --> 00:00:46,040
包括到后面的 AI 芯片
18
00:00:46,040 --> 00:00:48,440
它都是非常的重要
19
00:00:48,440 --> 00:00:49,360
知道最后的内容
20
00:00:49,360 --> 00:00:51,920
来回顾一下 CPU 的应用场景
21
00:00:51,920 --> 00:00:53,640
那现在进入到第一个内容
22
00:00:53,640 --> 00:00:55,880
ISA 指令集架构
23
00:00:56,880 --> 00:00:59,640
所谓的 ISA 其实叫做
24
00:00:59,640 --> 00:01:01,640
Instruction Set Architecture
25
00:01:01,640 --> 00:01:04,280
也就是指令集的架构
26
00:01:04,280 --> 00:01:06,280
那 CPU 的全称其实叫做
27
00:01:06,280 --> 00:01:07,600
中央处理器
28
00:01:07,600 --> 00:01:09,640
CPU Center Processing Unit
29
00:01:09,640 --> 00:01:12,160
通常来说区别 CPU 的标准
30
00:01:12,160 --> 00:01:14,240
是指令集的架构
31
00:01:14,240 --> 00:01:15,640
也就是通过指令集架构
32
00:01:15,640 --> 00:01:18,480
去区分 CPU 的一个标准
33
00:01:18,480 --> 00:01:19,960
到底是属于 ARM 的呢
34
00:01:19,960 --> 00:01:22,240
还是属于 x86 的这种不同的体系
35
00:01:22,240 --> 00:01:23,520
当然了指令集架构
36
00:01:23,520 --> 00:01:25,400
包括后面的 GPU、NPU
37
00:01:25,400 --> 00:01:28,000
还有现在的 AI 芯片
38
00:01:28,000 --> 00:01:31,480
都是通过指令集架构去区分的
39
00:01:31,480 --> 00:01:33,320
实际上芯片的开发人员
40
00:01:33,320 --> 00:01:35,080
会基于指令集架构
41
00:01:35,080 --> 00:01:36,480
也就是所谓的 ISA
42
00:01:36,480 --> 00:01:38,800
通过不同的处理器硬件的方案
43
00:01:38,800 --> 00:01:39,800
来去实现的
44
00:01:39,800 --> 00:01:42,560
通过这种 ISA 去设计处理器
45
00:01:42,560 --> 00:01:46,040
因此说 ISA 是作为 CPU 的灵魂
46
00:01:46,040 --> 00:01:48,240
下面这个图就有点意思
47
00:01:48,240 --> 00:01:51,000
是把其中一个 ISA 拿出来
48
00:01:51,000 --> 00:01:52,600
其中一个指令拿出来
49
00:01:52,640 --> 00:01:55,520
那指令集它有很多的指令
50
00:01:55,520 --> 00:02:00,440
MIPS32 它是其中一个 Java 的指令
51
00:02:00,440 --> 00:02:02,680
下面以加法的这个指令
52
00:02:02,680 --> 00:02:03,840
具体打开看看
53
00:02:03,840 --> 00:02:06,480
指令集架构里面的其中一条
54
00:02:07,480 --> 00:02:11,360
首先 MIPS32 它是一个加法的指令
55
00:02:11,360 --> 00:02:13,920
那刚才讲的指令集是一个集合
56
00:02:13,920 --> 00:02:15,080
现在指令集里面
57
00:02:15,080 --> 00:02:17,040
有非常多的不同的指令
58
00:02:17,040 --> 00:02:18,600
而具体的一个指令
59
00:02:18,600 --> 00:02:20,600
是由两个部分来组成的
60
00:02:20,600 --> 00:02:21,720
左边的第一个
61
00:02:21,720 --> 00:02:22,880
就是运算符
62
00:02:22,880 --> 00:02:25,200
告诉现在到底它的 Op Code 是什么
63
00:02:25,200 --> 00:02:27,000
需要进行什么操作
64
00:02:27,000 --> 00:02:28,800
那这里面是以“加”为例子
65
00:02:28,800 --> 00:02:30,720
所以这里面真正的指令
66
00:02:30,720 --> 00:02:32,520
它这是一个加法
67
00:02:32,520 --> 00:02:34,920
右边的这个就是操作数
68
00:02:34,920 --> 00:02:37,160
需要操作的对象
69
00:02:37,160 --> 00:02:39,480
它的参数有三个
70
00:02:39,480 --> 00:02:42,240
R1 是目的操作数
71
00:02:42,240 --> 00:02:44,520
R2 是原操作数
72
00:02:44,520 --> 00:02:46,880
第三个 Immediate Value 是立即数
73
00:02:46,880 --> 00:02:49,440
就是把立即数跟原操作数相加
74
00:02:49,480 --> 00:02:51,800
把得到的结果存到目的操作数
75
00:02:51,800 --> 00:02:54,040
简单的来说就是 Immediate Value
76
00:02:54,040 --> 00:02:57,520
加上 R2 把得到的结果存回 R1
77
00:02:58,440 --> 00:03:00,840
这个就是加法的指令集了
78
00:03:02,160 --> 00:03:03,840
以加法这个指令作为例子
79
00:03:03,840 --> 00:03:06,160
讲完之后看看指令集
80
00:03:06,160 --> 00:03:08,520
其实它有主要的分类有三个
81
00:03:08,520 --> 00:03:10,160
第一个就是运算的指令
82
00:03:10,160 --> 00:03:11,560
那刚才讲到的加法
83
00:03:11,560 --> 00:03:12,960
就是运算指令
84
00:03:12,960 --> 00:03:16,400
在 ALU 当中去执行具体的计算操作
85
00:03:16,400 --> 00:03:19,160
第二种就是数据搬运的一些指令
86
00:03:19,160 --> 00:03:20,600
叫做数据移动指令了
87
00:03:20,600 --> 00:03:24,120
当然它包括大部分的数据的读写 IO
88
00:03:24,120 --> 00:03:25,280
那主要是指这些
89
00:03:25,280 --> 00:03:26,880
第三个对于 CPU 来说
90
00:03:26,880 --> 00:03:28,840
是非常重要的控制指令
91
00:03:28,840 --> 00:03:30,360
就是执行序列
92
00:03:30,360 --> 00:03:31,760
什么时候进行跳转
93
00:03:31,760 --> 00:03:33,560
什么时候 If else while for
94
00:03:33,560 --> 00:03:35,840
这些都属于控制指令
95
00:03:35,840 --> 00:03:37,560
而在这里面剧透一下
96
00:03:37,560 --> 00:03:40,080
AI 芯片里面
97
00:03:40,080 --> 00:03:43,320
很重要的就是会写自己的一些运算的指令
98
00:03:43,320 --> 00:03:46,200
包括谷歌的 TPU 还有华为昇腾的 NPU
99
00:03:46,200 --> 00:03:48,640
都会有自己独特的运算指令
100
00:03:48,640 --> 00:03:50,920
这就是对应cube核里面
101
00:03:50,920 --> 00:03:53,080
会做的一些特殊的操作
102
00:03:53,080 --> 00:03:56,360
接下来看一下整体的 ISA
103
00:03:56,360 --> 00:03:57,640
指令集架构
104
00:03:57,640 --> 00:03:59,680
它是有一个生命周期的
105
00:03:59,680 --> 00:04:00,520
这个字打错了
106
00:04:00,520 --> 00:04:01,320
不是生命周期
107
00:04:01,320 --> 00:04:02,400
而是生命周期
108
00:04:02,400 --> 00:04:04,640
整体来说它有 6 个生命周期
109
00:04:04,640 --> 00:04:06,040
当然了不是所有的指令
110
00:04:06,040 --> 00:04:07,840
都会循环这个周期
111
00:04:07,840 --> 00:04:08,840
但是这个周期
112
00:04:08,840 --> 00:04:12,520
基本上大原则来说是不会变化的
113
00:04:12,520 --> 00:04:14,360
接下来看第二个内容
114
00:04:14,360 --> 00:04:17,000
就是更宏观的去看看指令集架构了
115
00:04:17,000 --> 00:04:18,560
可以看到指令集架构
116
00:04:18,560 --> 00:04:20,400
主要可以理解为
117
00:04:20,400 --> 00:04:22,360
它是一个抽象的层
118
00:04:22,360 --> 00:04:23,480
属于处理器
119
00:04:23,480 --> 00:04:24,920
底层是硬件
120
00:04:24,920 --> 00:04:28,600
上层是软件连接的一个桥梁
121
00:04:28,600 --> 00:04:30,360
那指令架构刚才讲到了
122
00:04:30,360 --> 00:04:31,120
有计算的指令
123
00:04:31,120 --> 00:04:32,000
数据寻址的指令
124
00:04:32,000 --> 00:04:34,120
还有控制的指令
125
00:04:34,120 --> 00:04:37,120
通过这些去连接好硬件
126
00:04:37,120 --> 00:04:39,040
那硬件可能就会有一些微架构
127
00:04:39,040 --> 00:04:40,680
还有一些 IC 的电路
128
00:04:40,680 --> 00:04:42,080
还有逻辑门
129
00:04:42,080 --> 00:04:44,840
对上就对到机器码了
130
00:04:44,840 --> 00:04:47,080
指令集架构对应的是机器码
131
00:04:47,120 --> 00:04:48,760
对应到机器码之上了
132
00:04:48,760 --> 00:04:50,040
才是编译器
133
00:04:50,040 --> 00:04:52,360
还有一些 symbol 的语言
134
00:04:52,360 --> 00:04:53,960
包括编程语言
135
00:04:53,960 --> 00:04:56,560
在网上编译器网上就是编程语言
136
00:04:56,560 --> 00:04:58,160
再上去就是操作系统
137
00:04:58,160 --> 00:04:58,920
还有算法
138
00:04:58,920 --> 00:04:59,960
还有应用了
139
00:04:59,960 --> 00:05:02,360
它是这么一个具体的组成方式的
140
00:05:02,360 --> 00:05:04,280
所以欢迎大家去我的 GitHub 上面
141
00:05:04,280 --> 00:05:06,200
去取这些内容来看看
142
00:05:06,200 --> 00:05:07,080
去打开这些图
143
00:05:07,080 --> 00:05:08,960
这些图都是每一张都自己画的
144
00:05:14,600 --> 00:05:16,520
讲完 ISA 的一个宏观的概念
145
00:05:16,520 --> 00:05:17,880
有几个问题
146
00:05:17,880 --> 00:05:19,520
那这里面看一下大家懂不懂
147
00:05:19,520 --> 00:05:21,880
或者一起去探讨和思考的
148
00:05:21,880 --> 00:05:24,120
首先就是计算机的架构里面
149
00:05:24,120 --> 00:05:26,200
有多少个寄存器
150
00:05:26,200 --> 00:05:27,400
造个 register 呢
151
00:05:27,400 --> 00:05:30,760
才能够去存放各种各样的指令呢
152
00:05:30,760 --> 00:05:32,760
现在能够进行的
153
00:05:32,760 --> 00:05:34,680
有哪些运算的操作
154
00:05:34,680 --> 00:05:36,160
就有哪些具体的指令
155
00:05:36,160 --> 00:05:38,520
包括加减乘除这些我都知道
156
00:05:38,520 --> 00:05:40,080
但是具体有哪些呢
157
00:05:40,080 --> 00:05:42,120
复杂指令集跟简单指令集之间
158
00:05:42,120 --> 00:05:43,720
又有什么区别呢
159
00:05:43,720 --> 00:05:44,680
第三个问题就是
160
00:05:44,680 --> 00:05:47,040
如果遇到异常或者中断的时候
161
00:05:47,040 --> 00:05:48,440
应该怎么办呢
162
00:05:48,440 --> 00:05:49,560
就刚才指令集
163
00:05:49,560 --> 00:05:51,440
它是有自己的生命周期的
164
00:05:51,440 --> 00:05:53,760
中间整个生命周期被打断了
165
00:05:53,760 --> 00:05:55,280
怎么去执行呀
166
00:05:55,280 --> 00:05:58,320
第四个问题就是数据类型有很多
167
00:05:58,320 --> 00:06:01,000
但数据类型具体有几个字节呢
168
00:06:01,000 --> 00:06:02,520
具体应该怎么存呢
169
00:06:02,520 --> 00:06:03,800
对应指令集架构
170
00:06:03,800 --> 00:06:05,400
又有什么不一样呢
171
00:06:05,400 --> 00:06:06,640
指令集
172
00:06:06,640 --> 00:06:09,080
指令会有长度的嘛
173
00:06:09,080 --> 00:06:10,440
数据类型不一样
174
00:06:10,440 --> 00:06:12,200
那指令是不是长度不一样啊
175
00:06:12,200 --> 00:06:14,400
假设我有一个 int 的加法
176
00:06:14,400 --> 00:06:16,240
跟 float 的加法
177
00:06:16,240 --> 00:06:17,240
指令是两个吗
178
00:06:17,240 --> 00:06:18,200
还是一个
179
00:06:18,200 --> 00:06:20,160
这些问题都非常有意思
180
00:06:20,160 --> 00:06:22,600
非常欢迎大家去弹幕留言
181
00:06:22,600 --> 00:06:24,720
或者去深入地思考
182
00:06:24,720 --> 00:06:26,880
接下来看一下下一个内容
183
00:06:26,880 --> 00:06:28,040
就是 CISC的架构
184
00:06:28,040 --> 00:06:29,320
还有 RISC的架构
185
00:06:29,320 --> 00:06:30,760
那 CISC 的架构呢
186
00:06:30,760 --> 00:06:33,040
就是复杂指令集
187
00:06:33,040 --> 00:06:34,240
而 RISC 架构呢
188
00:06:34,240 --> 00:06:37,040
就是简单的指令集
189
00:06:37,040 --> 00:06:37,920
所谓 CISC
190
00:06:37,920 --> 00:06:39,280
它是一个复杂指令集嘛
191
00:06:39,280 --> 00:06:40,320
除了常用的指令
192
00:06:40,320 --> 00:06:43,120
还有包括非常多不常用的指令
193
00:06:43,120 --> 00:06:44,440
可能常用的指令呢
194
00:06:44,440 --> 00:06:45,760
只占到 20%
195
00:06:45,760 --> 00:06:47,040
80% 的指令呢
196
00:06:47,040 --> 00:06:48,520
都是不常用的
197
00:06:48,520 --> 00:06:49,400
但是没关系
198
00:06:49,400 --> 00:06:51,080
CPU 的面积呢
199
00:06:51,080 --> 00:06:52,040
可以做得很大
200
00:06:52,040 --> 00:06:53,200
晶体管呢
201
00:06:53,200 --> 00:06:54,920
也可以设计的非常的多
202
00:06:54,920 --> 00:06:56,680
放在笔记本上面呢
203
00:06:56,680 --> 00:06:59,280
其实是还是有很多冗余的地方
204
00:06:59,280 --> 00:07:01,320
所以可以存很多不常用的指令
205
00:07:01,320 --> 00:07:02,320
只要用到的时候
206
00:07:02,320 --> 00:07:04,400
直接把指令调起来就可以用了
207
00:07:04,400 --> 00:07:05,760
这里面可以看到
208
00:07:05,760 --> 00:07:07,440
CISC架构的它的栈呢
209
00:07:07,440 --> 00:07:08,720
是非常的深的
210
00:07:08,720 --> 00:07:10,520
下面看看 RISC 架构
211
00:07:10,520 --> 00:07:11,280
RISC 架构呢
212
00:07:11,320 --> 00:07:13,880
主要只有一些常用的指令
213
00:07:13,880 --> 00:07:14,680
不常用指令呢
214
00:07:14,680 --> 00:07:15,360
它没有
215
00:07:15,360 --> 00:07:17,680
它是用通过一些常用的指令
216
00:07:17,680 --> 00:07:19,080
去做拼接的
217
00:07:19,080 --> 00:07:19,600
当然了
218
00:07:19,600 --> 00:07:20,800
涉及到拼接
219
00:07:20,800 --> 00:07:22,000
它就会衍生了
220
00:07:22,000 --> 00:07:23,160
可能会更慢
221
00:07:23,160 --> 00:07:25,160
本来我在 CPU 上面
222
00:07:25,160 --> 00:07:26,920
在 CISC 架构上面呢
223
00:07:26,920 --> 00:07:28,760
执行一条不常用的指令
224
00:07:28,760 --> 00:07:29,960
可能在RISC 上面呢
225
00:07:29,960 --> 00:07:31,280
要执行五六条
226
00:07:31,280 --> 00:07:33,280
才能够拼起来
227
00:07:33,280 --> 00:07:33,720
现在呢
228
00:07:33,720 --> 00:07:35,320
举一个具体的例子
229
00:07:35,320 --> 00:07:36,640
一个矩阵层
230
00:07:36,640 --> 00:07:38,560
可能在 CISC里面呢
231
00:07:38,560 --> 00:07:40,280
有矩阵层这个指令
232
00:07:40,360 --> 00:07:40,760
但是呢
233
00:07:40,760 --> 00:07:42,240
RISC 里面没有矩阵层
234
00:07:42,240 --> 00:07:44,920
只有单个数据的相乘
235
00:07:44,920 --> 00:07:46,480
单个 scalar 的相乘
236
00:07:46,480 --> 00:07:47,120
这个时候
237
00:07:47,120 --> 00:07:48,720
如果要实现这个操作
238
00:07:48,720 --> 00:07:51,400
可能就要有大量的RISC的这种指令
239
00:07:51,400 --> 00:07:55,160
去组合成为一条一个复杂的矩阵层了
240
00:07:55,160 --> 00:07:55,680
接下来呢
241
00:07:55,680 --> 00:07:57,320
具体的打开一下
242
00:07:57,320 --> 00:08:00,480
CISC架构和 RISC架构具体的不一样
243
00:08:00,480 --> 00:08:02,960
现在先看一下CISC的架构
244
00:08:03,960 --> 00:08:04,880
CISC的架构呢
245
00:08:04,880 --> 00:08:06,680
因为引入了非常多
246
00:08:06,680 --> 00:08:08,520
平时很少用的指令
247
00:08:08,520 --> 00:08:11,280
所以会导致整个 cpu 的设计
248
00:08:11,280 --> 00:08:12,400
包括电路设计
249
00:08:12,400 --> 00:08:13,000
芯片设计
250
00:08:13,000 --> 00:08:14,000
还有软件栈的设计