问:为什么 GPU 比普通 CPU 贵?有什么不同?
( o5 g: h4 U4 v, y# G7 @
v# }9 g9 v8 f- y& V答:CPU 和 GPU 之间由来已久的争论。通俗地说,CPU 就像擅长按顺序解决复杂任务的聪明人,而 GPU 更像是同时处理多个任务的工人团队。GPU 的核心数量比 CPU 多,因此可以同时处理多个线程。 图片
1 P( ^! q( | F4 v
0 I6 s# h# K9 D$ n$ |" w1 {/ f) T那为什么 GPU 价格更高?这是因为它们的构建就像虚拟超级计算机一样。当谈到图形处理时,GPU 就像野兽一样,而人工智能的繁重工作负载涉及大量数据处理,这种东西会让 CPU 崩溃。想想看,当您玩游戏时,每一点高清、流畅的体验都归功于您的 GPU。但请记住这位朋友,这不仅仅是游戏,他们还擅长深度学习、机器学习、视频编辑,甚至医学研究等内容!
3 [/ ^( ~: z' P0 Y# C- f# V9 M1 ` _) M" m! ^' a
瞧,这不是一刀切的事情。你想要什么实际上取决于你需要什么。如果你是内容创作者、游戏玩家还是数据科学爱好者,那就选GPU。但如果只是处理一般的计算任务,CPU 就足够了,别浪费那钱了。2 H+ E. K) |" ?* B
0 E: y h; p, _. B
问:哪个处理器更快 - A(单线程、双核)或 B(双线程、单核)?& J% F5 u6 c4 o3 y! Z3 M
+ b9 u; u5 O7 N- ]
答:它实际上取决于用例和工作负载,但为了能够正确判断,我们需要了解含义和硬件线程。5 Z0 n1 U# B$ d0 p' L
% \- G: `8 d9 Q! `1 f7 V$ I硬件线程或超线程是已添加到 PCU 接口以允许更好地利用 cpu 资源的 CPU 功能之一,因此从用户角度(内核)它将看到两个 cpu 具有自己的一组内部/系统寄存器,但在实际上,这两个独立的接口在解码器/管道/OoO(乱序)缓冲区/ALU/L1 和 L2 缓存方面共享相同的 cpu 资源,因此从根本上来说,这样的概念允许增加超线程系统中要调度的任务的吞吐量。
/ E" P) A6 K" U" P4 f& E( F- v4 F5 s5 y1 e* z K7 Q
在基于 SMP 的系统(对称多处理)中,我们将拥有多核系统,其中每个核心只是从另一个核心复制,并具有所有可用的功能/硬件块,因此从用户角度(内核)来看,它将看到两个核心,因为每个核心都有它自己的一组寄存器和 CPU 接口,因此,当涉及基于超线程的系统或多核的系统时,从用户的角度来看,基本上没有任何变化。* e: M" d" [" i1 V6 z
$ E* z+ ?, T7 H3 s因此,如果我们对单个任务进行一些基准测试,基于超线程的系统可能会在某些方面(例如性能多核系统)胜出。7 V) Q) Q/ g1 C& C4 B
- m$ H- P0 p q g+ Q
要点是,对于多核系统,每个核心都有自己的高速缓存(L1/L2 高速缓存),当具有外部可共享的域和内存时,我们需要基于硬件和软件的高速缓存一致性来同步每个核心的视图,因此除了内核为调度单个任务并将其拆分为两个核心而增加的延迟时间之外,缓存一致性还增加了额外的延迟,以在两个核心之间同步该任务的缓存数据,因此基于延迟的多核对于单个任务有一些缺点。 E* q. y$ X/ I: w0 @
# N/ F* a( G! L0 S$ \: ?. Q
使用基于超线程的系统,虽然我们有 2 个 cpu 接口,但在内部这两个硬件线程共享相同的 cpu 资源,特别是 L1/L2 缓存,因此对于单个任务,在多缓存一致性方面不会增加任何开销,一部分可能来自物理存储器和高速缓存存储器之间需要一致性,这是所有具有高速缓存存储器的系统的标准配置,因此在单任务处理方面,基于超线程的系统与多核系统相比具有轻微的优势。
0 b& @! V5 x9 |) h) _ H6 o& K6 v" U, ~/ j% f9 z
然而,这只是一个微小的优势,因为在许多系统中,例如基于 cortex-a 的系统,ARM 在这里提供基于集群的方法,其中每个集群可以封装 4 个处理器,并且这 4 个处理器可以共享相同的 L2 数据高速缓存,但每个处理器当然都有其自己的 L2 数据缓存。自己的 L1 高速缓存内存,为了让事情更方便,他们在顶部添加了所谓的 SCU(监听一致性单元)作为硬件加速器,以实现同一集群中不同 cpu 之间的高速缓存一致性,这样的系统肯定会击败单任务的多线程系统,因为它在一定程度上消除不同内核之间缓存一致性的开销。
, a4 }8 I# ~$ h* r
% ^( ^4 q: ~0 v, F/ J对于基于独立多任务的用例,多核肯定会击败超线程,要点是对于独立多任务用例,每个进程将有自己的物理地址空间,并且这些任务之间不共享数据(如果需要)这种共享可以通过基于 IP 的邮箱独立处理,而不是基于共享内存的方法(例如在同一单个进程下运行的软件线程),因此这消除了由于硬件缓存一致性而产生的开销,并且由于每个核心都有自己的硬件资源集,因此我们可以在这种用例中达到两个任务的完全并行性,因此在性能方面,这种基于多核的系统肯定会在这种用例中击败基于超线程的系统。 S) j4 T% V* {
3 }8 e% ]" F( b7 ]
|